「Javascriptを高速化する6つのテクニック」を試してみた。
*このサイトを参考にしました。(マイコミさんありがとう^^)
1.関数呼び出しを避ける。
これは、よく考えると当たり前っぽいので省略
2.括弧で生成せずにnewを使う
これは知りませんでした^^; いつも
var ary = []; var obj = {};
で配列とオブジェクト作ってました^^;
そこで実際どれぐらい早いのか自分でテスト。
(function(){ var data = new Array(); var data2 = new Array(); console.time("before"); for(var i=0;i<500000;i++){ data[i] = []; } console.timeEnd("before"); console.time("after"); for(var j=0;j<500000;j++){ data[j] = new Array(); } console.timeEnd("after"); })();
結果
before : 162ms
after : 62ms
若干, new Arrayで生成するほうが早いですね^^
続いて, new Object()のほうもやってみます。
(function(){ var data = new Array(); var data2 = new Array(); console.time("before"); for(var i=0;i<500000;i++){ data[i] = {}; } console.timeEnd("before"); console.time("after"); for(var j=0;j<500000;j++){ data[j] = new Object(); } console.timeEnd("after"); })();
結果
before : 98ms
after : 116ms
う〜ん。。。 これは。。。 配列では、確かにnew Arrayで配列作ったほうが
速いけど、objectは、別に{}でobject作ったほうがいいのかな?w
こういうことがあるから
やっぱり自分でちゃんとテストして確かめたほうがいいですね^^;
3.ループを展開する
可読性が落ちるぐらいなら、多少速度が落ちたとしても
私はループを使いますw
4.ローカル変数としてキャッシュして使う
これは実際にやってみました。
(function(){ function uncached(){ var i = 100000; while(i--) window.test = "test"; } function cached(){ var w = window, i = 100000; while(i--) w.test = "test"; } console.time("before"); uncached(); console.timeEnd("before"); console.time("after"); cached(); console.timeEnd("after"); })();
結果
before : 314ms
after : 175ms
おぉ〜〜 キャッシュしたほうが速いですね^^
今度からこれ使おうっとw
5.評価式の記述方法を工夫する
これは前から実践してるので省略
6.必要がないなら使わない
そりゃそうですな。 というかwith自体、「Javascript the Good Parts」で
悪いパーツに分類されています。(詳しくは128ページを参照)
以上、Javascriptベンチマークでした^^
(もし間違えがありましたら、指摘していただけるとありがたいです)