Hatena::Groupxiss

アリゾナではもう働きたくない社長の blog このページをアンテナに追加 RSSフィード

2007-11-05 (Mon)

XPath id() 関数を使った高速化

XPath id() 関数を使った高速化 - アリゾナではもう働きたくない社長の blog を含むブックマーク はてなブックマーク - XPath id() 関数を使った高速化 - アリゾナではもう働きたくない社長の blog XPath id() 関数を使った高速化 - アリゾナではもう働きたくない社長の blog のブックマークコメント

XPath には Core 関数として id 関数があります。

id 属性を持つ要素ノードセットを取得するために、class 属性などを持つ要素に対してと同じく attribute 軸を使った式を書く人が多く見られますが、以下の例のように id() 関数を使うことで同じ処理を高速化させることが出来ます。(手元のベンチマーク環境で約 1.5 倍前後)

例:

<div id="hoge">
  <p>この要素を取得したい</p>
</div>
id() 関数非利用 id() 関数利用
XPath /descendant-or-self::div[attribute::id='hoge']/child::p id('hoge')/child::p
XPath 式 (省略記法) //div[@id='hoge']/pid('hoge')/p

GreaseMonkey などにおける XPathCSS Selector は定数的に書くことが多いですから、最適化できるところは早めにしてしまいましょう。

他の高速化記述についてはまた別エントリで。