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

WordPress の表示速度を驚くほど高速化させる方法!〜Redis連携
2014年3月23日 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ソースがないと以下では多分エラーになります。
[bash]
$ sudo yum install redis
[/bash]
上記にもし失敗したら、CentOS 6.xの場合、FedoraプロジェクトからRPMをダウンロードしてインストール可能です。
x86じゃないよ!、64bit PCじゃないよという場合は、
http://dl.fedoraproject.org/pub/epel/6/へアクセス!
[bash]
$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/redis-2.4.10-1.el6.x86_64.rpm
$ sudo rpm -ivh redis-2.4.10-1.el6.x86_64.rpm
[/bash]
サービスの起動、自動起動設定
[bash]
$ sudo service redis start
$ sudo chkconfig –level 35 redis on
[/bash]
CentOS6でもない場合は、以下のサイトにアクセスして、自分のOSにマッチしそうなRPMをダウンロードしてインストールしてください。
http://www.rpmfind.net/linux/rpm2html/search.php?query=redis
Debian系Linuxの場合(debian/Ubuntu/Mint/LMDE等)
[bash]
$ sudo apt-get install redis-server sysv-rc-conf
[/bash]
サービスの起動、自動起動設定
[bash]
$ sudo service redis-server restart
$ sudo sysv-rc-conf redis-server on
[/bash]
jeedoさんのサイトから、高速化PHPファイルダウンロード
以下の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 です。
[bash]
*** WordPressのルートフォルダへ移動
$ cd /var/www/wordpress
*** 高速化ファイルをWordpressのルートフォルダへ移動
$ sudo mv /home/xxxxx/Downloads/wp-index-redis.php .
$ sudo mv /home/xxxxx/Downloads/predis.php .
*** 権限設定を調整
$ sudo chown apache:apache wp-index-redis.php
$ sudo chown apache:apache predis.php
$ sudo chmod 644 wp-index-redis.php
$ sudo chmod 644 predis.php
*** WordPressの index.phpを to_index.phpにリネーム
$ sudo mv index.php to_index.php
*** WordPress Redis連携高速化PHPを wp-index-redis.phpを index.phpにリネーム
$ sudo mv wp-index-redis.php index.php
[/bash]
Apache or Nginx再起動(必要ないかもです・・)
[bash]
$ sudo service nginx restart
or
$ sudo service httpd restart
[/bash]
以上です。
初回アクセスは、普段と変わらないと思いますが、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