// 毎回を呼び出し
for(var i = 0 ; i < 100000 ; ++ i) {
document.getElementById("test_01_0").style.color = "#fff" ;
}
// 最初のみ呼び出し1
var g = document.getElementById("test_01_1") ;
for(var i = 0 ; i < 100000 ; ++ i) {
g.style.color = "#fff" ;
}
// 最初のみ呼び出し2
var s = document.getElementById("test_01_2").style ;
for(var i = 0 ; i < 100000 ; ++ i) {
s.color = "#fff" ;
}
| IE8 | Firefox3.6 | Chrome8 | Safari5 | IOS4 | |
|---|---|---|---|---|---|
| 毎回呼び出し | 571ms | 245ms | 204ms | 190ms | 520ms |
| 最初のみ呼び出し1 | 211ms | 135ms | 185ms | 165ms | 418ms |
| 最初のみ呼び出し2 | 73ms | 89ms | 183ms | 159ms | 355ms |
IOS4のループ回数は1/10。
とにかく検索を伴う呼び出し回数は減らすべき。
// 毎回変更
var s1 = document.getElementById("test_02_0").style ;
for(var i = 0 ; i < 5000 ; ++ i) {
s1.color = "#f00" ;
s1.top = i + "px" ;
s1.left = i + "px" ;
}
// まとめて変更
var orgin = document.getElementById("test_02_1") ;
var clone = orgin.cloneNode(false) ;
var s2 = clone.style ;
for(var i = 0 ; i < 5000 ; ++ i) {
s2.color = "#0f0" ;
s2.top = i + "px" ;
s2.left = i + "px" ;
}
orgin.parentNode.replaceChild(clone,orgin) ;
| IE8 | Firefox3.6 | Chrome8 | Safari5 | IOS4 | |
|---|---|---|---|---|---|
| 毎回変更 | 247ms | 252ms | 31ms | 28ms | 697ms |
| まとめて変更 | 24ms | 28ms | 31ms | 28ms | 660ms |
IOSを含むSafariは内部で最適化されている。それ以外は更新をまとめて1回にしたほうが良い。
var table = [] ;
for(var i = 0 ; i < 1000000 ; ++ i) table.push(i) ;
// 毎回取得
for(var i = 0 ; i < table.length ; ++ i) {
}
// 最初に取得
len = table.length ;
for(var i = 0 ; i < len ; ++ i) {
}
| IE8 | Firefox3.6 | Chrome8 | Safari5 | IOS4 | |
|---|---|---|---|---|---|
| 毎回取得 | 125ms | 22ms | 2ms | 4ms | 190ms |
| 最初に取得 | 80ms | 24ms | 2ms | 4ms | 210ms |
IOSを含むSafariは内部で最適化されている。それ以外は更新をまとめて1回にしたほうが良い。
test_04_sub0 = function(x,y,z,w,h) {
return x + y + z + w + h ;
}
test_04_sub1 = function(param) {
return param.x + param.y + param.z + param.w + param.h ;
}
// 普通の変数(設定)
var x,y,z,w,h ;
for(var i = 0 ; i < 100000 ; ++ i) {
x = i ;
y = i ;
z = i ;
w = i ;
h = i ;
}
// 連想配列(設定)
var param ;
for(var i = 0 ; i < 100000 ; ++ i) {
param = {"x":0,"y":1,"z":2,"w":3,"h":4} ;
}
// 普通の変数(参照)
for(var i = 0 ; i < 100000 ; ++ i) {
test_04_sub0(x,y,z,w,h) ;
}
// 連想配列(参照)
for(var i = 0 ; i < 100000 ; ++ i) {
test_04_sub1(param) ;
}
| IE8 | Firefox3.6 | Chrome8 | Safari5 | IOS4 | |
|---|---|---|---|---|---|
| 普通の変数(設定) | 13ms | 8ms | 1ms | 1ms | 32ms |
| 連想配列(設定) | 125ms | 33ms | 2ms | 8ms | 203ms |
| 普通の変数(参照) | 40ms | 29ms | 1ms | 1ms | 178ms |
| 連想配列(参照) | 67ms | 32ms | 2ms | 2ms | 182ms |
連想配列の設定は重いが、参照はそれほどでもない。