Why does JavaScript code execute faster over time?(为什么随着时间的推移,JavaScript代码的执行速度会更快?)
问题描述
我一直在解决这个问题,发现了一些有趣的行为。基本上,如果我连续多次对相同的代码进行基准测试,代码的执行速度会显著加快。
代码如下:
http://codepen.io/kirkouimet/pen/xOXLPv?editors=0010
以下是Chrome的截图:
有人知道发生了什么事吗?
我正在检查性能:
var benchmarkStartTimeInMilliseconds = performance.now();
...
var benchmarkEndTimeInMilliseconds = performance.now() - benchmarkStartTimeInMilliseconds;
推荐答案
Chrome V8优化编译器最初编译代码时不进行优化。如果您的代码的某个部分经常被执行(例如函数或循环体),V8会用优化的版本(即所谓的堆栈上替换)替换它。
根据https://wingolog.org/archives/2011/06/08/what-does-v8-do-with-that-loop:
V8始终将JavaScript编译为本机代码。V8第一次看到 一段代码,它快速地编译它,但不优化它。这个 初始的未优化代码是完全通用的,可以处理所有不同的 人们可能会看到的案例,还包括一些类型反馈代码, 记录在中的各个点上看到的类型 程序。
启动时,V8派生一个分析线程。如果它注意到一个 特定的未优化程序很热,它收集记录的类型 该过程的反馈数据,并使用它来编译优化的 程序的版本。然后替换未优化的旧代码 使用新的优化代码,该过程将继续
其他现代JS引擎也以类似的方式识别并优化这些热点。
这篇关于为什么随着时间的推移,JavaScript代码的执行速度会更快?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么随着时间的推移,JavaScript代码的执行速度会更快?


- 失败的 Canvas 360 jquery 插件 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06