相关疑难解决方法(0)

JavaScript循环性能 - 为什么将迭代器减少到比递增更快的速度

在他的书" 更快的网站"中, Steve Sounders写道,提高循环性能的一种简单方法是将迭代器递减到0而不是递增到总长度(实际上这一章是由Nicholas C. Zakas编写的).根据每次迭代的复杂性,此更改可以比原始执行时间节省高达50%的成本.例如:

var values = [1,2,3,4,5];
var length = values.length;

for (var i=length; i--;) {
   process(values[i]);
}
Run Code Online (Sandbox Code Playgroud)

这对于for循环,do-while循环和while循环几乎相同.

我想知道,这是什么原因?为什么要这么快地递减迭代器呢?(我对此技术背景感兴趣,而不是在证明此声明的基准测试中感兴趣.)


编辑:乍一看这里使用的循环语法看起来不对.没有length-1或者i>=0,让我们澄清(我很困惑太).

这是循环语法的一般:

for ([initial-expression]; [condition]; [final-expression])
   statement
Run Code Online (Sandbox Code Playgroud)
  • 初始表达 -var i=length

    首先评估此变量声明.

  • 条件 -i--

    在每次循环迭代之前计算此表达式.它将在第一次通过循环之前递减变量.如果此表达式求值为false循环结束.在JavaScript中是0 == false这样的,如果i最终等于0它被解释为false并且循环结束.

  • 最终表达

    在每次循环迭代结束时(在下一次条件评估之前)评估该表达式.这里不需要它是空的.所有三个表达式在for循环中都是可选的.

for循环语法不是问题的一部分,但因为它有点不常见,我认为澄清它是有趣的.也许有一个原因是它更快,因为它使用较少的表达式(0 == false"技巧").

javascript performance loops

61
推荐指数
5
解决办法
3万
查看次数

Javascript性能:虽然vs For循环

在技​​术采访中的另一天,问题之一是"你如何优化Javascript代码"?

令我惊讶的是,他告诉我,虽然循环通常比循环更快.

这是真的吗?如果是,那为什么呢?

javascript optimization

28
推荐指数
2
解决办法
2万
查看次数

标签 统计

javascript ×2

loops ×1

optimization ×1

performance ×1