NodeJS-为什么包裹在函数中比没有包裹时for循环更快?

时间:2019-02-23 17:39:02

标签: javascript node.js performance

我对具有1000万次迭代的循环进行了性能测试。一个包裹在一个函数中,另一个包裹在一个函数中。这是代码:

console.time('forLoop')
for (let i = 0; i < 10000000; i++);
console.timeEnd('forLoop')

function forLoop() {
    for (let i = 0; i < 10000000; i++);
}

console.time('forLoopFunc')
forLoop()
console.timeEnd('forLoopFunc')

我跑了5次,结果如下:

forLoop: 7.750ms
forLoopFunc: 5.551ms

forLoop: 7.311ms
forLoopFunc: 5.410ms

forLoop: 7.221ms
forLoopFunc: 5.987ms

forLoop: 7.380ms
forLoopFunc: 5.018ms

forLoop: 7.516ms
forLoopFunc: 5.342ms

为什么将其包装在函数中会减少约2ms的执行时间(速度提高约25%)?

1 个答案:

答案 0 :(得分:1)

如果您尝试先运行该函数,则会发现该函数内部的循环现在需要更多时间。

这与编译javascript的V8引擎如何工作,而不仅仅是代码有关。

在幕后做了很多优化,以加快javascript代码的速度。 其中之一是优化编译器。

  • 由于JS编译器是“ JUST IN TIME”编译器,因此它会编译第一段代码,然后移至第二段代码。
  • 优化编译器从以前的结果中找到类似的变量声明等。如果发现类似信息,它将使用它进行其他编译。

此图像可以帮助您了解重新编译器的工作方式: enter image description here

来自视频的图片:https://www.youtube.com/watch?v=p-iiEDtpy6I&t