我遇到了这个问题,我一直在努力,发现了一些有趣的行为。基本上,如果我连续多次对相同的代码进行基准测试,代码执行速度会明显加快。
以下是代码:
http://codepen.io/kirkouimet/pen/xOXLPv?editors=0010
以下是Chrome的屏幕截图:
有人知道发生了什么事吗?
我正在检查表现:
var benchmarkStartTimeInMilliseconds = performance.now();
...
var benchmarkEndTimeInMilliseconds = performance.now() - benchmarkStartTimeInMilliseconds;
答案 0 :(得分:2)
Chrome的V8优化编译器最初会编译您的代码而不进行优化。如果代码的某一部分经常执行(例如函数或循环体),V8将用优化的版本替换它(所谓的“堆栈替换”)。
根据https://wingolog.org/archives/2011/06/08/what-does-v8-do-with-that-loop:
V8始终将JavaScript编译为本机代码。 V8第一次看到了 一段代码,它快速编译它,但没有优化它。该 最初的未经优化的代码是完全通用的,处理所有各种 人们可能会看到的案例,还包括一些类型反馈代码, 记录在不同点上看到的类型 过程
在启动时,V8会产生一个分析线程。如果它注意到了 特别是未优化的程序很热,它收集记录的类型 反馈该过程的数据并使用它来编译优化的 该程序的版本。然后替换旧的未优化代码 使用新的优化代码,并继续该过程
其他现代JS引擎也以类似的方式识别这些热点并对其进行优化。