javascript高速化中

仕事で作ってるjavascriptファイル、Firebugで見てたらどうも
時間がかかりすぎなので、色々と模索しながら高速化を試みている。

(1)documentオブジェクトを変数に入れてIEで高速化

ソースはこちら
http://d.hatena.ne.jp/amachang/20071010/1192012056

documentオブジェクトにアクセスする際、IEはwindowオブジェクトの
内部メソッドを実行するので、遅くなるとのこと。
なんで、documentオブジェクトを変数に入れて、内部メソッドを
実行しないようにして、高速化を図る。
しかし私、この内部メソッドてのがよく分からない。documentオブジェクトに
アクセスするたびに、windowオブジェクトの全てのプロパティを舐める、と
いうようなイメージでいいのかなあ?知ってる人いたら教えて欲しいす。
この高速化で、IEでは速くなったような気がした。ので満足です。
amachangさんに感謝!

(2)functionをすべてオブジェクトのメソッドに

今まで、functionをズラズラと書いて、addLoadEventを使って
読み込ませてたんですが、これをすべてオブジェクトに入れて、メソッドに
しちゃいました。

 function addLoadEvent(){
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
   window.onload = func;
  } else {
   window.onload = function() {
   oldonload();
   func();
  }
 }

addLoadevent(hoge1) //onload設定
function hoge1(){
 do something1
}

addLoadevent(hoge2) //onload設定
function hoge2(){
 do something2
}
 ・
 ・
 ・
 ・

みたいな感じだったのを

var HogeObj ={
  hoge1:function(){
   do something1
  },
  hoge2:function(){
   do something2
  }
 ・
 ・
 ・
 ・
}

with(HogeObj){
	addEvent(hoge1);
	addEvent(hoge2);
}

こんな風に。はっきり言って、これで速くなるかどうかは不明です。
オブジェクトに入れた方が、グローバル変数の汚染は少なくて済むし、
関数へのアクセスも速くなるから、してみただけです。

(3)if文をwindow.onloadを設定する前に

例えば下のコード。

window.onload = function(){
 hoge();
}

function hoge(){
 if(!(document.getElementById('hoge'))) return false;
 alert('ほげほげ')
}

hoge内に「id='hoge'がなければ処理をしない」というif文があるため、
hogeを実行する必要がないページでも必ず一回は、実行してしまいます。
これだと遅くなる(と思う)ので

window.onload = function(){
 if(document.getElementById('hoge'))hoge();
}

function hoge(){
 alert('ほげほげ')
}

こうしてみた。これだと必要なページでのみhogeが実行される。


あとまだ、ドットシンタックスを極力減らすとか、色んな方法があるかと
思うんで随時やっていきます。で、ベンチマークを取りながら
効果測定したいですね。


今日のお疲れ!BGM♪
弱男/ガガガSP