为什么JavaScript代码会随着时间推移执行得更快

时间:2016-07-09 23:15:01

标签: javascript performance browser v8

我遇到了这个问题,我一直在努力,发现了一些有趣的行为。基本上,如果我连续多次对相同的代码进行基准测试,代码执行速度会明显加快。

以下是代码:

http://codepen.io/kirkouimet/pen/xOXLPv?editors=0010

以下是Chrome的屏幕截图:

enter image description here

有人知道发生了什么事吗?

我正在检查表现:

var benchmarkStartTimeInMilliseconds = performance.now();
...
var benchmarkEndTimeInMilliseconds = performance.now() - benchmarkStartTimeInMilliseconds;

1 个答案:

答案 0 :(得分:2)

Chrome的V8优化编译器最初会编译您的代码而不进行优化。如果代码的某一部分经常执行(例如函数或循环体),V8将用优化的版本替换它(所谓的“堆栈替换”)。

根据https://wingolog.org/archives/2011/06/08/what-does-v8-do-with-that-loop

  

V8始终将JavaScript编译为本机代码。 V8第一次看到了   一段代码,它快速编译它,但没有优化它。该   最初的未经优化的代码是完全通用的,处理所有各种   人们可能会看到的案例,还包括一些类型反馈代码,   记录在不同点上看到的类型   过程

     

在启动时,V8会产生一个分析线程。如果它注意到了   特别是未优化的程序很热,它收集记录的类型   反馈该过程的数据并使用它来编译优化的   该程序的版本。然后替换旧的未优化代码   使用新的优化代码,并继续该过程

其他现代JS引擎也以类似的方式识别这些热点并对其进行优化。

相关问题