我经历了 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/