SWELL|関連記事ブロックがタイムアウト⇒ページ表示が激遅に!
SWELLの関連記事ブロック(一般的にはブログカードとも呼ばれる)は、表示する際に外部サイトから情報を取得してから関連記事ブロックを表示します。
関連記事ブロックのように外部サイトにアクセスする場合、表示速度も遅くなりますし、相手のサイトにも迷惑になります。
SWELLには外部サイトの関連記事ブロックをキャッシュする仕組みがあり、それを回避しています。
SWELLのサイトのとある記事で、ページの読み込みが極端に遅いことに気が付きました。
遅い原因は、関連記事ブロックが外部サイトから情報を取得する際にタイムアウトしているようでした。
記事作成時は問題なく情報を取得できていたはずですが、時間の経過で相手のサイトが応答しなくなることはよくあることです。
問題なのはタイムアウトの判定が10秒になっていることです。
そのため、10秒経たないと次の処理にすすまないので、ページ表示が激遅になっていました。
この記事では、外部サイトから情報を取得するタイムアウト時間を変更する方法をお伝えします。
SWELLは外部サイトのデータが取得できない場合は関連記事はキャッシュされない
SWELLの関連記事ブロックはキャッシュされることで高速化をしています。
しかし、外部サイトから情報を取得できない場合はキャッシュされません。
その結果、ページを読み込むたびにタイムアウトを待つ必要があり、サイトの表示がタイムアウト時間だけ遅くなります。
タイムアウトを10秒から変更するスニペット
SWELLはwp_remote_get関数を使用して外部のデータを取得しています。
タイムアウト時間のデフォルトは5秒ですが、SWELLでは10秒に設定されています。
wordpressのhttp_request_timeout
フックでタイムアウト時間を変更することができます。
function custom_timeout_extend( $time )
{
return 1; // 1秒
}
add_filter( 'http_request_timeout', 'custom_timeout_extend' );
まとめ
外部サイトの関連記事ブロックは、リンク切れを起こすとページの読み込みが秒単位で遅くなります。
これを避けるためには、Broken Link Checker等のプラグインでリンク切れをチェックしておく必要があります。
外部サイトへのリンクは、関連記事ブロックではなく、URL直書きでリンクした方が安全かもしれません。
コメント