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

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

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

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

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

無料の高速化診断、実施中!

「PageSpeed Insightsのスコアが低い…」「どう改善すれば良いかわからない…」
など、表示速度の課題を感じている方に、表示速度が遅いページ一覧と原因・改善施策がわかる無料の高速化診断を実施中!サイトの現状を知りたい方、改善施策が知りたい方は、ぜひお気軽にお申し込みください。

キャッシュの使用

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

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

「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担当者の方、デジタルマーケティングに興味がある方はぜひご覧ください。


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

高速化診断 & 表示速度改善でユーザー体験とCVRを向上!

デジタルアイデンティティでは、Webサイトの表示速度に課題を感じている企業様向けに、無料の高速化診断とフロントエンドからインフラまで一貫対応する表示速度改善サービスを提供しています。

表示速度が遅いページ・原因が一覧でわかる高速化診断でサイトの現状を徹底分析。PageSpeed Insightsのスコア改善はもちろん、画像・CSS/JS・サーバー処理・インフラ最適化まで、技術力と実績に裏打ちされた幅広い施策で、SEO評価やCVR、UI/UXを総合的に底上げします。

こんなお悩み、ありませんか?

  • まずはサイトの現状を診断してほしい…
  • PageSpeed Insightsのスコアが低く、改善したい…
  • ユーザー離脱や直帰率が高く、表示スピードが原因かもしれない…
  • 高速化に詳しいエンジニアが社内にいない…
  • 対策したがスコアが上がらない、改善方法がわからない…

多くの企業サイトやLP、ECサイトなどで成果を上げてきた表示速度改善のプロフェッショナルが、貴社サイトの課題を根本から解決します。

【無料】高速化診断に申し込む

関連記事