gsa*_*ras 6 javascript optimization
我有这样的情况:
for(var i = 0; i < a + b; ++i)
// code that doesn't affect a and b
Run Code Online (Sandbox Code Playgroud)
我是否应该担心每次迭代都会进行添加?或者JavaScript(它的解析器?)足够聪明,可以理解它a + b是不变的吗?
换句话说,我应该这样做:
var end = a + b;
for(var i = 0; i < end; ++i)
// code
Run Code Online (Sandbox Code Playgroud)
或者这会浪费一行代码?
好吧,实际上我担心的不是那一行代码,而是每当我在JavaScript中面对这样的情况时我都会考虑这个问题!此外,今天它是一个补充,明天它可能是其他东西,如它的平方根,所以我认为这很重要!
每次将评估条件。
来自:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/
for ([initialization]; [condition]; [final-expression])
statement
Run Code Online (Sandbox Code Playgroud)
条件:在每次循环迭代之前要求值的表达式。如果此表达式的值为true,则执行语句。此条件测试是可选的。如果省略,则条件始终为true。如果该表达式的计算结果为false,则执行将跳至for构造之后的第一个表达式。
(斜体是我的)
有可能会或可能不会是在条件的子表达式的优化,根据发动机:当你有一个类似的疑问,你可以做最快的是要建立一个测试和测量性能。
根据这个测试例如,,两个版本在最新的Chrome和Firefox上使用的时间相同。
但是,关于这种优化的经验法则是:不要过早地优化。从Wikipedia上的程序优化:
“ 我们应该忘记效率低下的问题,大约有97%的时间是这样:过早的优化是万恶之源。但是,我们不应该在这3%的临界水平上放弃机会 ”
唐纳德·努斯(1974年12月)。“转到语句的结构化编程”。ACM Journal Computing Surveys 6(4):268。CiteSeerX:10.1.1.103.6084。
编写功能正确的代码,而不必担心如此小的或令人怀疑的性能问题。执行时,如果发现性能问题,请进行挖掘和优化。
TL; 博士
您不必为此担心,对性能的影响可能很小,而且现代javascript引擎似乎仍然可以对此进行优化。
但是,如果您仍然担心,编写代码行对我来说似乎不是什么大浪费。那么,为什么不只是这样做,而停止思考呢?
最好像这样定义常量:
for(var i = 0, end = a + b; i < end; ++i)
Run Code Online (Sandbox Code Playgroud)
优化方式
你可以这样写你的循环:
for(var i = a + b; i--;)
Run Code Online (Sandbox Code Playgroud)
这对我来说是更优化的,但是i下降而不是上升
更多示例
一个简单的例子就可以理解。如果您像这样创建循环:
for(var i = 0; i < array.length; ++i) {
array.push('value'); // infinite loop
}
Run Code Online (Sandbox Code Playgroud)
array.length在每次迭代时都会进行评估,您可以使用 来创建无限循环array.push()。
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |