悩めるWEB担当者様のための最新ノウハウをお届け

WordPressでTransients APIを使って表示高速化する

markus-winkler-U2-VxAIi24o-unsplash

WordPressを高速化する際に、必ずと言っていいほど考えるのがキャッシュすることです。
キャッシュを活用することで、表示を高速化することができます。

キャッシュにも様々なものがあり、実装にもある程度の優先順位があります。
簡単にいえば、ページの一部よりページの全部をキャッシュできる方がいいわけです。

そもそもページキャッシュの方がいいけど、かといって他の対策をしないわけにもいかない。
またプラグインの使用が難しいなど、いろいろなパターンもあります。

そこでキャッシュを実現する1つの手法としてWordPressに標準で搭載されているTransients APIを使ってみるのも一手です。

大まかに説明するとget_postsなどクエリを用いる関数の実行結果をキャッシュとしてデータベースに格納することができます。
サイトに表示する際は、データベースへのクエリ発行自体はするものの、実行結果を格納したものを取り出すだけなので、複雑なSQLを発行する関数を使っている部分に使うと、いくらか負荷を削減できます。

セッションをまたいだ使用が可能で、ページの一部をキャッシュしたい場合などにオススメです。

例 get_postsで使用。

例えば、get_postsで使うとこうなります。

$get_contents = get_transients(‘test’);
if(!empty($get_contents)){
    $args = [
        // get_postsのパラメータを設定。
    ];
    $get_contents = get_posts($args);
    set_transients(‘test’, $get_contents);
}

基本はこれと同じように実装するのがオススメです。
まずは格納しているものがあれば取り出し
なければ新しく発行する、という流れです。

キャッシュがない場合は少しクエリが増えることになるので、
保存期間はある程度長めにしておくのがよいでしょう。

ページが更新された時の対応

ただ、これだとページが更新されたときにキャッシュが元のまま残ってしまう可能性があります。
なので、更新の際にキャッシュを削除する必要があります。

functions.phpに下記のコードを記述することで記事が更新された際に消去することができます。

function delete_cache(){
    delete_transient(‘test’);
}
add_action( 'save_post', 'delete_cache');

delete_postやedit_postのアクションフックも使うとより確実ですが、
save_postで更新全てに対応できるのでこれでよいかと思います。

もし、消すと同時に再設定したい場合は
再設定するコードを書いておけば万全です。

function renew_cache(){
    delete_transient(‘test’);
    //testのキャッシュの内容をそのまま記述。
    $args = [
     // パラメータ
    ];
    $get_contents = get_posts($args);
    set_transients(‘test’,$get_contents);
}
add_action( 'save_post', 'renew_cache');

まあ、キャッシュのない状態でアクセスされればキャッシュされるので
正直、ここまでやらなくてもいいでしょうが。。

まとめ

Transients APIはデータベースの処理を軽減する1つの手段で、かつ劇的な効果をもたらすものではありません。

ですが、0.1秒の時間短縮の積み重ねがやがて1秒、2秒の差を生むのも確かなので
余裕があれば設定してみるのがいいでしょう。

>>どうすれば、自社のサイトの「表示速度」が速くなるのか知りたい!
【期間限定】無料webサイト診断はこちら

当サイトではこの他にもWebに関するお役立ち情報を多数ご紹介しています。
Web担当者の方、デジタルマーケティングに興味がある方はぜひご覧ください。


広告運用やSEO、解析・Web製作など、当社はWebに関わるベストソリューションをご提供しています。お悩み・ご相談も受け付けておりますので下記のボタンからお気軽にご連絡ください。

関連記事

Keywords

無料 プロに相談する 無料 プロに相談する