すたらブログ

文系Webプログラマの備忘録

PHP: フィード取得のSimplePieを今後も使い続けます

ウェブサイトのトップページにブログの新着記事5件のタイトルをリンク付きで表示したい、というような要望を手軽に実現してくれる「SimplePie」というPHPのライブラリがあります。

ただ、これが500KB近くの長大なファイルなので、「きっと古いソースコードなんだろうな。無駄な機能が多いんだろうな。実行時間が長くかかっちゃってるんだろうな」などと失礼ことを考えていました。
そこで、PHPが提供している「simplexml_load_file」というお手軽な関数を使ってフィード取得処理を自作し、実行時間を計測して比較してみました。

自分のPC内のXAMPPで実行した結果、下記のように「キャッシュを有効にしたSimplePie」が断然速かったので、この記事を書き始めました。
しかし、レンタルサーバーの「usamimi.info」で実行すると、なぜかSimpleXMLが一番速いという結果に…。
疑問が残る結果になりましたが、別途ライブラリを自作して維持管理するに見合うほどの利益はなさそうですし、今後もSimplePieをありがたく使わせていただきます。
失礼な先入観を抱いて申し訳ありませんでした m(_ _;)m

XAMPPで実行

方法 実行時間
SimplePie (キャッシュ有効) 0.03
SimpelPie (キャッシュ無効) 0.4秒
SimpleXML (自作) 0.5秒

usamimi.infoで実行

方法 実行時間
SimplePie (キャッシュ有効) 0.3秒
SimpelPie (キャッシュ無効) 0.5秒
SimpleXML (自作) 0.2

なお、上記のデモではココログの公式ブログの新着5件を取得しています。
ココログを使う理由は、RSS1.0、RSS2.0、Atomの全てのフィード形式で配信してくれているからです。


注意

SimplePieの最新版1.4.2は、XAMPPやusamimi.infoでは問題ないのですが、なぜかさくらサーバでは500エラーが発生してしまいます。
ファイルパーミッションの問題ではないようです。
私が何かを見落としているだけかもしれませんが、私はSimplePie1.3.1を利用することにします。


余談

オライリー本の「プログラミングPHP 第2版」では、SimpleXMLについて下記のように紹介しています。

SimpleXMLには、DOM拡張モジュールのようにXMLを作成する機能はありません。また、Expat拡張モジュールのように柔軟性があるわけでもなく、メモリを効率的に使用するわけではありません。しかし、XMLドキュメントを非常に簡単に解析でき、XMLドキュメントを非常に簡単に利用できるようにします。

SimplePieのソースコードを見たところ、SimpleXMLではなくまさにこのExpat拡張モジュール(XMLパーサ)を使っているようです。
だからXAMMPで試した場合、多機能で重いはずなのにSimpleXMLよりも速いというのは分かります。
しかし、なぜ「usamimi.info」で試すとSimpleXMLが異様に速くなるのか。
私は今までベンチマークについては全く勉強してこなかったので、これ以上は分かりません…。