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