2013年2月21日木曜日

getElementByid の処理が遅い

js-STARを改良していてはまったので、メモ。

多変量解析ではグリッド数が一万個などになってしまうことがあります。
200人に50項目なんてこはふつうにあるからね。
自分のテスト環境はChromeなので気にならなかったのですが、FireFoxだと激重との情報が来たので調べてみました。

ある10000回の処理

  • Chrome 2秒
  • Safari 2秒
  • FireFox 17秒(古いマシンだと40秒らしい)
  • IE 17秒
まず、繰り返している部分をなるべく減らすのが譲渡手段なので、正規表現を使って修正したが、全然速くならない。
そうなると、どこに時間が掛るのかを、一つ一つつぶしていく。
結局この1行に原因があるよう・・・。

document.getElementById(idName+(i+1)).value = dd[i];

dd配列のデータをID番号のついた部品に代入している。
つまり、一つ一つの値をグリッドに代入しているところ。

そもそもFireFoxが目的のIDがついた部品を見つけるのに時間が掛っているらしい・・・。
お手上げである\(◎o◎)/

Operaも独自路線をやめたからFireFoxもWebKitにしてほしい。IEも・・・。

こうなると、代入しないで計算という選択肢を設けるしかないかな。