Posts tagged: benchmark

Feed をパースするモジュールのベンチをとったまとめ

By admin | 2009年4月21日

Feed(RSS, Atom) 共にモジュールがいっぱいあって何を使えばいいのかいまいちわからない。
というわけで調べるついでにベンチマークをとった。
とったといっても RSSのパース速度の比較
Atomのパース速度の比較 を参考にさせてもらい(ほぼ流用です。。。)
少しだけ比較するモジュールをたして計測してみた。

さっそく結果

[RSS]
                     Rate XML::Feed XML::RSS XML::Simple Data::Feed XML::RSS::LibXML XML::FeedPP XML::LibXML regexp
  XML::Feed        1.68/s        --      -1%        -96%       -96%             -96%        -97%       -100%  -100%
  XML::RSS         1.70/s        1%       --        -96%       -96%             -96%        -96%       -100%  -100%
  XML::Simple      37.9/s     2153%    2128%          --       -18%             -20%        -22%        -89%  -100%
  Data::Feed       46.1/s     2642%    2611%         22%         --              -3%         -5%        -87%   -99%
  XML::RSS::LibXML 47.3/s     2714%    2683%         25%         3%               --         -2%        -87%   -99%
  XML::FeedPP      48.3/s     2771%    2739%         27%         5%               2%          --        -86%   -99%
  XML::LibXML       356/s    21105%   20868%        841%       673%             653%        639%          --   -96%
  regexp           7941/s   472363%  467069%      20871%     17132%           16687%      16356%       2128%     --
 
 
[Atom]
               Rate XML::FeedPP  Data::Feed   XML::Feed   XML::Atom XML::LibXML
  XML::FeedPP 108/s          --        -68%        -69%        -73%        -81%
  Data::Feed  336/s        210%          --         -4%        -15%        -41%
  XML::Feed   352/s        225%          5%          --        -12%        -38%
  XML::Atom   398/s        267%         18%         13%          --        -30%
  XML::LibXML 570/s        426%         69%         62%         43%          --

正規表現は半端なくはやかったです。
さすがって感じ。ただ作るパターンは注意しないといけない。

で、びっくりしたのが XML::RSS がものすごくおそい。。
他にも XML::RSSLite や XML::RSS::Parser も試したが CDATA セクションが入ったりすると
パースエラーを起こしてパースできなくなったりしたんで、今回の対象からははずしました。

やっぱり速いのは XML::LibXML が Atom, RSS ともに圧倒的にはやかったです。
ただ個人的に XPath を書くのはあまりすきではないのがネック。
Atom だと XML::Atom という宮川さんが書かれたモジュールが速い。
ただ名前空間に Atom ってある通り RSS を読み込ませると試した限りパースできなかった。
Atom に最適化してあるからはやいのかな。
XML::RSS::LibXML も RSS に特化してる感じ。

Data::Feed XML::FeedPP XML::Feed の3つが RSS, Atom 共にパースできる。
中でも Data::Feed は id:lestrrat さんが作られてるとのこと。
そして 4/19 にも更新されててメンテもされてる。XML::FeedPP も XML::Feed もメンテはされてる。
ただ XML::Feed は RSS のパースがあまりに遅いので、Data::Feed か XML::FeedPP がいい気がする。
両方ともインターフェースは似てて同じ感覚で使える。あとは好みの問題なんだろーなと。
XML::FeedPP の pod の方が分かりやすいから、最初はそっちで触るのがよいかも。

XML::FeedPP か Data::Feed を使ってれば変なとこではささらない気がする。
あといらない情報が少ない Atom の方がパースも全体的に速かった。
つっこみなどあればよろしくです。

WordPress Themes