uupaa-selector.js version 1.2 をリリースしました。

Ver 1.1との違い

  • XMLDocument, HTMLDocumentを区別し動作する
    • HTMLDocument(content-type: text/html) なら タグ名の大文字/小文字を無視して要素を検索するが、XMLDocument(content-type: application/xml or application/xhtml+xml or text/xml)なら区別する。
  • 精度の向上
    • W3Cの公式テストのうち、テスト可能な約100項目のほぼ全てをパスするようになった。
      • テストできない項目は、擬似クラス系(:active, :hover, :focus), 動的擬似要素系(::after, ::before, ::selection, ::first-letter, ::fitst-line), @namespace系 と :not系
      • uupaa-selector.js の :not は簡易実装(あまり重要な機能でもなく、テスト工数も確保できなくなるため割り切り)。今後も:notに関してはフル機能を実装する予定無し。
  • 速度の向上
    • 4〜7%ほど高速化。
      • element.tagName.toUpperCase() を廃止したことで、ループ内での関数呼び出し回数が減ったため。

上記に書かれていない機能については uupaa-selector.js version 1.1 をリリースしました。 - latest log を参照してください。

実際に速度を測ってみたいかたは、uupaa-selector.jsの速度計測ページ でどうぞ。
# テストが途中で止まる場合は何度かリロードしてみてください

惑星直列ならぬ『ライブラリ直列』

これまでも、JavaScriptで実装されたCSSセレクタの精度と速度をちょこちょこ測定していたのですが(過去のエントリを参照)、数値を眺めていても、ピンとこないので分布図にしてみました。

メジャーライブラリが、なぜか直線上に整列しています。

どうやら、これらライブラリの多くは、

  1. 速度を大幅に犠牲にして高精度を実現している
  2. 精度を大幅に犠牲にして高速化を実現している

のどちらかに分類されるようです。

だめじゃんか。