uupaa.jsのquerySelectorAll相当の機能(uu.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倍高速化してるように見えるのは気のせいです。
高速化の内容
やってること一覧。
- E>F, E+F, E~F のFを先読みするように変更
- Fを先読みすることで結構早くなる
- ローカル変数をそのつど用意する
- スコープ解決に必要な時間を省略する
- コードは汚くなる
- スコープ解決に必要な時間を省略する
- ary.filter(function() { ... }) や ary.forEach(function() { ... }) を forループでべたべたに書き直す
- コード量が6倍に増え、変数も増え、コードも汚くなるからやりたくないけど、こうでもしないと早くならない。
- 関数を使わず、コピペする。
- 関数呼び出しコストを削るためにやってるが、最悪だ。
コードを綺麗に保ったまま高速化できれば一番なのですが、もはや自分の中にあるモラルとの戦いになっています。
どっかのグラフィックボードのように、ベンチマークテストにあわせて最適化(手抜き)する方法が残されていますが、それこそ邪道。