“WordPressを簡単に1620倍高速化“する「部分キャッシュ」活用テクニック:とにかく速いWordPress(20)(3/4 ページ)
エンタープライズ用途での利用が増えている「WordPress」の高速化チューニングテクニックを解説する本連載。今回は、「WordPressアプリケーションレベルで実施する高速化チューニング」のポイントを解説します。
WordPress Object Cache
Transients APIではセッションをまたいだ半永続的キャッシュを保持するという性質上、デフォルトではデータベースが格納場所として利用されます。
しかしながら、WordPressの高速化チューニングの方法として、「データベースへの接続をいかに減らすか」ということが1つのポイントになってきます。それをサポートする機能が、「WordPress Object Cache」です。
WordPress Object CacheはWordPress内での処理において取得に時間を要するデータをメモリ上に保持しておき、それ以降のデータ取得を高速化させる機能です。
以前、「MariaDBの設定を調整してデータベースの処理を高速化する」ではデータベース上でのクエリ実行を高速化するためのチューニングを行いました。しかし、これはその前段階で行うアプリケーションレベルのチューニング手法の1つです。
下記はWordPressの標準的なインストールで作成される「wp_postsテーブル」から、全レコードを取得するサンプルです。
<?php require_once __DIR__ . '/DocumentRoot/wp-load.php'; // WordPress Object Cacheなし function get_no_cache_sample_posts ( $post_type ) { global $wpdb; $result = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->posts} WHERE post_type = %s AND post_status = 'publish'", $post_type ) ); return $result; } // WordPress Object Cacheあり function get_cache_sample_posts ( $post_type ) { global $wpdb; $result = wp_cache_get( $post_type ); if ( false == $result ) { $result = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->posts} WHERE post_type = %s AND post_status = 'publish'", $post_type ) ); wp_cache_set( $post_type, $result ); } return $result; } $start = microtime(true); for ($i=0; $i<1000; $i++) { $r = get_no_cache_sample_posts( 'post' ); } $end_time = microtime(true) - $start; echo sprintf( '%.10f秒', $end_time ) . PHP_EOL; $start = microtime(true); for ($i=0; $i<1000; $i++) { $r = get_cache_sample_posts( 'post' ); } $end_time = microtime(true) - $start; echo sprintf( '%.10f秒', $end_time ) . PHP_EOL;
このコードは「get_no_cache_sample_posts」関数がWordPress Object Cacheを使用しない例で、「get_cache_sample_posts」関数がWordPress Object Cacheを使用する例です。
いずれも同一のクエリ結果を1000回取得する処理を行います。処理時間の結果は下記の通りです。
0.1964449883秒 # WordPress Object Cache使用なし結果 0.0009789467秒 # WordPress Object Cache使用あり結果
「WordPress Object Cache使用なし」の場合が0.2秒ほどかかっていたのに対して、「使用あり」の場合は0.0009秒ほどなので、200倍以上処理時間が短縮されました。
データベースでのクエリ実行時間が削減されることはもちろんですが、WordPressがネットワーク経由でデータベースとやりとりを行う場合、それに伴うデータ転送時間も丸ごとカットできるので大幅な速度改善を見込むことができます。
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秒当たりの同時アクセス数について解説します。