javascript - 对于 javascript 中的循环速度性能

标签 javascript loops for-loop performance

我经历了 http://www.youtube.com/watch?v=mHtdZgou0qU加快你的 javascript。

所以我做了这个个人速度测试:

    var count = 50000000;
    var testDummy;

    // test 1
    testDummy = 0;
    var test1Start = new Date().getTime();
    var i;
    for (i=0;i<count;i++) {
        testDummy++;
    }
    var test1End = new Date().getTime();
    var test1Total = (test1End-test1Start);

    // test 2
    testDummy = 0;
    var test2Start = new Date().getTime();
    var i
    for (i=count; i--;) {
        testDummy++;
    }
    var test2End = new Date().getTime();
    var test2Total = (test2End-test2Start);


    debug(
      "test1\n" + 
      "total: " + test1Total + "\n" + 
      "test2\n" + 
      "total: " + test2Total 
    );

我没有得到显着的结果,有时它们是偶数,有时则不是。

我的问题是,如果我像这样使用 for 循环:“for(i=count;i--;)” 真的更快吗? 我在测试中做错了什么吗?

感谢您的帮助!

最佳答案

(我会把它写成评论,但太长了。)

第一:担心for 循环的效率几乎总是在浪费(您自己的)时间。与如何指定循环的细节相比,循环内部的内容通常对性能的影响要大得多。

第二:您使用什么浏览器进行测试?不同的浏览器会显示不同的性能配置文件;即使是同一浏览器的不同版本也会有所不同。

第三:JavaScript 引擎优化您的循环并不是不可能的。 JavaScript 编译器可以简单地查看循环并决定将 testDummy 设置为 50000000 并完成它。

第四:如果你真的想在性能上 split 头发,我会尝试 for(i=count; --i != 0;) 以及 for(i=计数;我--;)。前者可以节省一两条机器指令,因为执行减法(在预减步骤中)可能会自动设置一个硬件标志,指示结果为 0。当您使用后减运算符时,该标志可能会被浪费,因为它不会' 被检查直到下一次迭代开始。 (您能够注意到差异的可能性微乎其微。)

关于javascript - 对于 javascript 中的循环速度性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4903146/

相关文章:

javascript - 关闭 Fancybox 弹出窗口后如何保留输入字段中的值?

javascript - document.getElementsByName 不适用于单选按钮中的动态值

r - 将预测结果合并到 R 中的内聚数据框架中

excel - 使用循环的替代方法使代码运行得更快

r - 循环匹配姓名列表并根据姓名的性别填充新变量

javascript - 在node.js中设置Apache环境变量

JavaScript - 测试整数

vba - 在 Excel 中复制时,日期中的月份和日期有时会颠倒

java - 循环添加 BigInteger java

c - 跳出这个 while 循环