需要提高性能

时间:2013-01-03 09:45:53

标签: javascript jquery performance

我正在尝试CasperJS。我正在尝试创建一个网络剪贴簿。我需要废弃网站的所有页面并在不到5秒(每页)中获取数据。 为此,我将不得不浏览所有类似的页面。转到适当的内容div并从那里获取数据。  所以,如果该网站说1000页。我需要尽快完成整个操作。我无法控制N / W延迟,页面大小等参数。我所能控制的只是解析机制。所以我希望它尽可能快。如果甚至有小的改进,那么它将推断为URL的数量

我正在尝试解析子元素并创建CSS路径。 我需要确保解析不需要很长时间。 我听说标准java脚本在性能方面比JQuery更高效。 因此,我需要投入。

以下JQuery代码的标准JS等价物,在解析方面性能高效。

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
}

如果有人可以提供任何其他建议,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

这应该这样做:

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;
}

答案 1 :(得分:0)

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;
}

由于你正在存储选择器,对我来说似乎仍然效率低下(使用nth-of-type是昂贵的选择器)。选择器从右到左阅读。

CSS /选择器优化
注意, div#buttons似乎是多余的。如果您正确使用CSS,那么您将只拥有与id='buttons'匹配的一个元素。因此,通过正确使用ID,您应该能够删除选择器中的div 此外,如果您的所有.tab都是li,那么您也可以删除li。如果您的所有li.tab都在ul内,您也可以删除ul