「Javascriptを高速化する6つのテクニック」を試してみた。

*このサイトを参考にしました。(マイコミさんありがとう^^)

http://journal.mycom.co.jp/news/2009/11/11/015/index.html


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ベンチマークでした^^
(もし間違えがありましたら、指摘していただけるとありがたいです)