JavaScript のボトルネック分析は出来るの?
C# でやってる実験の話はちょっと書けない段階なので、それとは別に JavaScritpt で実験してる話を少し。
jQuery を使って、TABLE タグを row / column で操作したいとして、意外にパフォーマンスが問題になってる。実際の問題が本当にどこにあるのか全然検証出来てないんで、具体的に書けない状況。
TABLE タグって COLSPAN とか ROWSPAN でセル(TD)のマージとか出来るんで、かなり複雑なデータ構造になってる。(と思ってる)
そのせいで、純粋な2次元表(テーブル)じゃ無くて、可変長の変則的なデータ構造やと思うのな。(これも予想)
そのせいなのか、動的に HTML 要素を出し入れしようとしているからなのか不明ながら、初めから TABLE のセル内に要素を敷き詰めるパターンに比べて、1つの要素を選択位置にだけ生成する方式の方がすごく遅い。
そもそも、TABLE って列の中の全ての要素の中で一番文字数の多いセルの幅で全体が変化する仕様なので、全部のデータが入るまでレンダリング出来ないのな。
恐らくその辺で影響で、動的にセル内の要素を出し入れすると悲しい感じになるんやろと予想してる。
それではとセルの幅や高さを固定にして、absolute position にしちゃって TABLE 要素と関係無い形にしようとすると、作ろうとしてる本質に書かわる部分に影響が出ちゃうのな。前門の狼、後門の虎って奴ね。
ま、実現出来るか出来へんかわからんもんを作るときには常に顔を出す問題なわけやけどさ。それで出来へんのかあって諦めてたら世界初は無理やわね。
イベントを処理する方の問題を解決出来るなら、TABLE の位置情報をキャッシュするとかで遅い問題はクリア出来る可能性があるし、現時点で処理速度がネックになってる部分を解消出来るなら、そっちの方がコストは安いと思う。
そのために JavaScript の処理のプロファイリングをしたいところなんやけど、やったことないんで解りませんでしたって話。
Chrome には Profile ってのがあるなあ。IE はどうなんやろ?MBA の NetBeans 上で実験してるんで、実は IE で試すのちょっと面倒なのよねえ。
まさか買ったばかりの Windows パソコンが到着1週間遅れで、モニタには傷があるわ本体は壊れてるわで、Windows タブレットに至っては納期が1ヶ月ズレるわで、ひどいありさま。問題無ければ先週頭から新パソコンたちで実験開始出来てたのになあ。
ま、神様がのんびりいきなーよと言ってくれてるんやと思うことにする。
p.s.
あー今ちょっとアイデア閃いた。
対象セルを中心に十字型に要素を動的に生成して、1行・1列分だけキャッシュする形を取れば出し入れの回数を抑制出来てパフォーマンス上の問題は解消出来るかも。(いや、出来ないかも)
イベント系をなんとかする方がきっと問題は少ないんやろけどなあ。イベント系はどうしようも無い可能性が高いのよねえ。