This question already has answers here:
Do modern JavaScript JITers need array-length caching in loops?
(3 个回答)
7年前关闭。
我在 Ember.js 中看到了这个片段:
请看一下
http://jsperf.com/predefined-length-vs-inline-defined-length
结果表明,第二个更快。所以他们使用第一个肯定有另一个原因。
任何人有任何想法?非常感谢。
(3 个回答)
7年前关闭。
我在 Ember.js 中看到了这个片段:
for (var i=0, l=deps.length; i<l; i++) {
if (deps[i] === 'exports') {
reified.push(exports = {});
} else {
reified.push(requireModule(resolve(deps[i])));
}
}
请看一下
var i=0, l=deps.length; i<l; i++
, deps
的长度是在循环之前定义的。我想知道为什么他们必须这样做而不是只使用 var i=0; i<deps.length; i++
。我想这可能是一个“性能技巧”,所以我决定对 jsperf 进行测试:http://jsperf.com/predefined-length-vs-inline-defined-length
结果表明,第二个更快。所以他们使用第一个肯定有另一个原因。
任何人有任何想法?非常感谢。
最佳答案
这与其说是一个小的性能优化,不如说是一个好的实践。在非常大的阵列中,它将产生显着的性能改进。这样做的原因是它“缓存”了数组、NodeList 等的长度值,以便在循环的退出条件下,您不必每次都重新访问该属性,因为它存储在变量中.
与任何代码一样,性能提升会有所不同,并且可能会更快或更慢,具体取决于浏览器。
关于javascript - 在循环之前定义数组长度是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24352570/
10-14 17:36