smbutton-blue_no_shadow

WordPressのTransients APIを用いて表示の高速化を図る

ポータル的なサイトの場合、トップページの情報掲載量が多く処理が重くなりがちですよね。こんなときの対策として、WP Super CacheW3 Total Cache などのキャッシュプラグインを利用することも1つの手ではありますが、ランダムな表示箇所があったり、カウンターの表示があったり、ログイン処理があったりなどなど、すんなりとキャッシュでは解決できない場合も出てきたりします。

こんな場合は、Transients API を用いて取得結果のデータをキャッシュとして保持する方法があります。

Transients API は、通常 options テーブルにデータを保存しますが、オブジェクトキャッシュを利用している場合は、そちらを利用し高速に動作します。
また、有効期限を指定しない場合は、キャッシュの更新・破棄を行わない限り永久的なキャッシュとして動作します。(注:ただし、この手法は推奨されていません。)

実装方法は、簡単で手順は下記の通り。
キャッシュ化するデータの取得部分を分岐処理で囲むだけとなります。
また、CODE 1 は、Transients API を用いた最新記事をキャッシュするサンプルコードです。このコードで クエリー数で89、WordPressの実行時間で500ミリ秒程度の改善が見られました。

  1. get_transient 関数でキャッシュデータを取得。データがある場合はそのまま利用
  2. 結果が false だった場合には、本来の取得コードを実行
  3. set_transient 関数でキャッシュデータを保存

CODE 1

$transients = get_transient( 'transient_key' );
if ( $transients === false ) {
	$transients['top_cat1'] = get_posts("numberposts=5&post_type=post_type&orderby=menu_order&taxonomy=taxonomy&term=cat1");
	$transients['top_cat2'] = get_posts("numberposts=10&post_type=post_type&orderby=menu_order&taxonomy=taxonomy&term=cat2");
	foreach ( $transients as $cat => $transient ) {
		foreach ( $transient as $key => $post ) {
			$transients[$cat][$key]->img = get_the_post_thumbnail( $post->ID, 'thumbnail_size' );
		}
	}
	$transients['top_cat3'] = get_posts("numberposts=12&post_type=post_type&orderby=menu_order&taxonomy=taxonomy&term=cat3");
	set_transient( 'transient_key', $transients, 3600 * 24 );
}

キャッシュデータの破棄は、delete_transient 関数で行うことができます。CODE 1 の場合は、記事に関するデータのキャッシュなので、記事が公開された段階で破棄すればいいので、CODE 2 のような記述になります。(publish_post_type の post_type がキャッシュを利用する投稿タイプ。投稿だったら post、固定ページだったら page になります。)

CODE 2

この記事は、jim912によって書かれたものです。
引用を行う場合は、著作権法に定める範囲にて、引用元であるSimple Colorsの出展元表示とhttp://www.warna.info/archives/1681/へのリンクを必ず行って下さい。

function clear_transient_cache() {
	delete_transient( 'transient_key' );
}
add_action( 'publish_post_type', 'clear_transient_cache' );

この他にも、マルチサイト時にネットワーク全体のキャッシュとして利用される、get_site_transient、set_site_transient、delete_site_transient なども存在します。(利用方法は、get_transientなどと同様)

参考

WordPressのTransients APIで有効期限付きのデータを保存する。

カテゴリー: WordPressの小技   タグ: , ,   この投稿のパーマリンク

WordPressのTransients APIを用いて表示の高速化を図る への20件のコメント

  1. jim0912 より:

    ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR @wordpress_fan #WordPressJP #ブログ

  2. wordpress_fan より:

    ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR @wordpress_fan #WordPressJP #ブログ

  3. shokun0803 より:

    ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR @wordpress_fan #WordPressJP #ブログ

  4. zerochacool より:

    WordPressのTransients APIを用いて表示の高速化を図る http://t.co/KInoJLK

  5. yomogigari より:

    ふむふむ。 WordPressのTransients APIを用いて表示の高速化を図る | Simple Colors http://t.co/p0tmwVC

  6. kairi-m より:

    ふむふむ。

  7. kengyu_n より:

    ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR @wordpress_fan #WordPressJP #ブログ

  8. jim0912 より:

    【お昼の再掲】ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR

  9. miya0001 より:

    【お昼の再掲】ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR

  10. latexcatsuit より:

    これって、どう使えばいいんだ?? / WordPressのTransients APIを用いて表示の高速化を図る | Simple Colors http://t.co/2DDFDmx

  11. latexcatsuit より:

    これって、どう使えばいいんだ??

  12. wordpress_bot より:

    WordPressのTransients APIを用いて表示の高速化を図る | Simple Colors http://t.co/3ZTSKWX

  13. html_coderoid より:

    WordPressのTransients APIを用いて表示の高速化を図る | Simple Colors: ポータル的なサイトの場合、トップページの情報掲載量が多く処理が重くなりがちですよね。こんなときの対策として、WP … http://t.co/gnApxRd

  14. wordpress_news より:

    WordPressのTransients APIを用いて表示の高速化を図る | Simple Colors http://t.co/a2DF6Bp #wordpress

  15. murrayhopper より:

    【お昼の再掲】ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/vruDQzR

  16. devolen より:

    WordPressのTransients APIを用いて表示の高速化を図る | Simple Colors http://ow.ly/6dm3J

  17. 菖蒲康一 より:

    試してみよう

  18. shinichin より:

    高速化。。色々ありすぎてもう置いてかれてる。。RT @jim0912: ぶろぐった:WordPressのTransients APIを用いて表示の高速化を図る http://t.co/pV2wtuz @wordpress_fan #WordPressJP #ブログ

  19. shinichin より:

    WordPressのTransients APIを用いて表示の高速化を図る http://t.co/HPsmGEU

  20. ピンバック: WordPress の Transients API | 雑念ベース

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>