这两种for循环使用方法之间是否有显著的性能差异?
is there any significant performance difference between this 2 methods of for-loop usage?
只是想知道以下两种方法的区别是什么?
var a = 0;
var b = 0;
var c = 0;
for(var i = 0; i < 6; i++ ){
a+=i;
b+=i;
c+=i;
}
和
var a = 0;
var b = 0;
var c = 0;
for(var i = 0; i < 6; i++ ){
a+=i;
}
for(var i = 0; i < 6; i++ ){
b+=i;
}
for(var i = 0; i < 6; i++ ){
c+=i;
}
*编辑感谢locrizak更正
第二个程序的迭代次数是它需要的3倍。在第二个循环中有18次迭代,而第一个循环只有6次,这使得脚本运行得更快。(在这种情况下,您不会注意到差异,因为您在循环中没有做太多事情,但一旦您想做更多事情,这将是一个性能问题)
p。A +i没有做任何你可能想做的事情A +=i
当您对JavaScript性能有疑问时,请有一个客观的意见:
http://jsperf.com/testing-snippets好吧,你做了3倍的工作。
从宏观的角度来看,你所做的18次迭代不会有太大的影响,但相比之下,它要糟糕得多。
在不了解javascript解释器的任何细节的情况下,假设第二个代码块比第一个代码块稍微差一些,但如果它使代码更难阅读,则肯定不值得重构。这样想:
for(var i = 0; i < 6; i += 1) {
doSomeExpensiveThing(); // takes 500ms to process
doSomeExpensiveThing();
doSomeExpensiveThing();
}
:
for(var i = 0; i < 6; i += 1) {
doSomeExpensiveThing(); // takes 500ms to process
}
for(var i = 0; i < 6; i += 1) {
doSomeExpensiveThing();
}
for(var i = 0; i < 6; i += 1) {
doSomeExpensiveThing();
}
这两者实际上是相同的,因为与执行内部计算的成本相比,运行循环的开销将消失。
我不同意locrizak的观点。第二个循环绝对不会做3倍的工作,因为每个循环的语句是第一个例子的三分之一。第二个示例的额外工作是,它需要运行循环迭代步骤的次数是第一个示例的2倍。
- 初始化i(仅一次)
- 增量i(每次迭代)
- 检查i <6;(每次迭代)
因此,在任何循环有更多语句并且循环开销越来越小的实际示例中,您不太可能注意到差异。这意味着你应该使用多个循环,如果它使代码更具可读性。
我创建了这个更真实的例子来证明我的观点:对于大多数意图和目的,这两个循环是相同的:http://jsperf.com/testing-snippets/3
唯一的区别是变量i
上的赋值,加法和比较的数量-除非你为20世纪70年代的嵌入式计算机编程(你不是,因为这是JavaScript),速度差异实际上是零;不要浪费时间去尝试纳米优化它(例如,计算机的速度使这不是问题,现代JS解释器无论如何都可以编译它,所以差异完全消失了)。
如果你在这些循环中做任何有意义的事情,那个将是你的瓶颈,而不是循环本身。
唯一重要的区别是维护-所以使用哪种形式对下一个继承它的人来说更容易理解。
将其粘贴到firebug控制台并计时。让它与大循环一起工作,您可以更容易地看到差异。
console.time("group");
for(var x = 0; x<1000; x++){
var a = 0;
var b = 0;
var c = 0;
for(var i = 0; i < 6; i++ ){
a+i;
b+i;
c+i;
}
}
console.timeEnd("group");
console.time("sep");
for(var x = 0; x<1000; x++){
var a = 0;
var b = 0;
var c = 0;
for(var i = 0; i < 6; i++ ){
a+i;
}
for(var i = 0; i < 6; i++ ){
b+i;
}
for(var i = 0; i < 6; i++ ){
c+i;
}
}
console.timeEnd("sep");
我得到
group: 8ms
sep: 13ms
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Is onfling available for html, html5
- Setting default onclick behavior for <img> tag in gene
- 使用正则表达式评估电子邮件地址时出现性能问题
- 我的javascript for循环不起作用
- React:按键的性能提升
- For循环冻结Javascript
- 在Three.js中导出网格会提高性能吗
- 如何在for循环中添加事件侦听器
- 在javascript中搜索项目列表的性能
- Javascript中嵌套for循环与数组函数的性能
- for循环与forEach在javascript中的性能以及jsperf结果的可信度
- 有什么方法可以提高JS中for循环的性能吗
- 在for循环中设置超时用于性能测试
- 改进js ' for '循环的性能
- JavaScript for循环性能-在函数中更好
- 这两种for循环使用方法之间是否有显著的性能差异?