1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // 毎回を呼び出し 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。
とにかく検索を伴う呼び出し回数は減らすべき。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 毎回変更 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回にしたほうが良い。
1 2 3 4 5 6 7 8 9 10 11 | 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回にしたほうが良い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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 |
連想配列の設定は重いが、参照はそれほどでもない。