我注意到,当增加一个计数器时,当计数器的值较大时,它的速度要慢得多。我在Chrome,Firefox和IE11中进行了尝试,但它们在大量情况下均显示出较差的性能。
请参阅jsperf测试here(下面的代码):
var count1 = 0;
var count2 = new Date().getTime();
var count3 = 1e5;
var count4 = 1e9;
var count5 = 1e12;
var count6 = 1e15;
function getNum1() {
return ++count1;
}
function getNum2() {
return ++count2;
}
function getNum3() {
return ++count3;
}
function getNum4() {
return ++count4;
}
function getNum5() {
return ++count5;
}
function getNum6() {
return ++count6;
}
为什么会发生?
最佳答案
现代JavaScript运行时和编译器执行称为SMI(小整数)的优化。
JavaScript中的所有数字都是 double 浮点,因此执行计算相对较慢。但是,实际上,在很多情况下(例如大多数for
循环),我们正在使用整数。
因此-在可能的情况下优化数字以执行有效的计算非常有用。当引擎可以证明数字是一个小整数时,它将很乐意将其视为整数,并像该数字是整数一样执行所有计算。
递增32位整数是单处理器操作,并且非常便宜。这样您可以获得更好的性能。
关于javascript - 为什么大量的递增运算符(++)的性能较差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33329671/