因此,我正在构建一个应用程序,从我访问的网站中以更友好的用户界面显示图像板.目前它存在很多问题,但现在最大的问题是获取图像以显示它们.
我现在拥有它的方式,图像显示在大小为12的GridView中,镜像了图像板每页上的图像数量.我正在使用Jsoup来抓取页面,以便在GridView中显示缩略图图像URL,以及获取用户点击缩略图时要显示的全尺寸图像的URL.
现在的问题是,Jsoup平均需要8-12秒来获取HTML页面.我发现这是不可接受的,我想知道是否有任何方法可以加快速度,或者这是否是一个我无法做任何事情的固有瓶颈.
这是我用来获取页面的代码:
try {
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("img[src*=/alt2/]");
for (Element link : links) {
thumbURL = link.attr("src");
linkURL = thumbURL.replace("/alt2/", "/").replace("s.jpg", ".jpg");
imgSrc.add(new Pair<String, String>(thumbURL, linkURL));
}
}
catch {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我使用Jsoup作为TLFN刮刀,我对速度没有任何问题.你应该缩小瓶颈.我认为你的刮擦是造成速度问题的原因.尝试分别跟踪您的选择器和网络流量,看看应该责怪哪个.如果您的选择器受到责备,那么请考虑寻找另一种方法来查询和对结果进行基准测试.
为了更快,更一般的想法,测试你总是可以从普通的Java项目运行Jsoup,当你觉得你已经改进它时,把它扔回设备上,看看它是否有类似的性能改进.
编辑
不是这是你的问题,但要注意使用迭代器'可以'导致相当多的垃圾收集触发.通常情况下这并不是一个问题,尽管如果你在许多重复使用它们的地方使用它们,它们可能会导致某些设备受到明显的性能影响.
不是很好
for (Element link : links)
Run Code Online (Sandbox Code Playgroud)
更好
int i;
Element tempLink;
for (i=0;i<links.size();i++) {
tempLink = links.get(i);
}
Run Code Online (Sandbox Code Playgroud)
编辑2
如果图像URL以/ alt2 /开头,您可以使用^ =而不是*=这可能会使搜索更快.此外,根据HTML的数量,您可能会浪费大量时间在这些图像的完全错误的位置查找.检查这些图像是否包装在可识别的容器内,例如<div class="posts">.如果您可以缩小HTML的数量来筛选它可能会提高性能.
| 归档时间: |
|
| 查看次数: |
10230 次 |
| 最近记录: |