-3

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

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

4

2 回答 2

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;
}
于 2013-01-03T09:50:57.880 回答
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选择器中的 。
此外,如果您的所有.tabs 都是li,那么您也可以删除li。如果你所有的 li.tabs 都在里面ul,你也可以删除ul

于 2013-01-03T10:00:40.707 回答