【发布时间】:2018-06-14 08:17:31
【问题描述】:
我正在做一个tutorial on JavaScript。以下是关于性能的部分:
循环中的每个语句,包括 for 语句,都会在循环的每次迭代中执行。 可以放在循环之外的语句或赋值将 使循环运行得更快。
这是一个错误代码的例子:
var i;
for (i = 0; i < arr.length; i++) {
这是一个好的代码示例:
var i;
var l = arr.length;
for (i = 0; i < l; i++) {
我记得这不是我认为比 JavaScript 更注重性能的语言的最佳实践。事实上,bad code 的例子似乎更受欢迎。
这种最佳实践是 JavaScript 特有的,还是其他语言也是如此?
【问题讨论】:
-
对于更长的数组,最好缓存长度。我个人更喜欢将变量放在一起,并且由于歧义而从不使用 l 作为变量名称:
for (var i=0, n=arr.length; i<n; i++) {- 如果迭代改变了数组的长度,那么你不需要缓存长度 -
无论语言如何,它都应该是可取的——你不想在每次迭代时检查数组的
length(除非你期望它改变),最好把将数组的长度放入一个变量中,然后检查该变量。也就是说,您应该考虑一个比 W3schools 更好的教程网站,W3schools 是出了名的不可靠 -
说实话,这取决于语言。甚至对于 JavaScript 的每个实现来说都不是真的。如果数组的长度参数在访问时是静态的(而不是在访问时计算),则创建新变量只会使用更多内存。如果参数在每个请求上都重新计算,那么您将节省计算时间。
-
更好的参考是MDN
-
您对“最佳”的标准是什么?所谓的“最佳实践”只能根据“最佳”的一些标准来确定,例如鲁棒性、可靠性、可维护性等。除非特别关注性能,否则性能应该在列表中。
标签: javascript performance loops