お寿司か焼き肉食べたい

まじめな事からしょーもない事まで
めにゅーを開く(投げやり)

eachはすぐにいじめられるんだよ

javascript高速化!!とかJQuery高速化!!とか調べるとすぐに出てくるのが
【eachを使わずにforを使え】
【eachとforとwhileとかの速度を比較してみました!】
とか出てきますね。んで、eachを使わずにforを使えは分かるんですけど
何が何でもeachを使わないようにするためにはどうしたらええんだ?
ってのが無かった(探しもしていない)ので、色々考えてみようかと思います。

ちなみにforでも、デクリメントの方が速いよって話もありますが、今回は意識せずインクリメントするforでやってきますね。

対象になるもの

まずは、どんなものが対象になるのかを考えてみました

  1. 配列
  2. データオブジェクト
  3. DOM

まぁ、この3つでしょうと。
では順番にeachらforに切り替えてみましょう。

配列

難易度が一番低いってか、配列は流石にeachしてる人いねぇだろと思ったりしますが・・・

//------------------------
// 配列
//------------------------
var hoge = ['あ','い','う','え','お'];

alert(hoge[0]);// あ
alert(hoge[1]);// い
alert(hoge[2]);// う
alert(hoge[3]);// え
alert(hoge[4]);// お

//------------------------
// eachで上記を書くと
//------------------------
$.each(hoge,function(key,value){
  alert(key+'番目は'+value);
});

//------------------------
// forで上記を書くと
//------------------------
var leng = hoge.length;
for(var i=0;i<leng;i++){
  alert(i+'番目は'+hoge[i]);
}

データオブジェクト

うん。

//------------------------
// データオブジェクト
//------------------------
var hoge = {'key1':'小林製薬の糸ようじ','key2':'腹をわって話そう','key3':'お前帰って寝ろ','key4':'藤村がバカだ'};

alert(hoge['key1']);// あ
alert(hoge['key2']);// い
alert(hoge['key3']);// う
alert(hoge['key4']);// え

//------------------------
// eachで上記を書くと
//------------------------
$.each(hoge,function(key,value){
  alert(key+'の中身は'+value);
});

//------------------------
// forで上記を書くと
//------------------------

ただのforでこれをループさせるのは無理です!!!。
順番の概念とか無いのでforの連番で抜き出せません。
forぽい・・・for inとか?と思いましたが
for-inは順不同で反復処理をするのです
順番なんかどうでもいいよ!って場面ではいいのですが、それを忘れてどんどこ使っていくと
どこかで事故ります。僕は基本使わずにやっています。
調べ方がアレだったのか、JQueryのeachとfor-inの比較無かったのでやってみます。

//------------------------
// データオブジェクト
//------------------------
loopLen = 99999;
var hoge = {'key1':'1','key2':'2','key3':'3','key4':'4'...,'key99998':'99998','key99999':'99999'};

for (var i = 1; i <= 100; i++) {
  console.log(i+'回目forin:'+forinTime());
  console.log(i+'回目each:'+eachTime());
  console.log('--------------');
};

function forinTime(){
  var startTime = new Date();
  var endTime = "";
  
  for (var i in hoge) 
  {
    if (hoge[i] == loopLen ) 
    {
        endTime = new Date();
    } 
  }
  return  (endTime - startTime) + "ms";
}

function eachTime()
{
  var startTime = new Date();
  var endTime = "";

  $.each(hoge,function(key,value){
    if (value == loopLen ) 
    {
        endTime = new Date();
    } 
  })
  return (endTime - startTime) + "ms";
}

オブジェクト数が99999 それをfor-inと$eachでループした時にかかった時間をそれぞれ取得
それを100回繰り返しています。
結果を以下全部まとめています。だいたいこんなもんかな?と思います。

foin平均値 each平均値 foin最大値 each最大値 foin最小値 each最小値
データ詳細表示
回数 forinでかかったミリ秒 eachでかかったミリ秒
130ms27ms
219ms25ms
320ms25ms
419ms26ms
520ms26ms
620ms26ms
720ms26ms
820ms26ms
919ms25ms
1020ms26ms
1120ms26ms
1220ms26ms
1321ms26ms
1421ms26ms
1520ms26ms
1620ms26ms
1720ms25ms
1820ms26ms
1920ms25ms
2019ms26ms
2120ms27ms
2220ms25ms
2320ms25ms
2419ms26ms
2522ms25ms
2620ms25ms
2719ms25ms
2820ms24ms
2919ms26ms
3020ms26ms
3120ms25ms
3218ms25ms
3320ms25ms
3420ms25ms
3521ms25ms
3620ms26ms
3719ms25ms
3819ms25ms
3920ms25ms
4020ms26ms
4121ms26ms
4219ms27ms
4320ms26ms
4419ms26ms
4520ms26ms
4619ms26ms
4720ms27ms
4821ms25ms
4920ms25ms
5019ms26ms
5120ms26ms
5220ms25ms
5320ms26ms
5420ms25ms
5519ms25ms
5620ms26ms
5720ms26ms
5820ms26ms
5919ms25ms
6020ms26ms
6119ms26ms
6220ms26ms
6320ms25ms
6420ms26ms
6523ms26ms
6620ms25ms
6720ms26ms
6820ms26ms
6919ms25ms
7020ms26ms
7119ms26ms
7220ms25ms
7320ms26ms
7420ms26ms
7519ms25ms
7619ms26ms
7719ms27ms
7819ms27ms
7919ms27ms
8019ms25ms
8120ms25ms
8220ms26ms
8319ms25ms
8419ms26ms
8520ms26ms
8620ms26ms
8720ms26ms
8820ms26ms
8920ms26ms
9020ms26ms
9119ms25ms
9219ms27ms
9319ms24ms
9418ms26ms
9519ms25ms
9619ms25ms
9719ms24ms
9819ms24ms
9918ms24ms
10019ms26ms

正直誤差レベルじゃねぇのこれ
もうちょっと激しく差でるのかな?と思いましたが、やってることは根本そこまで変わらないのかなぁと
そんな感じで、forInとeachならもうeach使っていいと思いました。

DOMオブジェクト

たぶんキーポイント。
ひとまずやってみましょう。

  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
  • 11
//------------------------
// DOMオブジェクト
//------------------------

for (var i = 0; i < 10; i++) {
  console.log('eachTime:'+eachTime());
  console.log('forTime:'+forTime());
  console.log('--------------------------------------');
};

//2156
function eachTime()
{
  var startTime = new Date();
  var endTime = "";
  var text = "";
  $('.testList').children('li').each(function(){
    text = $(this).text();
  });
  endTime = new Date();
  return  (endTime - startTime) + "ms";
}

function forTime()
{
  var startTime = new Date();
  var endTime = "";
  var text = "";
  var testListLi = $('.testList').children('li');
  var testListLiLeng = testListLi.length;
  for (var i = 0; i < testListLiLeng; i++) {
    text = testListLi.eq(i).text();
  };
  endTime = new Date();
  return (endTime - startTime) + "ms";
}

あらかじめ適当に要素を用意してデータ取得だけする処理にしています。サンプルは消していますがliの数は2156個で実験。
で上記のようにループしてみました。10回ってすくないよね。と思われそうですが、予想外の結果で若干びびりました。

回数 eachでかかったミリ秒 forでかかったミリ秒
113ms7ms
23ms2ms
32ms2ms
43ms2ms
52ms2ms
62ms2ms
72ms2ms
82ms1ms
93ms2ms
102ms2ms

最初のループでは何回やってもこれくらいの差はつきました。
およそ倍の差がでています。
ただそれ以外の秒数が本気で謎すぎる・・・ほぼ拮抗な上に、そもそもの処理がめちゃめちゃ速いです。
おかしいねと思って、ループ内でconsole.logとかしてみましたが、きちんとループも回っているようです。
原理はまだ調査段階なのですが、このデータを正としてみると、無理にeachなんか使わなくてもいいんじゃないか・・・
って思ってしまうレベルです。
もちろん、今回ループ中の処理が単純すぎるのでこうなりましたが、もっと込み入った事をする場合はforで考えてもいいのではないでしょうか。

奥深いっすね

まとめ

そんなわけで、eachよりforを使え!ってのはDOMオブジェクトに対してのループ処理の時に有効なのかなってのがわかりました。
若干挙動は怪しいですが・・・まぁ、顕著に出ている所もあるので、【ループしながらややこしい処理する】みたいな時は
一考するのもあり、それ以外は細かい事考えずにやりやすい方でやればいいんじゃないか?って思いました。おわり