2008/06/23

[javascript]document.allとdocument.getElementByIDの実行速度の違い

開発をしていてずっと気になっていたのですが、document.all("")とdocument.getElementByIdのアクセス速度って違うのでしょうか?

前者は、documentにあるすべてのタグを見に行くのに対して、後者は、ピンポイントで指定しているから、ひょっとしたら後者の方が早い気がするのですが。。。

論より証拠ということで、ソースを作って実行してみたらところ、アクセス速度に違いはありませんでした。

以下、ソースです。


<CFOUTPUT>
<script type="text/javascript">
function lf_kakunin(num){
var note;
dateObj = new Date();
note = "開始時刻は" + dateObj.toLocaleTimeString() + ":"+
dateObj.getMilliseconds() + "です";
document.getElementById("TimeStamp1").innerText = note;
for(i=1; i<=1500; i++){
if(document.all["hoge_"+i].value == num){
note = "見つかった時刻は" + dateObj.toLocaleTimeString() + ":"+
dateObj.getMilliseconds() + "です";
document.getElementById("TimeStamp2").innerText = note;
break;
}
}

note = "開始時刻は" + dateObj.toLocaleTimeString() + ":"
+ dateObj.getMilliseconds() + "です";
document.getElementById("TimeStamp3").innerText = note;
for(i=1; i<=1500; i++){
if(document.getElementById("id_"+i).value == num){
note = "見つかった時刻は" + dateObj.toLocaleTimeString() + ":"
+ dateObj.getMilliseconds() + "です";
document.getElementById("TimeStamp4").innerText = note;
break;
}
}
}
</script>

<div id="TimeStamp1"></div>
<div id="TimeStamp2"></div>
<div id="TimeStamp3"></div>
<div id="TimeStamp4"></div>

<form name="FRM_MAIN" action="" method="post">
<CFLOOP index="i" FROM="1" TO="1500">
<input type="text" value="#i#" name="hoge_#i#" id="id_#i#"> 
<input type="button" value="Run" onClick="lf_kakunin(#i#);">
<br>
</CFLOOP>
</form>
</CFOUTPUT>


アクセス速度に違いがないのですから、あまり意識せずに開発をしてもいいのかもしれませんね。

2 件のコメント:

  1. おー、速度には違い無いのか……
    でも確かdocument.allってIEが独自に
    実装したものだから多分使わない方が無難だよね……

    まぁ、思い返せば始めたやった仕事では
    もうallの嵐だったんだけどねー……

    返信削除
  2. >でも確かdocument.allってIEが独自に
    実装したものだから多分使わない方が無難だよね……

    document.all("")に何か抵抗感を感じちゃって、製造時にはならべく使わずに$()でアクセスしているけどね。

    なぜか、わからないんだけど、仕事ではdocument.allがものすごく使われているよね。

    >もうallの嵐だったんだけどねー……

    なつかしいね!!

    JSの半分近くは、あれで埋め尽くされているんじゃーねーと思ってしまうほどだね。

    返信削除