getElementByID、変数、withによる参照速度比較
ページ上にあるdivタグを参照する場合の速度比較結果です。getElementById()で参照する場合、一度取得したIDを変数に入れて参照した場合、withを使ってオブジェクト名を省略した場合の3パターンを比較しています。
テストマシンはPower Mac G5 (2GHzx2、メモリ4GB)、WindowsはXP SP2 (3.0GHz、768MB) で行っています。動作速度は何度かリロードした場合の値になっています。また、動作速度は環境により異なるので、あくまでも参考程度にしてください。
【
サンプル1を実行】
【
サンプル2を実行】
【
サンプル3を実行】
OS | ブラウザ | getElementById (msec) | 変数 (msec) | with (msec) |
MacOS X (10.4.7) | Safari 2.0.4 | 1280 | 420 | 1000 |
MacOS X (10.4.7) | Firefox 1.5.0.4 | 4450 | 3050 | 4420 |
MacOS X (10.4.7) | Opera 9.0 | 2770 | 50 | 1160 |
Windows XP SP2 | Internet Explorer 6 | 4400 | 2300 | 2760 |
Windows XP SP2 | Firefox 1.5.0.4 | 4620 | 3032 | 4100 |
Windows XP SP2 | Opera 9.0 | 680 | 15 | 580 |
【サンプル1】
■HTMLファイル
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script type="text/javascript" src="test.js"></script>
<title>Sample</title>
</head>
<body>
<p>JavaScript Speed Test</p>
<div id="outputArea"></div>
</body>
</html>
■スクリプトファイル (test.js)
window.onload = function() {
var num = 100000;
s = (new Date()).getTime();
for (var i=0; i<num; i++) {
document.getElementById("outputArea").innerHTML;
}
e = (new Date()).getTime();
alert(e-s);
}
【サンプル2】
■HTMLファイル
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script type="text/javascript" src="test.js"></script>
<title>Sample</title>
</head>
<body>
<p>JavaScript Speed Test</p>
<div id="outputArea"></div>
</body>
</html>
■スクリプトファイル (test.js)
window.onload = function() {
var divObj = document.getElementById("outputArea");
var num = 100000;
s = (new Date()).getTime();
for (var i=0; i<num; i++) {
divObj.innerHTML;
}
e = (new Date()).getTime();
alert(e-s);
}
【サンプル3】
■HTMLファイル
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script type="text/javascript" src="test.js"></script>
<title>Sample</title>
</head>
<body>
<p>JavaScript Speed Test</p>
<div id="outputArea"></div>
</body>
</html>
■スクリプトファイル (test.js)
window.onload = function() {
var divObj = document.getElementById("outputArea");
var num = 100000;
s = (new Date()).getTime();
with(document.getElementById("outputArea")) {
for (var i=0; i<num; i++) {
innerHTML;
}
}
e = (new Date()).getTime();
alert(e-s);
}