Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个循环会逐渐变慢? for(i=0;ip font i'); 对于(var i=0,size=nodes.length;i_Javascript_Jquery_Performance - Fatal编程技术网

Javascript 为什么这个循环会逐渐变慢? for(i=0;ip font i'); 对于(var i=0,size=nodes.length;i

Javascript 为什么这个循环会逐渐变慢? for(i=0;ip font i'); 对于(var i=0,size=nodes.length;i,javascript,jquery,performance,Javascript,Jquery,Performance,这个问题相当简单。我将根据选择器过滤器迭代jQuery结果集,直到找到匹配项,并在运行过程中逐步遍历结果集 此循环运行的时间越长,速度就越慢,几乎是指数级的。每次迭代都要在DOM树中搜索,这是一项昂贵的操作,解决方案是缓存: for (i = 0; i < $('body > p font i').length; i++) { current = [$('body > p font i').eq(index), $('body > p font i').eq(in

这个问题相当简单。我将根据选择器过滤器迭代jQuery结果集,直到找到匹配项,并在运行过程中逐步遍历结果集


此循环运行的时间越长,速度就越慢,几乎是指数级的。

每次迭代都要在DOM树中搜索,这是一项昂贵的操作,解决方案是缓存:

for (i = 0; i < $('body > p font i').length; i++) {
    current = [$('body > p font i').eq(index), $('body > p font i').eq(index).index('body > p font u, body > p font i')];
    getState(current[1]);
}

function getState(index) {
    // Lookup the object's index, then crawl up until you find a match
    while ($('body > p font u, body > p font i').eq(--index).filter('u').length == 0);
    console.log($('body > p font u, body > p font i').eq(index).text());
}
var节点=$('body>p font i');
对于(var i=0,size=nodes.length;ip font u,body>p font i');
}

您的意思是在第一行末尾有一个分号吗?是的,我想找到匹配结果的索引。预先添加代码以进行澄清。请使用
i
而不是索引。在第二行+如果您只需要第二个元素,那么为什么要在数组中存储元素。如果没有找到匹配项,则while循环从不结束。对于启动器,您应该缓存jQuery对象<代码>变量$elements=$('body>p font i')$元素.eq(…是的,我明白了。为什么它会导致它随着时间的推移而变慢,而不是一开始就变慢?它会一次又一次地将自己缓存在某个地方吗?@Thirk如果你在列表中移动,那么第一次你只检查一个项目,然后是两个,然后是三个,等等。@kidwon如果有什么东西在身体中添加元素呢??@MikeC mm,我应该意识到,我想这就是减速的原因。谢谢!@Mahi!如果metor撞到地球,它会出问题吗
var nodes = $('body > p font i');
for (var i = 0, size = nodes.length; i < size; i++) {
    current = [nodes.eq(index),nodes.eq(index).index('body > p font u, body > p font i')];
}