“WordPressを簡単に1620倍高速化“する「部分キャッシュ」活用テクニック:とにかく速いWordPress(20)(2/4 ページ)
エンタープライズ用途での利用が増えている「WordPress」の高速化チューニングテクニックを解説する本連載。今回は、「WordPressアプリケーションレベルで実施する高速化チューニング」のポイントを解説します。
効率的な部分キャッシュを実現する「Transients API」
部分的なキャッシュには、以下のようなコンテンツが適しています。いずれもサイト全体のページに横断的に表示される内容です。
- (1)ランキング情報のように、API(Application Programming Interface)を呼び出して生成する情報(サイドバー)
- (2)コンテンツの最上位階層ページへのリンク(グローバルナビゲーション)
- (3)会社概要など、ほぼ静的なページへのリンク(フッターナビゲーション)
なお、(1)のように、外部API経由でデータを取得する処理がある場合には注意が必要です。APIサーバのレスポンス生成処理に加えて、ネットワーク上のレイテンシが深刻なボトルネックになる可能性があります。また、SaaS(Software as a Service)やASP(Application Service Provider)のサービス規定によっては、1日にAPIを呼び出せる回数に上限がある可能性もあります。
2017年8月25日に全国規模で大規模なネットワーク障害が発生したのは記憶に新しいと思います。外部API経由で呼び出す仕組みは、こういった場合にも自社サービスの障害につながるリスクがあります。そういったリスクを避けたいならば、なるべくネットワークをまたいだアクセスは抑えたいところです。
それを解決する最適な手段がWordPressの「Transients API」です。Transients APIは「期限付きで半永続的なキャッシュを保持できるようにする」機能です。
WordPressのAPIサーバから認証用ユニークキーを取得するサンプルコードで確認してみます。
<?php require_once __DIR__ . '/DocumentRoot/wp-load.php'; // Transients API使用なし function get_no_transients_keys () { $results = false; $auth_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); if ( ! is_wp_error( $auth_keys ) ) { $results = $auth_keys['body']; } return $results; } // Transients API使用あり function get_transients_keys () { if ( false === ( $results = get_transient( 'sample_api' ) ) ) { $auth_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); if ( ! is_wp_error( $auth_keys ) ) { $results = $auth_keys['body']; set_transient( 'sample_api', $results, 12 * HOUR_IN_SECONDS ); } } return $results; } $start = microtime(true); for ($i=0; $i< 10; $i++) { $r = get_no_transients_keys(); } $end_time = microtime(true) - $start; echo sprintf( '%.10f秒', $end_time ) . PHP_EOL; $start = microtime(true); for ($i=0; $i< 10; $i++) { $r = get_transients_keys(); } $end_time = microtime(true) - $start; echo sprintf( '%.10f秒', $end_time ) . PHP_EOL;
このコードは、「get_no_transients_keys」関数がTransients APIを使わず、「get_transients_keys」関数がTransients APIを使用する例です。いずれも同一のAPIサーバに10回リクエストを投げる処理を行っています。処理時間の結果は下記の通りです。
5.6488840580秒 # Transients API使用なし 0.0009069443秒 # Transients API使用あり
Transients APIを使わない場合は約5.6秒かかっていたのに対して、Transients APIを使うと0.0009秒と、6200倍以上も処理時間が短縮されました。しかしこの場合でもネットワークをまたいだアクセスは、かなりのボトルネックになってしまいます。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- WordPress脆弱性発覚、その後の状況 4.7.2リリース時に脆弱性が公開されなかった理由
2017年2月に発覚したWordPressの脆弱性により、既に約10万件ものサイトで改ざん被害が発生しているという。セキュリティ企業 ESETが、公式ブログで背景と現状、対処方法を解説した。 - 容易にWebサービスを高速化できるNginxを使いこなすための秘訣とは
高速で軽量なOSSのWebサーバとして注目されている「Nginx」。使いこなすための課題や有効なアーキテクチャ構成などをサイボウズでの導入事例と共に明かす。 - 高速・軽量・高機能……Nginxの基礎知識
処理能力の高さなどを理由に、近年、大規模サイトを中心に急速にシェアを拡大しているWebサーバー「Nginx」。この連載では、その特徴と魅力を分かりやすく紹介します。 - WordPress自体のチューニングが必要な理由と高速化の基本的な考え方
企業のCMSサイトやオウンドメディアなどエンタープライズ用途での利用が増加しているWordPressの高速化について解説する連載。初回は、WordPressの高速化が求められる背景や、WordPress高速化の基本的な考え方であるページのロード時間とその構成要素、1秒当たりの同時アクセス数について解説します。