我正在尝试CasperJS。我正在尝试创建一个web 刮刀。我需要刮网站的所有页面(s),并获得数据在不到5秒(每个页面)。为此,我将不得不爬过所有类似的页面。转到适当的内容div并从那里获取数据。如果这个网站有1000页。我需要尽快完成整个操作。我不能控制N/w延迟,页面大小等参数。我所能控制的只是解析机制。所以我希望它越快越好。如果有很小的改进,那么它将推断为url的数量
我试图解析子元素和创建CSS路径。我需要确保解析不会花费很长时间。我听说标准的java脚本在性能方面比JQuery更有效。因此,我需要输入
什么将是标准JS等效的JQuery代码,在解析方面性能有效。
function() {
var TAG_CSS_PATH = 'div#buttons ul li.tab';
var selectOptions = $(TAG_CSS_PATH);
var results = [],i=0;
selectOptions.each(function(index,value) {
index=index+1;
results.push(TAG_CSS_PATH+':nth-of-type('+index+')');
});
return results
}
如果有人能提供任何其他建议,我将不胜感激。
应该这样做:
function() {
var TAG_CSS_PATH = 'div#buttons ul li.tab',
selectOptions = document.querySelectorAll(TAG_CSS_PATH),
results = [],
l = selectOptions.length + 1;
for(var i = 1; i < l; i++){
results.push(TAG_CSS_PATH+':nth-of-type('+i+')');
}
return results;
}
jQuery部分是$selector和$each。这些可以按如下方式替换。
function() {
var TAG_CSS_PATH = '#buttons ul li.tab',
selectOptions = document.querySelectorAll(TAG_CSS_PATH),
results = [];
for( var i = 1, ln = selectOptions.length + 1; i < ln; i++ ) {
results.push(TAG_CSS_PATH+':nth-of-type('+ i +')');
}
return results;
}
因为你在存储选择器,它对我来说仍然是非常低效的(使用第n种类型的选择器是昂贵的)。选择符从右向左读取
/CSS选择器优化
请注意,div#buttons
似乎是多余的。如果您正确使用CSS,您将只有一个与id='buttons'
匹配的元素。因此,通过正确使用id,您应该能够删除选择器中的div
。
此外,如果所有的.tab
都是li
,那么您也可以删除li
。如果你所有的li.tab
都在ul
里面,你也可以移除ul
。