ben*_*ben 7 javascript performance
var test = function () {
var i,
a,
startTime;
startTime = new Date().getTime();
for (i = 0; i < 3000000000; i = i + 1) {
a = i % 5;
}
console.log(a); //prevent dead code eliminiation
return new Date().getTime() - startTime;
};
var results = [];
for (var i = 0; i < 5; i = i + 1) {
results.push(test());
}
for (var i = 0; i < results.length; i = i + 1) {
console.log('Time needed: ' + results[i] + 'ms');
}
Run Code Online (Sandbox Code Playgroud)
结果是:
首次执行:
Time needed: 13654ms
Time needed: 32192ms
Time needed: 33167ms
Time needed: 33587ms
Time needed: 33630ms
Run Code Online (Sandbox Code Playgroud)
第二次执行:
Time needed: 14004ms
Time needed: 32965ms
Time needed: 33705ms
Time needed: 33923ms
Time needed: 33727ms
Run Code Online (Sandbox Code Playgroud)
第三次执行:
Time needed: 13124ms
Time needed: 30706ms
Time needed: 31555ms
Time needed: 32275ms
Time needed: 32752ms
Run Code Online (Sandbox Code Playgroud)
从第一排跳到第二排的原因是什么?
我的设置:
Ubuntu 13.10
谷歌浏览器36.0.1985.125(Mozilla Firefox 30.0提供相同类型的结果)
编辑:
我修改了代码,在语义上保持相同但内联所有内容.有趣的是,它不仅显着加快了执行速度,而且还在很大程度上消除了我上面描述的现象.尽管如此,轻微的跳跃仍然是显而易见的.
修改后的代码
结果:
首次执行:
Time needed: 13786ms
Time needed: 14402ms
Time needed: 14261ms
Time needed: 14355ms
Time needed: 14444ms
Run Code Online (Sandbox Code Playgroud)
第二次执行:
Time needed: 13778ms
Time needed: 14293ms
Time needed: 14236ms
Time needed: 14459ms
Time needed: 14728ms
Run Code Online (Sandbox Code Playgroud)
第三次执行:
Time needed: 13639ms
Time needed: 14375ms
Time needed: 13824ms
Time needed: 14125ms
Time needed: 14081ms
Run Code Online (Sandbox Code Playgroud)
看来 Google Chrome 正在将您的脚本执行分解为多个块,并为其他进程提供处理时间。直到每次函数调用的执行时间达到 600 毫秒左右时,它才会被注意到。我使用较小的数据子集进行了测试(如果我没记错的话,为 300000000。)
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |