CSSセレクタにテコ入れした
# 昨日の日記の続きです。
Browser | Test | kQuery | uupaa.js + テコ入れ |
peppy (cache on) |
peppy (cache off) |
sizzle-0.9 | jQuery 1.2.6 |
---|---|---|---|---|---|---|---|
IE6 | A0 | 248 | 153 | 287 | 294 | 338 | 369 |
A1 | 611 | 604 | 1447 | 1507 | 1420 | 1100 | |
IE7(別PC) | A0 | 144 | 116 | - | - | 266 | 306 |
Firefox2 | A0 | 294 | 237 | 138 | 386 | 515 | 398 |
A1 | 647 | 541 | 408 | 356 | 1464 | 841 | |
Firefox3 | A0 | 142 | 115 | 38 | 102 | 193 | 176 |
A1 | 259 | 207 | 157 | 176 | 489 | 360 |
- Test A0: SlickSpeed のデフォルトのテスト項目(利用頻度が高い項目をテスト)
- Test A1: ofk さんのテスト項目(利用頻度が低い項目もテスト)
ひとこと
CSSセレクタの概要をちょっとだけ説明
自作のCSSセレクタは、大きく2つのブロックに分けて検索処理を実装することで、速度と精度を両立させています。
前段の Quick Phase で速度を稼ぎ、後段の Generic Phase で精度を保障する仕組みとなっています。
Quick Phase の役目
Quick Phase (Line239〜298, Line328〜354) は、速度にフォーカスした処理だけを記述してある部分です。速度が必要な場合は、Quick Phase に処理を追加します。
今回のテコ入れでは、ここに処理を追加しました。
追加したのは、以下の2つです。
- "#id ..." や ".class ..." を高速に処理するため、 QUICK_HEAD を追加
- "#id, #id, .class" を高速に処理するため、QUICK_COMMA を追加
このような特殊化の余地はまだ十分に残されているため、今後も速度で抜かれるようなことが(もし)あったとしても、すぐに逆転できます。
Generic Phase の役目
Generic Phase (Line357〜547) は、精度にフォーカスした処理だけを記述してある部分です。Generic Phase はメンテナンス性を第一に考えて組んであるため、非常にシンプルです(簡単に読めると思います)
精度に関わる部分なので、今回のテコ入れでも一切ロジックを修正していません。
精度は抜かれる心配がありません(:not 以外のW3Cのテストを全パスしているので)。
このように役割を明確にして組んであるので、今回のようなケースにも対応できているんだと思います。