javascript - 有人可以解释为什么这个测试显示 jquery $.each 比原生更快吗?

标签 javascript jquery for-loop each

我正在 Chrome 的浏览器控制台中运行以下测试。我想看看 native for 快了多少,却发现结果显示 jquery $each 更快?我知道这不是真的,但如果可能的话我希望得到解释。

var array = new Array();
for (var i = 0; i < 10000; i++) {
    array[i] = 0;
}

console.time('native');
var l = array.length;
for (var i = 0; i < l; i++) {
    array[i] = i;
}
console.timeEnd('native');

console.time('jquery');
$.each(array, function(i) {
    array[i] = i;
});
console.timeEnd('jquery');

native: 26.160ms
jquery: 5.665ms

如果我将相同的代码放入 setTimeout() 中,那么结果如下:

native: 0.123ms
jquery: 0.885ms

最佳答案

这可能是由于 Chrome 编译函数而不是编译函数之外的控制台输入。编译函数运行速度要快得多。 jQuery.each 已编译(当时 jQuery 已包含在页面中)。

将您的第一个测试包装在立即调用的函数中(Chrome 可以在执行之前对其进行编译),您将看到非常相似的结果:

console.time('native');
(function(){
    var l = array.length;
    for (var i = 0; i < l; i++) {
        array[i] = i;
    }
})();
console.timeEnd('native');

console.time('jquery');
// ... unchanged
console.timeEnd('jquery');

native: 3.518ms
jquery: 3.308ms

这就是为什么当您将代码放入 setTimeout 中的函数内部(例如 setTimeout(function() { ... }, 1))时,您会看到截然不同的结果。函数内的代码被编译并运行得更快。

关于javascript - 有人可以解释为什么这个测试显示 jquery $.each 比原生更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344686/

相关文章:

javascript - React 组件 require.default 未定义

javascript - ES6 箭头函数返回不同的值

php - 数据表:未捕获类型错误:无法读取未定义的属性 'parentNode'

javascript - 使用 d3 在移动设备上缩放触摸

python - 如何在一行中编写一个for循环和多个if语句?

javascript - 如何在 javascript 中使用 Onclick 属性动态创建对象

javascript - 我如何使用 jquery 获取元素后的字符串?

javascript - 如何获取输入对象的类型

javascript - 将参数传递到 FOR 循环中

for-loop - 我可以用 awk "for loop"执行 '!seen[$0]' 来应用于多个 .txt 文件吗?