Feed をパースするモジュールのベンチをとったまとめ
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 の方がパースも全体的に速かった。
つっこみなどあればよろしくです。