素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

ネイティブのgetElementsByClassNameはすごく速い

Firefox2でgetElementsByClassNameを使えるように適当に作ったスクリプトと、Firefox3のネイティブのメソッドの速度の差がすごくてびっくりした。

作ったスクリプトは

HTMLElement.prototype._getElementsByClassName=function(className){
	var r=this.getElementsByTagName('*');
	className.split(/\s/).forEach(
			function(i){
			r=Array.filter(r,function(j)j.className.match('(?:^|\\s)'+i+'(?:\\s|$)'));
			});
	return r;
}
document._getElementsByClassName=function(className)document.documentElement._getElementsByClassName(className)

で、方向性を間違えたのでFirefox3でしか動かない。意味がない。

どれくらい違うかというと、a - Google 検索で

var s=new Date().getTime();

for(var i=0;i<100;i++)document._getElementsByClassName('g');
new Date().getTime()-s;

を実行した場合が1134ms、ネイティブのものだと1ms。


なるべく組み込みメソッドですまそう。