2012/06/13

[JavaScript] JavaScript 高速化 for編。lengthだけじゃないよ!


オライリーの「続・ハイパフォーマンスWebサイト」に書いてあったのでメモ。
ループの最大数をローカル変数に入れるってのは最初の一歩としてよく聞く。
  1. //ダメな例  
  2. //ループの回数分、itemの長さを取得しにいってしまうので遅い!  
  3. for(var i = 0; i < item.length; i++){  
  4.  //処理  
  5. }  
  6.   
  7. //良い例  
  8. //itemの長さを取得するのは最初の1回だけなので早い!  
  9. var len = item.length;  
  10. for(var i = 0; i < len; i++){  
  11.  //処理  
  12. }  
上の2つ、chromeとfirefoxではほとんど差がなかったぞ…

■今回知ったのはループをi++ではなくi--でやる方法
それは…
  1. for(var i = item.length; i--){  
  2.  //処理  
  3. }  
これだけで、Chrome, Firefoxで60~70%くらいの時間で処理できるようになった。
IEは面倒なので確認してない。誰かやって!

i < length だとtrueかfalseの判定だけど、i--だと0かどうかの判定になる。
そっちの方がtrue、falseの判定よりも速いかららしい。

これだともちろん通常のi++でやる方法とは順番が逆になるので注意。

1 件のコメント:

  1. for(var i = item.length; i--){
    だとエラーになりますー。
    i--の後に「;」が必要ですー。

    返信削除