uupaa.jsのquerySelectorAll相当の機能(uu.css)をもっと高速化

CSSセレクタをチューンしてます。

作業開始から4時間が経過し、速度向上ぐあいはこんな感じ(in IE6)。

uuppa 0.6 uuppa 0.7(α) jQuery 1.2.6 Prototype 1.6.0
3161 653 382 2046


途中省略

テストツールとテスト内容は、http://slickspeed.googlecode.com/svn/trunk/ のものをそのまま使いました。
1時間ごとに2倍高速化してるように見えるのは気のせいです。

jQuery早ぇぇ。

特に[div ~ p]が20倍ぐらい早いんだが、その理由がまだ理解できない。(uupaa: 192ms, jQuery: 24ms)
何が違うんだろう。

高速化の内容

やってること一覧。

  • E>F, E+F, E~F のFを先読みするように変更
    • Fを先読みすることで結構早くなる
  • ローカル変数をそのつど用意する
    • スコープ解決に必要な時間を省略する
      • コードは汚くなる
  • ary.filter(function() { ... }) や ary.forEach(function() { ... }) を forループでべたべたに書き直す
    • コード量が6倍に増え、変数も増え、コードも汚くなるからやりたくないけど、こうでもしないと早くならない。
  • 関数を使わず、コピペする。
    • 関数呼び出しコストを削るためにやってるが、最悪だ。

コードを綺麗に保ったまま高速化できれば一番なのですが、もはや自分の中にあるモラルとの戦いになっています。

どっかのグラフィックボードのように、ベンチマークテストにあわせて最適化(手抜き)する方法が残されていますが、それこそ邪道。