繁体   English   中英

为什么传递变量(作为ref)比访问闭包中定义的相同变量要慢?

[英]Why is passing in a variable (as a ref) slower than accessing the same variable defined in a closure?

鉴于:

(function() {
    var items = [1, 2, 3, 4];

    // In Chrome, this takes ~8-10 ms to execute.
    for(var i = 0; i < items.length; i++) {
        x(items);
    }

    // In Chrome, this takes 1-2 ms to execute.
    for(var i = 0; i < items.length; i++) {
        y();
    }

   function x(y) {
        y[0] = -100;
    }

    function y() {
        items[0] = 100;
    }
})();

为什么对x()的调用比对y()的调用慢8-10倍? 是否因为在执行y()时不需要进行变量解析?

除了第一次迭代或第二次迭代,我没有看到时间上的差异,这表明没有什么大的差异,只是在启动过程中添加了一些东西。 V8并没有立即优化AFAIK,因此可以解释为什么需要几次迭代才能达到平衡。 还缓存未命中。

 function log() { var div = document.createElement("div"); div.textContent = Array.prototype.join.call(arguments, " "); document.body.appendChild(div); }; (function() { var items = new Array(10000000); for (j = 0; j < 20; ++j) { var xStart = performance.now(); for(var i = 0; i < items.length; i++) { x(items); } var xDuration = performance.now() - xStart; var yStart = performance.now(); for(var i = 0; i < items.length; i++) { y(); } var yDuration = performance.now() - yStart; log(j, "x:", xDuration.toFixed(3) + "ms", "y:", yDuration.toFixed(3) + "ms", "diff:", (xDuration - yDuration).toFixed(3) + "ms"); } function x(y) { y[0] = -100; } function y() { items[0] = 100; } })(); 
 body { font-family: monospace; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM