【问题标题】:Javascript function faster than the plain operationJavascript函数比普通操作更快
【发布时间】:2017-06-24 01:40:27
【问题描述】:

我在这里比较了纯 JavaScript 中的加法运算和做同样事情的函数。将此操作封装在 JavaScript 函数中的实例比普通操作执行得更快。在这个比较中我做错了什么?

https://jsperf.com/in-function-operators#comment-form

【问题讨论】:

  • 这是进行基准测试和理解一般编译器的错误方法。在了解这些结果之前,您需要了解如何编写适当的基准测试。
  • 在函数中添加至少 600 个字符的评论并再次测试 - 你不会相信接下来会发生什么!
  • 它也不是一个编译器,因为不同的浏览器有不同的结果。只是觉得很好奇。我想知道我是否可以在 js 中使用函数而不会造成巨大的性能损失。我看到我做错了什么,使用常量 chrome 注意到了它并以某种方式优化了函数。我添加了随机数,它们的性能几乎相同。 (在 chrome 中)

标签: javascript performance function addition


【解决方案1】:

当我运行微基准测试时,它们的性能都相差 1%/2%,因此实际上对于所有意图和目的而言,它们的性能都是相同的(即此处的误差幅度)。

为什么它们的性能大致相同的答案是 JavaScript JIT 已决定该函数应为 inlined,从而使其性能类似于普通操作。在某些情况下,JIT 甚至可以识别出您将两个常量加在一起,只需将代码直接替换为 assignment operation instead(其中有一条说明 Uglify 将如何将 1+2*3 替换为 7,即 JIT如果编译器可以识别它,它将执行相同的操作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多