【问题标题】:n = n +1 is faster than n++ or ++n, why?n = n +1 比 n++ 或 ++n 快,为什么?
【发布时间】:2013-01-12 08:44:36
【问题描述】:

检查这个测试用例:http://jsperf.com/n-n-1-or-n

n = n + 1;

n++;

++n;

任何关于为什么第一次编写在许多浏览器上的速度如此之快的线索?

【问题讨论】:

  • 除非您的代码实际上每秒执行 50,000,000 次此类操作,否则您就是在浪费时间担心这个问题。
  • 你不会在几次迭代中看到太大的差异
  • @Downvoters 出于兴趣,我实际上很想知道这背后的原因,因为 jsPerf 似乎完好无损。
  • @Andrew - 这不是 OP 所要求的。问题是是否避免--++
  • 安德鲁是对的,我在正文中的问题与标题中的问题不同。我已经编辑了正文以澄清。

标签: javascript performance increment


【解决方案1】:

性能会因浏览器和计算机而异。

我发现我的设置中的n = n + 1 快了大约 4 倍。

同时,最慢的是每秒超过 62 百万次操作。

您在这里进行了微优化。一个比另一个的使用几乎没有会成为一个瓶颈。


为什么它在一些浏览器中更快?我不知道。您需要深入研究不同 JavaScript 引擎的源代码才能找到答案。

由于一些流行的微基准是如何编写的,因此很有可能对这种情况进行优化。

【讨论】:

  • 你不好奇为什么它快 4 倍吗?
  • @Andrew - 我不知道。 JS 引擎要么专门针对它进行优化,但也很有可能他们首先将 ++-- 运算符转换为第一种形式,从而减慢一切。
  • @Andrew - 不,不是特别。 JS 引擎会因不同的原因而更改并由其创建者进行优化。如果这是针对某些流行的微基准进行优化的结果,我不会感到惊讶。
  • 这是我的问题的真正目标。了解为什么它快 4 倍。我知道在现实世界中,这并没有真正明显的影响。
  • 我做到了:“n = n +1 比 n++ 或 ++n 快,为什么?
【解决方案2】:

检查此测试。或者here 是另一个测试。

【讨论】:

  • 所以,首先,我们可以得出结论,运送水果上有咬痕的公司是最慢的(只是想指出这一点,因为我真的不喜欢它们,呵呵)。其次,这才是真正的重点,一些运行速度较慢的表达式似乎有一些一致性。虽然这几乎不是瓶颈的原因,但这种差异引出了一个问题——还有哪些意想不到的差异。我不知道有什么不同。现在,我很好奇,想知道更多。为图片 +1。
  • 实际上,由于单位是每秒操作数,Safari 是测试浏览器中最快的,而不是最慢的。
  • @JamesMcLeod 该死...你的观点是绝对正确的。我错过了那部分,必须纠正。我想知道为什么 IE 不包含在图表中……它要么真的很高,要么真的很低。 :)
猜你喜欢
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 2013-09-09
  • 2021-12-20
  • 1970-01-01
相关资源
最近更新 更多