素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

lengthが0の時にすぐreturnするのは速いのかどうか

console.time('a');
for(var i=0;i<10000;i++){
  (function(){
    var a=[];
    a.forEach(function(){console.log(1)})
  })()
}
console.timeEnd('a');

console.time('b');
for(var i=0;i<10000;i++){
  (function(){
    var a=[];
    if(a.length==0)return;
    a.forEach(function(){console.log(1)});
  })()
}
console.timeEnd('b');

結果は
a: 196ms
b: 161ms
と、bのほうが少し速い。

では、NodeListのように、lengthプロパティへのアクセスに比較的コストがかかる場合。

var childs=document.body.childNodes;
console.time('a');
for(var i=0;i<1000;i++){
(function(){
Array.forEach(childs,function(){})
})()
}
console.timeEnd('a');

console.time('b');
for(var i=0;i<1000;i++){
(function(){
if(childs.length==0)return;
Array.forEach(childs,function(){})
})()
}
console.timeEnd('b');

a: 118ms
b: 125ms
aのほうが速い。

ある程度大きい関数はif(hogehoge.length==0)return;したほうが分かりやすいかな。