需要改进性能



我正在尝试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

最新更新