メッセージ

2004年11月22日の記事

2004/11/22(月)REXMLの速度をどう見るか

WEBの動的生成でREXMLはなかなか厳しいものがあるようだ。

REXMLを色々いじってみたが相当遅い。XML文書のパースにもそこそこ時間がかかるのだが、それ以上にXPathを使った関数を書くと、まあ遅いこと遅いこと。

"/foo/bar"のような簡単なものでも100ループで2秒、複雑なものを書いてコレクションで取ってこようとすると1発0.3~0.5秒くらいかかるようだ。ピュアRubyの限界か……

さて、妥協案だが単体ノードを取ってくるのにXPathを使わないってのが1つ。

REXML::Elements#[index, name=nil]
REXML::Elements#[xpath]

APIをみると、単体ノードを取ってくるのに上記2通りの書き方がある。上の方は用途が限定的になるものの、下よりも100倍以上速い。しかし上の書き方に限定するなら、いっそcsvでやれという気もする……

コレクションを取ってくる場合も、elements.eachとせずに上の書き方でwhileループを使えば若干の速度向上が見られる。とはいえソースは汚くなる。

ソート部などに下の書き方があったので、全部上になおしたところ130件程度のデータで、13sec -> 7sec程度の速度向上。まだちょっと厳しいが……

とりあえず、当初の構想はどんどん曲げよう。
OK キャンセル 確認 その他