WordPressで時間のかかる処理をキャッシュ機能を利用して高速化する方法

サイバーマンデー
Amazonプライム会員限定の大セール「サイバーマンデー」開催中!プライム会員限定の大セール

WordPressで時間のかかる処理を行うとき、ページ表示ごとに毎回処理を行っていては、毎回ページ表示が遅くなってしまいます。

そんな時は、Transients APIを利用することで、結果などをデータベースにキャッシュ化することである程度高速化を図ることができます。

スポンサーリンク
レクタングル(大)広告

Transients API の使い方

Transients APIを利用する簡単なサンプルは以下になります。

例えば以下のような関数をfunctions.phpに記入します。

あとは、キャッシュを呼び出したい場所で以下のように記入するだけです。

保存したキャッシュを削除したい場合は、以下のようにdelete_transientを指定して削除することができます。

transientの便利なところ

transientは、単に値や文字列だけではなく、配列やオブジェクトを、そのままシリアライズ化して保存しておくことができます。

例えば、サンプルとして以下のような配列をset_transientで保存したとしても、データベースにキャッシュされget_transientで手軽に取り出すことができます。

transientで保存したものは、Wordpressのデータベース上では、wp_optionsテーブルに保存され、以下のようにシリアライズ化されて保存されています。

transientでシリアライズ化された配列

もちろん、オブジェクトもそのまま保存できるので、時間のかかるDBクエリの結果をそのまま保存しておくなんてこともできます。

クエリ結果などを保存しておくことで、transientでクエリ数を削減し処理時間の短縮をはかるなんてこともできるかと思います。

クエリ結果を保存するサンプルについては以下を参照してください。

transientキャッシュの全削除

一応、データベース上のtransientキャッシュを全て削除する方法も以下に載せておきます。

キャッシュの全削除を行いたい場合は、上記の関数をどこかで呼び出してください。

上記コードだと、自分が設定したもの以外のもの(例えばプラグインが設定したもの)を含めて全てのtransientキャッシュがクリアされます。

特定のtransientキーを含んだキャッシュのみを削除する場合は、以下のように書いてください。

XXXXXXXXXの部分を任意のtransientキーを設定してください。

まとめ

このように、transientを利用することで、様々なものをデータベースに保存することができるので、手軽にキャッシュ化して利用することができます。

例えば、「ものすごく時間のかかるAPIからのSNSシェア数の取得」なんかを、キャッシュ化しておくと、1度取得してしまえば次回からは、ネットワークを利用しないので、高速化を図ることができるかと思います。

このtransient機能は、使い方次第でいろいろ便利に使えるかと思います。