WordPress の最適化

高トラフィックの WordPress を運営している場合でも、低コストの共有ホスティングサービスで小規模なブログを運営している場合でも、WordPress とサーバーが出来る限り効率よく動くよう最適化したほうがよいでしょう。この記事では WordPress の最適化に関する大まかな概要と推奨される具体的な手順を紹介しています。ただし、各分野の細かな技術的解説ではありません。

もし今すぐ修正が必要なら、キャッシュについてのセクションに直行して、最小限の努力で最大の結果を得てください。直ちにより徹底した最適化プロセスをすぐに始めたい場合は、「 WordPress のパフォーマンスを向上させるには」をご覧ください。

パフォーマンスに関するトピックの大まかな概要は、「パフォーマンスに影響を与えるもの」「パフォーマンスの測定方法」に含まれています。ここで説明している方法の多くは、WordPress Multisite (MU) でも当てはまります。

パフォーマンス的要因

WordPress のブログ (または、ウェブサイト) のパフォーマンスには、いくつかの要因が影響しているかもしれません。それらの要因には、これらに限定されるものではありませんが、ホスティング環境WordPress の構成ソフトウェアのバージョン、そしてグラフィックの数やそのサイズなどが含まれます。

この記事では、これらのパフォーマンスを低下させる要因のほとんどを取り上げています。

トップ ↑

ホスティング

利用できる最適化の方法は、ホスティング設定によって異なります。

トップ ↑

共有ホスティング

これは最も一般的なタイプのホスティングサービスです。サイトは、他の多くのサイトと一緒に、1つのサーバー上でホストされていることでしょう。ホスティングサービスの会社があなたに代わって Web サーバーを管理しますので、ほとんどのサーバーの設定などをコントロールできません。

このタイプのホスティングに最も関連する分野: キャッシュWordPress のパフォーマンスコンテンツの負荷軽減

トップ ↑

仮想ホスティングと専用サーバー

このホスティング方法では、ご自身でサーバーを管理することができます。サーバーは、専用のハードウェアである場合もあれば、同じ物理的ハードウェアを共有する多くの仮想サーバーの1つである場合もあります。

サーバーの設定を自分で管理できることが重要です。上記の部分 (キャッシュWordPress でのパフォーマンスコンテンツの負荷軽減) に加えて、ここで注目すべき重要な部分があります: サーバーの最適化 (英語)

トップ ↑

サーバー台数

非常に高いトラフィックを扱う場合には、複数のサーバーを使用する必要があります。このレベルの方であれば、上記のような解決方法をすべて採用されているかと思われます。

WordPress のデータベースは、設定ファイルを少し変更するだけで、簡単に別のサーバーに移すことができます。同様に、画像やその他の静的ファイルも別のサーバーに移すことができます(コンテンツの負荷軽減を参照)。

「 Amazon’s Elastic Load Balancer 」は、複数のサーバーにトラフィックを分散させることができますが、より高度な専門知識が必要です。複数のデータベースサーバーを使用している場合、HyperDB (英語) のクラスでは、標準の WPDB クラスに代わる drop-in を使用でき、複製された構造と分割された構造の両方で複数のデータベースサーバーを扱うことができます。

トップ ↑

ハードウェア性能

ハードウェアの性能は、サイトのパフォーマンスに大きく影響します。プロセッサの数や速度、利用可能なメモリとディスクの容量、ディスクの保存媒体などが大きな要因となります。ホスティングサービスは一般的に、より高いパフォーマンスを高価格で提供します。

トップ ↑

地理的距離

サーバーとサイトの訪問者との物理的な距離も、パフォーマンスに影響します。コンテンツデリバリーネットワーク (CDN) は、静的ファイル (画像など) をさまざまな地域にミラーリングすることで、すべてのサイト訪問者により最適なパフォーマンスを提供します。

トップ ↑

サーバーの負荷

サーバーにかかるトラフィックの量と、その負荷を処理するための設定方法も大きな影響を与えます。例えば、キャッシングによる解決策を使用していない場合、追加のページリクエストが入ってくるとパフォーマンスが低下し、Web サーバーやデータベースサーバーが停止することもあります。

適切に設定されていれば、ほとんどのホスティングサービスは非常に高いトラフィックに対応できます。また、トラフィックを他のサーバーにオフロードする (負荷を分散させる) ことで、サーバーの負荷を軽減することができます。

ログインブルートフォース攻撃、画像のホットリンク (他のサイトがトラフィックの高いページから画像ファイルにリンクすること)、DoS 攻撃などの不正なトラフィックもサーバーの負荷を高めます。これらの攻撃を判別し、阻止することが非常に重要です。

トップ ↑

ソフトウェアのバージョンと性能

最新のソフトウェアを使用していることを確認することも重要です。ソフトウェアのアップグレードにより、バグが修正されたり、パフォーマンスが向上することがよくあります。

Linux (または Windows)、Apache、MySQL/MariaDB、PHP の最新バージョンを使用しているかどうかも非常に重要です。

トップ ↑

WordPress の構成

使用中のテーマはサイトのパフォーマンスに大きな影響をもたらします。高速で軽量なテーマは、重いグラフィックを多用した非効率なテーマよりも、はるかに効率的です。

また、プラグインの数とそのパフォーマンスも、サイト全体のパフォーマンスに大きな影響を与えます。不要なプラグインを無効にしたり削除したりすることは、パフォーマンスを向上させるための重要な手段です。

そして、WordPress のアップグレードに対応することも重要です。

トップ ↑

グラフィックスのサイズ

投稿の画像を Web サイト用に最適化することで、時間と帯域幅を節約し、検索エンジンのランキングを上げることができます。

トップ ↑

パフォーマンス測定ツール

  • Webpagetest は、さまざまな場所、ブラウザ、接続速度から実際の Web サイトのパフォーマンスをテストするためのツールだ。
  • Google PageSpeed Insights は、WordPress サイトのパフォーマンスを測定し、改善方法に関する明確で具体的なフィードバックを得るためのツールだ。
  • ブラウザ (つまり Firefox や Chrome) に内蔵されている開発ツールには、パフォーマンス測定ツールがある。

トップ ↑

WordPress のパフォーマンスを向上させるには

トップ ↑

WordPress での Web サイトの最適化

トップ ↑

プラグインの最小化

WordPress のパフォーマンスを向上させるための初歩的で最も簡単な方法は、プラグインに着目することです。不要なプラグインは無効にして削除しましょう。サーバーのパフォーマンスを測定するために、プラグインを選んで無効にしてみてください。

プラグインの1つがサイトのパフォーマンスに大きく影響していますか ? プラグインのドキュメントを見るか、適切なプラグインサポートフォーラムでサポートを求めてください。

トップ ↑

コンテンツの最適化

  • 画像ファイル
    • 不要な画像はありませんか ? (例: 画像の一部をテキストに置き換えられませんか ?)
    • すべての画像ファイルが最適化されていることを確認してください。各画像の適切なフォーマット (JPG/PNG/GIF) と圧縮方法を選択する。
  • 合計のファイル数とファイルサイズ
    • サイトのページを表示するために必要な平均的なファイルの数を減らすことはできませんか ?
    • まだ HTTP1 を使用している場合は、複数のファイルを1つの最適化されたファイルにまとめることが推奨される。
    • CSS と JavaScript のファイルをミニファイ (最小化) する。 

なお、コンテンツのオフロード (負荷軽減) をして、テーマを最適化することもできます。

トップ ↑

ハードウェアのアップグレード

ホスティングサービスのレベルを上げるためにお金を払うことは非常に効果的です。メモリ (RAM) を増やしたり、SSD (Solid State Drive) を搭載したホスト (例: Digital Ocean) に変更したりすることが大きな違いになります。また、プロセッサの数や速度を増やすことも効果的です。可能ならば、HTTP と MySQL のように機能の異なるサービスを、複数のサーバーや VPS に分けてみてください。

トップ ↑

最適なソフトウェア

最新のオペレーティングシステム (Linux、Windows Server など)、最新の Web サーバ (Apache、IIS など)、データベース (MySQL サーバ、PHP など) で稼働していることを確認してください。

以下のような作業ができない場合は、ホスティングサービスに依頼してください。優れたホスティングサービスであれば、推奨要件に合わせてアカウントをアップグレードしたり、アップグレードしたサーバーに移動したりしてくれるでしょう。必要であれば、WordPress のマネージドホスティング (ホスティングと運用) サービスに移ることもできます。

DNS: WordPress を運用しているサーバーを DNS に使わないでください。Amazon の Route 53 やドメイン登録業者の無料サービスなど、DNS には商用サービスを利用してください。Amazon などのサービスを利用することで、メンテナンス時や緊急時にバックアップサーバーと切り替えることが非常に容易になります。また、ある程度のフォールトトレランス (障害耐性) も確保できます。DNS を外部のサーバーでホストすると、主要な Web サーバーの負荷が軽減されます。簡単な変更でも、トラフィックと CPU の負荷を軽減することができます。

Web サーバー: Web サーバーは、パフォーマンスを向上させるように設定することができます。Web サーバーのキャッシュ化をはじめ、訪問者1人あたりの負荷を減らすためにキャッシュのヘッダー設定まで、さまざまな方法があります。お使いの Web サーバーの最適化について検索してみてください (例えば、「apache optimization」で検索すると詳細を確認できます)。Web サーバーの中には、Apache Litespeed のように、有料の高速化バージョンがあるものもあります。また、ホスティングサービスとサイトの構成に基づいて、より高いパフォーマンスを出すために Apache をチューニングする方法もあります (例: Memcache)。

PHP: 様々な PHP アクセラレータがあり、PHP ファイルのパフォーマンスを大きく向上させることができます。これは、WordPress のインストールに限らず、すべての PHP ファイルに適用されます。PHP の最適化について検索することで、 APCOPcache といった詳細を確認してください。後述の W3 Total Cache プラグインは、Memcache、APC、その他の Opcode キャッシュに対応しています。

MySQL/MariaDB: MySQL や MariaDB の最適化は、それ自体が裏技です。WordPress はリクエストのたびに多くのクエリ (処理の要求) を繰り返すため、クエリキャッシュの設定を少し変更するだけで、WordPress のパフォーマンスに大きな効果をもたらします。最近では、MySQL のデフォルトのストレージエンジンとして InnoDB が採用されているので、それを使うようにしなければなりません。InnoDB は最適化して細かく調整することができます。”mysql optimization (mysql 最適化)”、”mysql innodb performance (mysql innodb パフォーマンス)”、”innodb optimization (innodb 最適化)” などで検索すると、より詳しい情報や例が見つかります。古い MyISAM テーブルを InnoDB に変換する方法については、「mysql convert myisam to innodb (mysql を myisam から innodb に変換)」と検索してください。

WordCamp San Francisco 2012 での Iliya Polihronov 氏によって発表された WordPress の最適化の素晴らしい例です。Iliya 氏は、特に WordPress.com のサーバー最適化を担当しています。

WordPress を利用しているサーバ上でメールサーバを動かすのはやめましょう。お問い合わせフォームには、無料の Mailgun を使用した Contact Form 7 のようなものを使ってください。

トップ ↑

キャッシュ

トップ ↑

キャッシュ プラグイン

W3 Total CacheWP Super Cache などのようなプラグインは簡単にインストールでき、WordPress での投稿やページを静的ファイルとしてキャッシュできます。この静的ファイルをユーザーに提供することで、サーバーの処理負荷を軽減することができます。静的なページであれば、数百倍のパフォーマンス向上が期待できます。

Varnish のようなシステムレベルのページキャッシュと組み合わせることが非常に強力です。投稿やページに多くの動的コンテンツがある場合、キャッシュの設定はより複雑になります。

W3 Total Cache プラグイン

W3 Total Cache (通称 W3TC) は、WordPress サイトで最適なユーザー体験を提供するために、Web 開発の権威の研究成果を結集させた、最新世代の WordPress のパフォーマンス用プラグインです。これらの詳細なガイドでは、以下のことがわかります。

W3TC のサーバー側とクライアント側のパフォーマンスを最適化し、ネイティブでは利用できない機能を追加できる特徴:

  • ページキャッシング: W3TC は、静的な HTML バージョンのページを作成することで、レスポンスにかかる時間の短縮に貢献し、Web サーバーが PHP を起動することなくページを提供できるようにする。コメントやページが編集されると、自動的にキャッシュが更新される。
  • ミニファイ化 (軽量化): HTML や CSS、JavaScript のファイルから不要な文字を削除し、キャッシュファイルで HTTP 圧縮する前に、それぞれを結合させる。
  • データベースのキャッシュ: データベースのクエリ (オブジェクト) もキャッシュされるため、多くのサイトで新しいページの生成にかかる時間を短縮することができる。これは、多くのコメントが寄せられるサイトで特に有効である。
  • ヘッダー: W3TC ではウェブブラウザでのファイルのキャッシュを制御するヘッダー (entity tag、 cache-control、 expires) を管理し、Web サーバーの負荷を軽減し、ユーザーが体験するパフォーマンスの向上を図る。
  • コンテンツデリバリーネットワーク (CDN): CDN を利用することで、お使いのホスティング先からリソースをオフロード (負荷軽減) させることができる。W3TC は、画像、CSS、JavaScript、その他の静的ファイルのリクエストを、高性能なサーバーのネットワークに移動させます。訪問者に最も近いサーバーが自動的にファイルのダウンロードに使用され、可能な限り最速のダウンロードが提供される。

W3TC は、1つの、または複数のサーバー、共用ホスティング、専用ホスティングのいずれの環境でも、WordPress の最適化に使用できます。

WP Super Cache プラグイン

WP Super Cache は、WordPress を静的にページキャッシュするプラグインです。比較的重いとされる PHP スクリプトを動かさずに、直接 Apache が提供する HTML ファイルを生成することで WordPress ブログの大幅な高速化を実現します。

WP Super Cache を使用すると、キャッシュされた HTML ページを、通常のグラフィックファイルと同じ速度で提供することができます。毎日の訪問者数に悩まされているサイトや、Digg.comSlashdot.org などの人気サイトに掲載されているサイトは、WP Super Cache の利用をご検討ください。

トップ ↑

サーバーサイドでのキャッシュ

「Web サーバーキャッシュ」は比較的複雑ですが、非常に高いトラフィックのサイトで使用されています。この記事では紹介しきれないほど、さまざまなオプションが用意されています。最もシンプルな解決策としてはサーバーのローカルにキャッシュすることがあり、そこから始まりますが、より複雑で複雑なシステムでは、WordPress アプリケーションが実際に実行されているウェブサーバーの「前」に複数のキャッシュサーバー (リバースプロキシサーバーとも) を使用する場合もあります。Alternative PHP Cache (APC) のようなオペコードキャッシュをサーバーに追加すると、PHP のパフォーマンスが何倍にも向上します。

Varnish Cache は、W3 Total Cache と連携して、事前に生成したページをメモリ上に保存し、Apache、PHP、WordPress スタックを実行しない迅速な提供を実現します。

これまでで説明しているように、WordPress のネイティブなコメントの代わりに Disqus のようなコメント用プラグインを使用すると、読者が WordPress にログインせずにキャッシュから提供できる回数を増やすことができ、より Varnish を活用できます。

トップ ↑

ブラウザキャッシュ

ブラウザのキャッシュ機能を使うと、1ページあたりのリクエスト数を減らすことで、サーバーの負荷を減らすことにつなげることができます。例えば、変更されることのないファイル (画像、CSS、JavaScript などの静的ファイル) に正しいヘッダを設定することで、ブラウザはこれらのファイルをユーザーのコンピューターにキャッシュします。この技術により、ブラウザは単にファイルをリクエストするのではなく、ファイルが変更されたかどうかを確認することもできます。その結果、ウェブサーバーは多くのリクエストに対して、要求されたファイルを送信して200でレスポンスするではなく、ファイルが変更されていないことを示す304レスポンスを送ることができます。

詳しくは、HTTP Cache-Control (特に max-age) と Expires ヘッダー、および Entity Tags (英語) をご参照ください。

W3 Total Cache は、ブラウザキャッシュと ETags を共にサポートしています。

トップ ↑

永続オブジェクトキャッシュ

永続オブジェクトキャッシュは、Web サーバーからデータベースへの移動時間を短縮することでページの読み込み時間を短縮する手助けをします。たとえば、サイトのオプションデータは各ページビューで利用可能でなければなりません。永続オブジェクトキャッシュがない場合、Web サーバーはページビューごとにデータベースからこれらのオプションを読み込む必要があります。このようなデータベースへの余分なアクセスは、Web サーバーの応答時間 (TTFB) を遅くし、トラフィック急増時にはデータベースサーバーをすぐに圧迫する可能性があります。

サイトで永続オブジェクトキャッシュを使用するには、ホスティングプロバイダーが特定のタイプのサーバー (キャッシュサーバー) を提供する必要があります。人気のキャッシュサーバー は RedisMemcached です。ホスティングプロバイダーに、永続オブジェクトキャッシュのインストールと設定を手伝ってくれるよう依頼すれば、次のような適切なプラグインをすすめてくれるはずです。

  • Memcached Object Cache – WordPress のオブジェクトキャッシュのための永続的なバックエンドを提供します。memcached サーバと PECL memcached 拡張が必要です。
  • Redis Object Cache – 様々な Redis クライアントで動作する、WordPress 用の一貫した Redis オブジェクトキャッシュバックエンドを提供します。Redis サーバーが必要です。

トップ ↑

参考文献

トップ ↑

コンテンツの負荷軽減

トップ ↑

コンテンツデリバリーネットワークの使用 (CDN)

CDN を利用することで、Web サイトの負荷を大幅に減らせます。画像、javascript、css、テーマファイルの検出と配信を CDN にオフロードさせることで、高速化されるだけでなく、WordPress で使用しているサーバーのアプリケーションスタックに大きな負荷をかけずに済みます。CDN は、上に書いた W3TC のような WordPress キャッシュ化グプラグインと一緒に使うと効果的です。

CloudFlare は、コンテンツデリバリーネットワークとして人気で、インターネットセキュリティのサービスも提供しています。プランは無料からあり、追加料金を払うことで追加の機能を利用できます。CloudFlare は費用固定の CDN であり、使用量ではなく機能によって課金されます。CloudFlare を利用すると、サイトのトラフィックを CloudFlare のネットワークを経由してから、元のホストに戻すことができます。

Amazon Cloudfront は、Amazon S3 サービスを利用した、静的ファイル用の CDN (コンテンツデリバリーネットワーク) 機能を提供します。CDN サービスとは、静的ファイルを世界中の多くの Web サーバーにキャッシュするサービスです。ユーザーがどこにいても、比較的高速なダウンロードパフォーマンスを提供します。お勧めは、S3 だけではなく、Cloudfront と S3 を併用することですが、コストは大きく変わりません。

MaxCDN は、Amazon Cloudfront のような、利用料金制のコンテンツデリバリーネットワーク (CDN) です。特徴的な点としては、ビデオ・オン・デマンドのサポートや、ファイルを自分でアップロードすることも可能ですが「ミラーリング」(アップロード不要) できることが挙げられます。

ほかには KeyCDN という CDN 提供者もあります。KeyCDN は、サポートページで段階的な WordPress 調整ガイドを提供しています。

KeyCDN と MaxCDN は、最も手頃な価格の CDN の選択肢に含まれます。これらのサービスは、巨大 CDN 提供者であるため、Amazon のような競合他社の価格に負けません。

トップ ↑

静的コンテンツ

静的ファイルを別のサーバーに移すことができます。例えば、静的な画像、JavaScript、CSS ファイルなどを別のサーバーに移します。これは、非常に高いパフォーマンスのシステム (Google、Flickr、YouTube など) では一般的な手法ですが、1台のサーバーでは困難な比較的小規模なサイトでも有効です。また、これらのコンテンツを別々のホスト名 (の機器) に移すことで、将来的に複数のサーバーを利用するための基礎を築くことができます。

Web サーバの中には、静的ファイルを提供するために最適化されているものがあり、Apache のような複雑な Web サーバよりもはるかに効率的に提供することができます (例: lighttpd)。

Amazon Simple Storage Service (S3) は、使用量に応じて課金される静的ファイル専用のホスティングサービスです。最小限のコストで利用できるため、共有サーバーやシングルサーバーでは処理できない限度に達している低トラフィックのサイトでは実用的かもしれません。

トップ ↑

複数のホスト名

静的ファイルを複数のホストネームにオフロード (分割) することで、ユーザーの利便性が向上します。ほとんどのブラウザは、1つのサーバーに対して同時に2つのリクエストしか行いません。つまり、16個のファイルを必要とするページの場合でも同時には2つのファイルだけがリクエストされることになります。これを4つのホスト (名) に分割すると、同時に8つのファイルが要求されます。これによって、ユーザーのページ読み込み時間を短縮することができますが、同時により多くのリクエストが発生するため、サーバーの負荷が高くなります。また、「パイプライン」と呼ばれる方法は、使いすぎるとユーザーとのインターネット接続を満杯にさせてしまうことがあります。

画像をオフロードすることは、最も簡単でシンプルな方法です。すべての画像ファイルを3つのホスト名 (assets1.yoursite.com、assets2.yoursite.com、assets3.yoursite.com など) に均等に分配することができます。トラフィックが増えてきたら、これらのホスト名を自分のサーバーに移すことができます。注意: ホスト名をランダムに設定することは避けてください。ブラウザのキャッシュに影響してトラフィックが増加したり、過剰な DNS ルックアップが発生してパフォーマンスが低下したりする可能性があります。

同じようにして、静的な JavaScript や CSS ファイルは、別のホスト名やサーバーにオフロードすることができます。

トップ ↑

フィード

フィードを外部のサービスにオフロードすることは非常に簡単です。Google FeedBurner のようなフィードトラッキングサービスは、これを自動的に行います。Feedburner のサーバーは、すべてのフィードトラフィックを処理し、サイトからのフィードを数分ごとに更新するだけです。これにより、トラフィックを大幅に節約することができます。

同様に、フィードを別のサーバー (feeds.yoursite.com など) にオフロードして、フィードの統計や広告を処理することもできます。

トップ ↑

参考文献

トップ ↑

圧縮

サーバー上のファイルやデータを圧縮して、読者のブラウザにページをより早く提供する方法はいくつかあります。前述の W3 Total Cache は、一般的な圧縮方法のほとんどに対応しています。

W3 Total Cache は、スタイルシートや javascript ファイルを圧縮・結合するミニファイ (軽量化) と Tidy をサポートしています。また、zlib などの出力圧縮にも対応していますので「出力の圧縮」をご覧ください。

また、メディアファイル (主に画像) を圧縮することも重要です。WP Smushit プラグインがその手助けとなります。

トップ ↑

データベースの調整

トップ ↑

データベースのクリーニング

WP Optimize プラグインを使えば、データベース内の余計なゴミを減らすことができます。

投稿やページのリビジョン保存数を最小限にするように WordPress に指示することもできます。

トップ ↑

サーバー増設

追加の専門知識が必要ですが、サーバーの追加はパフォーマンスを向上させる強力な手段となります。アマゾンのリレーショナルデータストア (RDS) を使用した、拡張性の高い AWS の実装で、より高価なものを構築するためのガイドである Architecting a Highly Scalable WordPress Site in AWS を読むことを強くお勧めします。

Amazon の Elastic Load Balancer を使って、複数の Web サーバーにトラフィックを分散させたり、HyperDB や Amazon の RDS を使って、よりスケーラブルなデータベースサーバーや複数のデータベースサーバーを動かすことができます。

トップ ↑

オートロード (自動読み込み) オプション

オートロードオプションとは、WordPress でページを読み込むたびに自動的に読み込まれるプラグインやテーマの設定項目です。プラグインやテーマごとに、どのオプションを自動読み込みさせるかを定義します。自動読み込みされるオプションが多すぎると、サイトの動作が遅くなることがあります。一般的に、サイトのオートロードオプションは 800kb 以下に抑えるようにすべきです。

デフォルトでは、オートロードされたオプションは wp_options テーブルに保存されます。オートロードは、このテーブル内のオプションごとにオフにすることができます。オートロードされたオプションを表示したり変更したりする手順については、ホスティングプロバイダーに確認してください。

永続オブジェクトキャッシュを使用すれば、オプションは (オートロードの有無にかかわらず) より速く、より効率的に読み込まれます。

トップ ↑

追加資料

トップ ↑

参考文献

トップ ↑

WordCamp パフォーマンス・プレゼンテーション

この記事は役に立ちましたか ? どうすればさらに改善できますか ?