如果重复多次,JavaScript是否缓存/优化代码
Does JavaScript cache/optimize code if repeated multiple times?
我目前正在编写一个小框架来测试JavaScript函数的速度。当我用相同的参数重复调用相同的方法时,它会给出奇怪的结果:
Function Execution Time
isEvenBitwise 38.00000000046566
isEvenModulo 38.00000000046566
isEvenPointless 38.00000000046566
下面是我的函数:
var myFunctions =
{
isEvenBitwise: function(number)
{
return !(number & 1);
},
isEvenModulo: function(number)
{
return (number % 2 == 0);
},
isEvenPointless: function(number)
{
return 1;
}
}
运行函数的代码:
PerformanceTest.prototype.measureTime = function()
{
for (var indexTests = 0; indexTests < this.testCount; indexTests++)
{
var results = [];
for (var currentFunction in this.functions) {
var contextFunction = this.functions[currentFunction];
var startTime = performance.now();
for (var i = 0; i < this.iterationsPerTest; i++)
{
var heh = contextFunction.apply(this, arguments)
}
var executionTime = performance.now() - startTime;
var result = {};
result.testName = currentFunction;
result.executionTime = executionTime;
results.push(result);
}
this.testResults.push(results);
}
}
JavaScript解释器缓存/优化我的代码?如果有,它是如何工作的?还是发生了什么我不知道的事?
编辑:这似乎只发生在chrome中,firefox工作得很好,这些结果:
Function Execution Time
isEvenBitwise 9.652258097220447
isEvenModulo 37.546061799704376
isEvenPointless 8.512472488871936
看完你的代码后,我要猜一下Chrome是聪明的关于你在做什么。它看到的是:
var startTime = performance.now();
for (var i = 0; i < this.iterationsPerTest; i++)
{
var heh = contextFunction.apply(this, arguments)
}
var executionTime = performance.now() - startTime;
它正确地评估了contextFunction没有副作用,认识到heh
变量仅存在于循环范围内,并且从未使用过,然后优化整个循环,因为它不做任何事情。
相关文章:
- 浏览器是否持久缓存脚本元素的编译版本
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- jqGrid 或 jQuery 是否具有在字符串中缓存 DOM 更改的功能?
- 在 html 文件中包含无缓存元标记是否也会阻止缓存该 html 文件中链接的 js 和 css 文件
- 是否可以在不将其添加到DOM的情况下预加载和缓存视频文件
- Android上的初始pageYOffset值(是否缓存?)
- Mobile Safari是否清理DOM应用程序缓存?何时清理
- Angular 模板缓存是否在应用程序之间共享?是不是坚持不懈
- 是否可以缓存具有指向动态JavaScript的链接的HTML页面
- 检查对象是否适合浏览器缓存
- 我怎么知道$http响应是否来自缓存 - Angular
- 杰奎里 .Load(),它是否缓存文档
- 浏览器缓存是否知道javascript xmlhttp请求
- 浏览器是否缓存下载的javascript
- 服务工作线程是否可以缓存 POST 请求
- 将根节点传递给 d3 树状图布局时,是否会缓存该布局
- 服务辅助角色缓存是否支持缓存控制标头
- 确定Redux中单个项目的本地缓存是否过期
- 有没有办法检测浏览器缓存是否被清除?
- 频繁访问对象的属性时缓存是否良好'的属性