MacBSの日常生活的日記

file_get_contentsが遅い

いろんなところから情報を引っ張ってマッシュアップもどきみたいなことをPHPでやってるんですが、数が増えてくるとスピードが問題になってきました。
とりあえずPEARでキャッシュしてるので、普段のスピードはそれなりなんですが、キャッシュ更新時はちょっと耐えられないんですよねぇ。
というわけで、速度のボトルネックを調べると、やはり情報を取得してる部分、要するにfile_get_contents()が遅いのがわかりました。

実際にはタイムアウトを仕込む関係で別の関数を使ったりもしてますが、いずれにしろ遅いことに変わりはないですね。
1件あたりだと0コンマ数秒なんですけどねぇ。
で、調べてみると、curlだとちょっと早いらしいので、まずはこれに変えてみますが、せいぜい2倍速くらい。

これじゃあ解決にならないなぁと思いつつ、さらに調べると、multiRequestというのがあるんですね。
要は複数のリクエストを並行して投げるものです。
これを使えばスピードは一気にcurlの4倍くらいになりました。
同時リクエスト数によっても違うと思いますが、かなり有効ですね。

既存の処理もこれで見直そうかなぁと思ってますが、サイドメニュー辺りのはそれぞれ個別に分離してるからなぁ。
どれかひとつでキャッシュ生成して、他はそのキャッシュを読むだけ、といった具合に作り替えないと難しいかもしれません。
ともあれ、マッシュアップ系の処理を書いてる方にはオススメです。(すでにご存知かもしれませんけど。)

モバイルバージョンを終了