我测试循环并同时对javascript和有这样的情况:而X在JavaScript的
function loopWithWhileOneBillion() {
var max = 1000000000; //1kkk
var date1 = new Date();
var inc = 0;
while (max--) {
inc++;
}
var date2 = new Date();
return date2.getTime() - date1.getTime();
}
function loopWithForOneBillion() {
var max = 1000000000; //1kkk
var date1 = new Date();
var inc = 0;
for (var i = 0; i < max; i++) {
inc++;
}
var date2 = new Date();
return date2.getTime() - date1.getTime();
}
/* *************************************** */
/* loop with 10kkk interactions */
function loopWithWhileTenBillion() {
var max = 10000000000; //10kkk
var date1 = new Date();
var inc = 0;
while (max--) {
inc++;
}
var date2 = new Date();
return date2.getTime() - date1.getTime();
}
function loopWithForTenBillion() {
var max = 10000000000; //10kkk
var date1 = new Date();
var inc = 0;
for (var i = 0; i < max; i++) {
inc++;
}
var date2 = new Date();
return date2.getTime() - date1.getTime();
}
我的代码是用于测试和一个十亿十十亿互动while循环。我想尽可能最优化的一段时间,那么一段时间会比所有情况下更好,但它并不像我想象的那样被捕获。有一个更好的循环到一个特定的条件?这些循环是否有浏览器优化?在前端情况下,我想象不应该像我在这个例子中那样进行所有的交互,但是在具有节点的应用程序中可能有。有没有在V8循环优化?
http://jsfiddle.net/alexfqc/vfmgc73n/
http://jsperf.com/loops – Andy 2015-02-23 13:35:39
在大多数情况下,不同循环之间的性能差异不明显。无论如何,现代编译器和引擎的编写方式是,他们将根据真实代码的经验优化代码,因此大多数时间这种_specialized_测试都会导致无意义的结果,因为它们不能反映任何实际的使用场景。 – 2015-02-23 13:39:54
你的'for'和'while'循环并不等价:你的'for'循环增加两个变量并比较两个变量;你的'while'循环递减一个变量并递增另一个变量,并将变量与*常数*进行比较。所以起点:让循环等同。然后你会发现它们的性能是相同的(除了测量误差)。 – 2015-02-23 13:40:30