javascript - 为什么这个循环会逐渐变慢?

标签 javascript jquery performance

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

相当简单的问题。我正在针对选择器过滤器迭代 jQuery 结果集,直到找到匹配项,然后在结果集中向上爬。

这个循环运行的时间越长,它变得越慢,几乎呈指数级增长。

最佳答案

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

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')];
}

关于javascript - 为什么这个循环会逐渐变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065644/

相关文章:

javascript - react 中是否有状态突变观察者?

javascript - AngularJS 复选框奇怪的行为

混淆导致性能损失?

javascript - 自定义指令 v-focus 在 Vue 应用程序中使用 v-show 输入

javascript - 在 nuxt.js View 中使用 jquery

jQuery - 禁用基于选项关键字而不是值的选择选项

Java:哪个更快?局部变量还是访问封装?

java - 正在使用 query.getResultList();方法对性能有严重影响?

c# - 使用 .load jquery 时执行 C# 代码

javascript - JQuery .mouseover 和 .mouseout 改变字体颜色