2007-08-28 XPath は実用に耐えうるかの考察と xpath.js JavaScript XPath 背景>< Safari 3 系から DOM Level 3 XPath が実装されました!!!キタコレ!!! Firefox 2 系は DOM Level 3 XPath が実装されている。 Opera 9 系は DOM Level 3 XPath が実装されている。 XPath 1.0 in JavaScript • Cameron McCormack's blog (以下、 xpath.js)なるものがあり Internet Explorer 6 および 7 のような DOM Level 3 XPath を実装していないブラウザでもそれ相当の機能を実装することができる ということで、以下のことを試してみたい!! Safari, Firefox, Opera の XPath のパフォーマンスはどうか? xpath.js のパフォーマンスはどうか? xpath.js は XPath 1.0 および DOM Level 3 XPath をちゃんと実装しているか? で、こんなページを作ってみた リンク http://amachang.art-code.org/xpathperformance/ 説明 XPath の様々な式を実行してパフォーマンスを計測します。 Time の単位はミリ秒です。 パフォーマンスの計測自体は重いのでじーっと見ててください。(XPath 自体が重い訳ではありません) Internet Explorer の場合は条件付きコメントで xpath.js が組み込まれます。 他のブラウザで見た時は、ネイティブの document.evaluate が使われます。 xpath.js はそのままでは使えなかったので 1200 行目をいじって case insensitive で動くように改造しました。 考察 xpath.js ってどうよ? かなり重い(ネイティブ実装ブラウザの 20 〜 200 倍)。最初 200 倍と書いていたが、色々なパターンを計測してみて修正。 Predicate Expression を評価するときのコンテキストがおかしい。 兄弟系の軸の取得がおかしい。 でも、かなり奇麗にコードが書かれていて、ライセンス的に書き換え可能なので、自分で直すのはあり。 局所的な小さな DOM ツリーに使う分にはいけるかなあ。。。 ブラウザのネイティブの XPath ってどうよ? ここまで、パフォーマンスがいいとは思わなかった!XPath 最強!いやまじで!だって、「これ普通に処理したらどんだけ重いんだよ」って処理だって XPath だと 0.2 ms とかで出来ちゃうんだもん! Internet Explorer 8 で XPath が実装されるかどうかかなり注目! MSXML では XPath は使えるので、今後 HTML のほうに実装されることは十分にありえる。 まとめ この夏は XPath が熱い!!