Javascript +;=,之间的性能差异+++;

Javascript +;=,之间的性能差异+++;,javascript,Javascript,我创建了这个测试,为什么这三个表达式之间有这么大的差异。我试过几次运行所有三个测试,每次重新加载页面时,我尝试的第一个测试是迄今为止最快的 所以我猜考试太短会有一些问题,也就是说,运行测试的代码占用了大部分时间。如果这不是一个反问句,你真的想要回答:因为人们是如何在浏览器中编写JS引擎的。这是因为程序在幕后做了什么: l_计数+=1这会将数字1添加到变量中 l_count=l_count+1这将调用变量l_count,读取它,将1添加到结果中,并将其传递回l_count l_count++这将在

我创建了这个测试,为什么这三个表达式之间有这么大的差异。

我试过几次运行所有三个测试,每次重新加载页面时,我尝试的第一个测试是迄今为止最快的


所以我猜考试太短会有一些问题,也就是说,运行测试的代码占用了大部分时间。

如果这不是一个反问句,你真的想要回答:因为人们是如何在浏览器中编写JS引擎的。

这是因为程序在幕后做了什么:

l_计数+=1这会将数字1添加到变量中

l_count=l_count+1这将调用变量l_count,读取它,将1添加到结果中,并将其传递回l_count


l_count++这将在行运行后向变量添加1。因此,行结束时,该值存储在另一个临时变量中,然后返回该值,加上1并保存回原始值。

,因为您的测试是错误的。您正在重用同一个变量,因此变量越大,增量越慢。看看这个:


这就是jsperf的工作原理-在所有测试之前,准备代码只运行一次。

请将您的代码和结果发布在此处,而不是期望人们去其他站点执行您的代码。为什么不应该有区别?运算符越多,可以用更少的代码行完成的事情就越多。只需了解差异并充分利用它们来创建漂亮的代码;)我刚刚学习了增量表达式,想通过jsperf.com运行一些测试。我对结果感到非常惊讶,并想知道为什么它们之间的差异如此之大。++var比var++快!:)您正在像这样快速地将结果添加到页面中。几乎感觉像是在寻找测试和访问者……我同意,我添加了一个修订版/3,它改变了测试的顺序,第一个测试又“赢了”……这不是测试太短的问题,而是一个被重用的变量。我的回答解释了一点:这完全是有道理的,但是,++x也应该更快。事实并非如此:这只是一个小小的差异,可能是由于内存分配和线程时间片。只需更改最后两个之间的顺序即可。将++l_计数放在l_计数++。。。。你几乎看不出有什么不同。毕竟这只是一个操作码的差异。事实上,它保存了一个临时变量来保存结果,这才是真正的区别所在。无论如何,链接与问题并不真正相关。我将删除它。好的,在其他地方找到了它(请参阅中的注释)-如果您处理的是小整数,则后增量和预增量在性能上没有区别,因为编译器足够聪明,可以自行进行优化,并在可能的情况下将后增量转换为预增量,在我的测试中,第一个代码样本不再是最快的,因为每个样本都使用自己的变量来递增。我已经在fx4和Chrome10中对它进行了测试。因为在最初的测试中,在第一次测试之后,第二次测试使用了l_count的值,此时不再是0。“通配符”版本使用不同的变量,因此所有测试都从0开始。在这种情况下,没有太大的区别了+谢谢你的通配符。我没有意识到准备代码只有一次,但结果仍然很有趣。啊哈!好的,我刚看了其他版本。Have+1:)@通配符-没有理由认为该值会影响操作速度。为了测试这一点,我将您的设置修改为…速度不变。一定与变量访问有关?这让我感到困惑。:-)