アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPで<title>タグ取得の動作が非常に重い

$html = file_get_contents($url);
if(preg_match( "/<title>(.*?)<\/title>/i", $html, $match)) {
}

上記のような方法で一度に(1ページ内で)30サイトほどの<title>タグを取得すると、不可がかかり、表示までにかなり時間がかかってしまいます。

preg_match では重いのでしょうか。
それとも一度に30サイトはそもそも無理があるのでしょうか。。

A 回答 (3件)

取得先のコンテンツ、あるいはサーバー自体が重いとは考えられませんか?たとえば、preg_matchで検索せずに、そのまま読み込むのにどれくらい時間がかかりますか?また、titleタグはheadタグ内にあると決まっているので、バイト数などで読み込む量を制限するといくらかは軽くなるかもしれませんね。


取得先のコンテンツが重いのはどうにもなりませんが、PHPでなくJSの使用が可能であるならば、非同期で取得することで、体感としてはいくらか向上すると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

preg_match部分を外して試しても、やはり変わらず重いままでした。

↓そこで、ご指摘のバイト数を調整してみました。
$html = file_get_contents($url, NULL, NULL, 0, 1500);

だいぶ軽くなりました。
今で普通に重いサイトだなぁ、くらいの体感です。。

後はAjaxにする方法しかないんでしょうかね。

お礼日時:2010/11/05 14:23

No2です。


最新の情報を取得しなくてもよいのであれば、定期的(1時間おきくらい)にタイトルを取得するプログラムをつくって、その結果(CSVなど)を読み込むことで、毎回重いのは回避できると思います。いわゆるキャッシュファイルをつくって読み込むということですね。また、1時間おき程度の頻度なら、アクセス毎の取得よりも相手サイトに迷惑がかからないと思いますし、自分のサーバーの負荷も軽減できます。
    • good
    • 0

>preg_match では重いのでしょうか。



クロールの仕方がおかしいのでは?
処理自体はそれほどおそいことはないです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!