jquery - jQuery 的范围更小,但性能更慢?

标签 jquery performance caching

我在这里创建了一个jsfiddle:http://jsfiddle.net/2tfbs/1/

既然底层循环中find的范围较小,为什么速度会慢很多呢?如果您更改 jQuery 版本,从 1.4.4 开始,性能会受到影响(Firefox 5 中影响很大),但在所有版本中,结论基本相同。

如果将第一个循环更改为简单的 $('#container') 而不是缓存变量,结果也是相同的,并且似乎与我读到的“缓存更快”的内容相矛盾。

我做错了什么吗?我不明白发生了什么事。

编辑:来自 jsfiddle 的代码

html:

<div id="container">
    <div class="post">
        <div class="content">
            <span></span>
        </div>
        <div class="meta">
            <span></span>
        </div>
    </div>
    +2 more iterations of a post block
</div>

js:

//first loop
var $container = $('#container');
var i = 1000,
    a, start1 = new Date();
while (i--) {
    a = $container.find('div.content');
}
var end1 = new Date();
$('#one').text((end1 - start1) / 1000);

//second loop
var $post = $container.find('div.post');
var j = 1000,
    b, start2 = new Date();
while (j--) {
    b = $post.find('div.content');
}
var end2 = new Date();
$('#two').text((end2 - start2) / 1000);

最佳答案

因为您在第二个循环中针对多个元素运行 find()

在第一个循环中,您的选择器匹配单个元素(您有一个#container)。在第二个循环中,您的选择器匹配多个元素(您有许多 div.content)。更多元素意味着更多匹配意味着更多循环。

关于jquery - jQuery 的范围更小,但性能更慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7479470/

相关文章:

JavaScript AJAX 传递多个变量的困惑

javascript - 修改 DOM 元素和限制回流的最有效方法是什么?

JavaScript 算法性能 - 计算可被 k 整除的范围内的数字个数

javascript - 是否可以在 slimbox 中显示的图像中添加链接?

javascript - Jquery Spinner 箭头未加载(可见性)

c# - isNumber(string) 方法的最佳实现

javascript - iOS 6 上的 Safari 是否缓存 $.ajax 结果?

javascript - 我如何强制客户端刷新在 Node.js 中使用 Jade 呈现的 JavaScript/CSS 文件?

php - 使用 PHP cURL 缓存

javascript - 切换复选框时语义 ui 禁用输入字段