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

クエリを減らしてWordPressを高速化するテクニック集

markus-winkler-U2-VxAIi24o-unsplash

WordPressを高速化するためにはクエリを減らすことは重要です。
クエリを減らすことでそもそもデータベースにクエリを送ってデータを受け取る必要がなくなったり、その処理による負担が軽くなったりするので、
サーバーからレスポンスを返すまでの時間が早くなり、表示の高速化に繋がります。

また、同時にアクセスしているユーザーの数だけクエリの数も増えるので、ページ内のクエリが1つ増えるだけでもサーバーに大きな負荷がかかることがあります。

この記事ではクエリをなくしたり減らしたりするテクニックをいくつか紹介していきます。

キャッシュの使用

まずはキャッシュを使用することです。

ページをキャッシュさせておくと、クエリを発行する必要がなくなります。
そもそもサーバー側での処理もほぼ要らなくなるので、高速化に大きな効果をもたらします。

「WP Super Cache」などのプラグインではページキャッシュ等の設定をすることができます。
またWordPressに標準搭載されているTransietns APIやWP_Object_Cacheを使用する方法もあります。

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

他にもクエリキャッシュ等様々なキャッシュがあるので、自分のWordPressに合わせて検討してみてください。

テンプレート内でクエリを減らす

次にWordPressテーマのテンプレート内でクエリの数を減らすことや負荷を軽くことを考えます。

データベースにクエリを発効する関数は多数あるので、全てを変更するのは難しいかもしれません。
負荷の高いものから変更していくのがオススメです。

特に多いのが、カスタムフィールドの値の取得にget_fieldを用いているパターンです。
カスタムフィールドは基本的に数が多く、get_fieldでそれぞれ取得していると
その数だけクエリが発行されるので、負荷が増加してしまいます。

できるかぎりget_fieldsを用いて、1つの記事に紐づいたカスタムフィールドはまとめて取得してしまうのがオススメです。

$field1 = get_field(‘field1’);
$field2 = get_field(‘field2’);

$fields = get_fields();
$field1 = $fields[‘field1’];
$field2 = $fields[‘field2’];

とすればクエリの数は2から1となりトータルの負荷が軽くなります。
カスタムフィールドが1つ2つだとそこまで効果はありませんが、
基本的に取得するカスタムフィールドの数が多ければ多いほど効果を発揮します。
ぜひ使用をオススメします。

メインクエリで代替できるものは、サブクエリを発行しない。

WordPressで時々やっているのを見かけるのが、
メインクエリで欲しい記事は取得できなかったり、件数等の条件が違ったりするので、new WP_Query等を用いてサブクエリを発行し、取得した記事を表示しているというパターンです。

これだと、使わないので必要ないはずのメインクエリを発行してから、新たにサブクエリを発行するので、余計なクエリが1つ増えることになります。
たった1つですが、100人1000人に同時アクセスされると100や1000もクエリが増えてしまうので、サーバーに大きな負荷がかかります。
減らしておくに越したことはありません。

では、どうするのかというと
サブクエリを使わず、メインクエリをpre_get_postsのアクションフックを用いて書き換えます。
例えば、(普通の)固定ページなど書き換えられないものもありますが、ブログ投稿のインデックスページ等書き換えられるものは書き換えることを推奨します。

function changeMainQuery($query)
{
	//管理画面のメインクエリーとメインクエリーじゃないときは処理しない
	if (is_admin() || !$query->is_main_query()) {
		return;
	}
	
	//例えば、ブログ投稿のインデックスページならば、、
	if ($query->is_home()) {
		//カスタム投稿タイプがnewsの記事を表示する。
		$query->set( 'post_type', 'news' );
	}
}
add_action('pre_get_posts', 'changeMainQuery');

のように記述します。
setはWP_Queryのパラメータにあるものなら設定できるので、何があるのか確認しておくとよいでしょう。

まとめ

ここでは、いくつかのテクニックを紹介しましたが
本質はクエリを減らすこと。負荷を軽くすることです。

MySQL側でもできることはたくさんあるのですが、
まずはWordPressのテンプレートで減らすことが重要です。

1つ1つ試しやすいテクニックになっていると思うので
試してみてください。

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

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


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

関連記事

Keywords