Wordpress の表示速度を驚くほど高速化させる方法!〜Redis連携

WordPress の表示速度を驚くほど高速化させる方法!〜Redis連携

WordPress の表示速度を驚くほど高速化させる方法!〜Redis連携

WordPress の表示速度を驚くほど高速化させる方法!〜Redis連携 への1件のコメント

WordPressサイトを運用していて、表示速度が遅いなぁと感じたことありませんか?高速化のためのプラグインであるとか、VPSなどでホスティングされている場合はApacheやNginxのチューニングを行ったりしますよね。今回は追加でプラグインを入れたり、チューニングをしたりせずに、ちょっと別角度からWordpressサイトを超!!高速化させる方法をお伝えします。

といっても、私がすごいわけではなく、以下のサイトのjeedoさんが、Greatな仕事をしてくださったおかげです。みなさんこの記事で、高速化に成功したら、是非下記サイトにコメント入れてみてください!

jeedo.net — Al-Jedidiah Aquino

高速化プラグインを作成しちゃいました!(RedisなしでOK)

この記事は RedisというインメモリーデーターベースをWordpressをホストしているサイトで利用できることが前提である。が・・・ WordPressの機能を提供しているサービスでRedisを自由に使わせてくれるところなんて、そうそう無いだろうと・・。じゃぁRedisがなくても高速化できたら、きっと役に立つシーンもあるだろうなということで、Wordpress用プラグイン作っちゃいました。
よろしかったら、こちらを参照ください。

「Wordpressのパフォーマンスを10倍から1,000倍 速くできるかもなプラグインを作った 〜 Text Cache Controller plugin」

Redisを使った高速化をしようという方は、引き続き、以下をご覧ください。

テクニックの中身

Apacheをチューニングしたり、いくら高速なマシンにしても、Wordpressサイトの表示速度を最終的に決めるのは、Mysql+PHPによる動的ページ生成の速度にかかっている。つまり、マシンが高速でメモリもふんだんに積んでいて、チューニングもそこそこできていれば、それなりに良いレスポンスは期待できる。だが、あくまでそれなりに、なのである。Wordpressは非常に優秀なOSSであるが、ページを表示するためにMysqlデータベースへアクセスし、いろいろな情報を拾い集め、PHPのソースがそこそこふんだんに走り、その後で綺麗に整形されたページが、あなたのサイト訪問者に提供される。

動的にページ生成するのだから、それなりに時間がかかるのは仕方がない。じゃぁこの部分をキャッシュしてみようって試みが、いくつかの有名なWPプラグインで提供されていたり、ApacheやNginxの設定をあれこれいじりまわして、キャッシュを有効にする方法である。私が実際に試したわけではなく、色んなサイトを軽く閲覧した感じでは、あれこれ苦労した結果、パフォーマンス改善されたパーセンテージは10〜20%とのこと。そんなことないよっていう方もいらっしゃるかもしれませんが、そのあたりは詳しく調査したわけでもなく、実際に試したわけでもないのでご勘弁ください。

と、前置きはこのぐらいにして、じゃぁ今回紹介するテクニックはどうすごいのかというと、インメモリデータベースであるRedisを使ってWordpressのページをキャッシングしちゃおうよ!ってところである。そもそもWordpressを運用されている方は、Wordpress導入手順に従って、なんとかかんとかサイトを導入した方も多いと思われるので、データベース Mysqlがなんであるとか、Wordpressがそのデータベースを使ってどう動いているとか、そんなところまで突っ込んで研究している方はほとんどいないと思われる。

その上Redis?インメモリデータベース??などと言われてもさっぱり意味がわからないというのが正直なところであろう。
でも、ご心配なく! そんなことはさっぱりわからなくても、以下の簡単な手順をふむだけで、あなたのWordpressサイトが劇的に高速化されます!(なんか、どっかの宣伝マンみたいだな・・・笑)

Redisインストール

Redhat系Linuxの場合(CentOS等)

Remiとか追加のyumソースがないと以下では多分エラーになります。

上記にもし失敗したら、CentOS 6.xの場合、FedoraプロジェクトからRPMをダウンロードしてインストール可能です。
x86じゃないよ!、64bit PCじゃないよという場合は、
http://dl.fedoraproject.org/pub/epel/6/へアクセス!

サービスの起動、自動起動設定

CentOS6でもない場合は、以下のサイトにアクセスして、自分のOSにマッチしそうなRPMをダウンロードしてインストールしてください。
http://www.rpmfind.net/linux/rpm2html/search.php?query=redis

Debian系Linuxの場合(debian/Ubuntu/Mint/LMDE等)

サービスの起動、自動起動設定

jeedoさんのサイトから、高速化PHPファイルダウンロード

jeedoさんのサイト

以下の2ファイルをダウンロード
Redis連携PHPファイル ダウンロード(PHPファイルへの直リンクなので、右クリック、名前をつけて保存でOKです。)

WordPress Redis連携高速化PHPファイル ダウンロード

Zipファイル展開、Wordpress運用サイトへファイル転送

後者のファイルはZip形式なので、手元で解凍してください。

wp-index-redis.php という名前の1ファイルが展開されます。

ダウンロードした2ファイル、つまり、 predis.phpと wp-index-redis.php をWordpressをホストしているサーバーへアップロードしてください。

いよいよインストール

補足)debian系OSの場合は、chown apacheではなく、おそらく chown www-data です。

Apache or Nginx再起動(必要ないかもです・・)

以上です。

初回アクセスは、普段と変わらないと思いますが、2回目から劇的に高速化されます。Wordpressに管理者権限でログインしていると キャッシュが有効にならないようです。(その方がページ更新した時のチェックなどを考えるとありがたい。)

WordPressにログインしていない別のブラウザーで試してみるか、プライベートブラウズモードで、自分のサイトの高速化度合いを体感してみてください!!

jeedoさんの注意書き、+ なんちゃって日本語訳

jeedoさんの注意書きは、以下となっています。

  • Pages are not cached when you are logged in.
  • Cached pages do not expire not unless explicitly deleted or reset (deleting the entire domain cache).
  • Appending a ?c=y (e.g. domain.com/?c=y) to a url deletes the entire cache of the domain. Only works when you are logged in.
  • Appending a ?r=y to a url deletes the cache of that url.
  • Refreshing (F5) a page deletes the cache of that page.
  • Script still works even if allow_fopen is disabled in php.
  • Submitting a comment deletes the cache of that page.
  • Includes a debug mode, stats are displayed at the bottom most part after . Won’t be deleted by CloudFlare.

意訳(適当解釈でごめんなさい)

  • ログイン中はキャッシュされないよ
  • ページキャッシュは明示的に消すかリセットかけるまで残りつづけるよ
  • ドメインに対して、以下のリクエストを投げると、そのドメインに対する全キャッシュをクリアするよ。例えば、あなたのWordpressサイトが http://www.myblog.com だったとすると、ブラウザーから http://www.myblog.com/?c=y としたら、キャッシュを全部消すことができるよ。ってことです。ただし、あなたがWordpressサイトにログインしている時に限りこの機能は有効。
  • 同じように (おそらくページに対して) ?r=y としたら、そのページのキャッシュをクリアするよ。つまりは、http://www.myblog.com/?p=130&r=y とすれば、ページキャッシュを消せるよってことだと思う。(p=xxxの前に?がつけてあるので、2個めの引数は &にするのが普通だが、ソースを追っかけた感じでは・・・・ http://www.myblog.com/?p=130?r=y が正解みたいです。)
  • F5キーでリフレッシュをかけたらキャッシュを消します。
  • PHPの設定で allow_fopenが disabled でも、Scriptはちゃんと機能します。
  • コメントが投稿された際にはキャッシュはクリアされます。
  • デバッグモードの時は、ページの最下部 よりあとになんか出るけど、消さないでね。ってことかな、ごめんなさい、ここ、訳間違ってるかも・・・
  • これはjeedoさんの説明にはありませんが、注意点。新規に投稿を追加した場合、新規投稿ページ自体は正しく表示されますが、過去にアップしたページは更新されません。で、どんな不具合が予想されるかというと、過去の投稿にアクセスした人は、ページのサイドにある、最近の投稿一覧なども見てくださると思いますが、ここには最新の投稿は現れません。なぜかというと、過去のキャッシュが表示されているからです。なので、投稿を新規に追加した場合は、上記の ?c=y と一度はしてやった方が良いと思います。

以上

追記:注意!

てっきりApacheでも動くもんだろうと思っていましたが、jeedoさんのサイトでは、Nginx+php-fpm+redis と記載されていますね。Nginx専用なのかもしれません。とにかくNginxではご機嫌に動作します。Apacheや php-fpmの必要性については、ちょっとソース追っかけて調べてみます。

追記:朗報!

ソースを追いかけてみました。実はjeedoさんがやってる内容って、簡単だった(笑)。まぁそんなことはさておき、Apacheでも問題なく動くと思います。php-fpmも特に関係なしだと思われます。やっている内容は 飛んできたドメインとリクエスト部分を分離し、Redisのハッシュに対象URIが含まれているか、現在Wordpressにログイン中であるか否か、キャッシュクリア命令がURIに含まれているか否か、などを判定して、キャッシュを返すか、通常通りWordpress側で動的ページ生成をさせるかを判定しているようです。(うまく行かない場合はお知らせください。もしかしたら何らかの対応ができるかも・・・)


About the author:

Tags:

Related Posts

1 Comment

  1. 返信 /

    […] Redisを使ってみたと言いますが実際にはこちらのサイトの言う通りにインストールしてそのままファイルを入れただけなんですよね WordPress の表示速度を驚くほど高速化させる方法!〜Redis連携 […]

  2. xxx  - 2017年5月24日 - 8:50 PM
    返信 /

    I јust couldn’t dеρart your website before suggesting tɦat
    I extrᥱmelу enjoyed the standarԀ info an іndiνidual provide to
    your guests? Is going to be back regularly in ߋrder to investigate cross-check
    new posts

Leave a comment

Back to Top