【发布时间】:2015-10-28 17:41:24
【问题描述】:
我在某处读到访问 window.location.href 比 location.href 花费更多时间。为什么会这样?当我们说 "window.location.href" 时,JS 引擎在全局对象 "window" 中搜索 "location" 成员,对于 "location.href" 也应如此,这里 JS 引擎也会在 window 中搜索 location 成员对象本身。 当寻找两个表达式的成员时,为什么它们之间存在时间差异。要查看差异,我在浏览器控制台中运行了以下代码:
function performance(){
var a;
console.time('way1');
for(var loop = 0; loop < 100000; loop++){
a = window.location.href;
}
console.timeEnd('way1');
console.time('way2');
for(var loop = 0; loop < 100000; loop++){
a = location.href;
}
console.timeEnd('way2');
}
performance();
在 chrome 中,way1 循环大约需要 51 毫秒,而 way2 大约需要 35 毫秒。会有什么不同?
【问题讨论】:
-
一个周期不能进行很好的性能测试
-
我见过各种基准测试表明在循环内声明变量会影响性能。由于在同一变量上重复
var被忽略,您在第一个循环中执行此操作,但在第二个循环中没有执行此操作。我建议将loop的声明移到顶部,以便循环完全等效,只需将值初始化为 0。这些基准测试表明,每个引擎的处理方式都不同,因此它是否重要或多少取决于您在哪个浏览器中测试。
标签: javascript