Javascript 有人能解释一下为什么这个测试显示jquery$。每个都比本地的快吗?

Javascript 有人能解释一下为什么这个测试显示jquery$。每个都比本地的快吗?,javascript,jquery,for-loop,each,Javascript,Jquery,For Loop,Each,我正在Chrome浏览器控制台中运行以下测试。我想看看原生版的速度有多快,结果却发现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++) {

我正在Chrome浏览器控制台中运行以下测试。我想看看原生版的速度有多快,结果却发现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

这可能是由于Chrome编译函数,而不是在函数之外编译控制台输入。编译后的函数运行得更快<代码>jQuery。每个都已编译(在页面上包含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
console.time('native');
(功能(){
var l=数组长度;
对于(变量i=0;i

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

这可能是由于Chrome编译函数,而不是编译函数外部的控制台输入。编译后的函数运行得更快<代码>jQuery。每个
都已编译(在页面上包含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
console.time('native');
(功能(){
var l=数组长度;
对于(变量i=0;i

这就是为什么在
setTimeout
中将代码放入函数中时,会看到截然不同的结果,就像
setTimeout(function(){…},1)
一样。函数中的代码被编译并运行得更快。

它们实际上并不相等,因为
i
的值是以完全不同的方式计算的。因此,您的意思是测试代码有问题吗?这似乎不是一个公平的测试,因为您已经更改了多个因素。@Quentin正确的测试代码是什么与?用于方法比较:它们实际上并不相等,因为
i
的值是以完全不同的方式计算的。因此,您的意思是测试代码存在问题?由于您改变了多个因素,这似乎不是一个公平的测试。@Quentin测试的正确代码是什么?用于方法比较:确实如此结果现在差不多了,我相信这个答案告诉了我下一步的方向和方向。事实上,结果现在差不多了,我相信这个答案告诉了我下一步的方向和方向