WordPressをPHP 7.0にバージョンアップしたら2倍高速化しました✌✌

2016/11/05

こんばんは、WordPress高速化ネタが大好きなあんそくです。

WordPressを使って運営しているGeeklesを高速化させるために、PHPのバージョンアップを行いました。

PHP7.0は25%から70%の性能改善が図られているそうで、WordPress高速化に効果があると言われていますが、確かに効果を得ることができました。

Geeklesの環境

PHP 7.0へバージョンアップしたGeeklesの環境はこんな感じです。

  • さくらVPS
  • CentOS 6.6
  • WordPress 4.6.1
  • Nginx 1.11.4
  • MySQL
  • PHP 5.6.16

Nginx -> php-fpmで動いています。ページキャッシュはプラグインを使わずにFastCGIキャッシュを使用、ZendOpcacheとAPCuはEnable。

PHP 5.6からPHP 7.0へのバージョンアップ手順

PHP 7.0がリリースされたのは2015年12月なので、すでにPHP 7.1なるものも登場していますが、「THIS IS A DEVELOPMENT PREVIEW – DO NOT USE IT IN PRODUCTION!」と書かれているので、素直に7.0を使いましょう。

バージョンアップは、こちらのサイトを参考に行いました。

CentOS7でphp5.6からphp7にバージョンアップする方法を試してみた結果。

詳細にコマンドを書くのは面倒くさいので、ざっくり流れだけ書いておくとこんな感じ。

  1. 現在のPHPで使っているパッケージを確認
  2. PHP7が含まれているremiレポジトリを追加
  3. yum infoでphp70を確認して、必要なパッケージがあるか確認
  4. Nginx、php-fpm、MySQLを停止
  5. yum removeで既存のPHPとパッケージを削除
  6. yum installでPHP7.0と必要なパッケージをインストール
  7. php -vでバージョンアップされていることを確認
  8. php-fpmのconfファイルをリネーム&設定
  9. php.iniファイルを設定し直す
  10. Nginx、php-fpm、MySQLを起動

ZendOpcacheとAPCuはPHP 5.6時代から使っているので、設定などはそのまま。

パフォーマンス監視サービスのNew Relicを使っている場合、このままだと、

PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/newrelic.so’ – /usr/lib64/php/modules/newrelic.so: undefined symbol: zval_used_for_init in Unknown on line 0

こんなエラーが出てNginxが起動しなくなってしまうので、最新のrpmを突っ込んで、newrelic-install installでインストールし直します。

phpMyAdminはphp70の中に入っていないので、バージョンアップ時に依存関係で削除されてしまいます。必要なら別途remi-testレポジトリからインストールします。

PHP 7.0へのバージョンアップした結果

約30分でバージョンアップは完了。Nginxやphp-fpmが落ちるのでダウンタイムが発生してしまいますが、ダウンタイムは5~10分ほどでしょうか。安全にバージョンアップするなら別のサーバー立てて、そっちに移行するなりすればいいと思いますが、面倒くさいので……。

PHP 5.6でのGTmetrix結果

161105c

PHP 7.0でのGTmetrix結果

161105d

ページの速度を計測することができるGTmetrixでバージョンアップ前後を計測したところ、結構ばらつきは出ますが、約2秒ほど早くなっていました。

New Relic

161105b

New Relicで確認すると、PHPの速度が向上し約400~500ms→約200msと半分に!!結構早くなりました!!!

まぁ、実際にブラウザでサイトを見てみると、「確かに気持ち早くなったかも?」というくらいですけど。

悪影響はでなかった

PHP 5.X系と一部構文が変わるため、PHP 7.0にバージョンアップすることで、WordPressのテンプレートがうまく動かなくなったり、プラグインが動かなくなったりする可能性があるのですが、Geeklesでは特にそういった問題は起きませんでした。

特にアップデートが止まっている古いプラグインは動かないかも?と、覚悟はしてたのですが、そんなこともなく肩透かし感。

誰かの参考になるかもなので、Geeklesで使っているプラグインを掲載しておきます。

  • 001 Prime Strategy Translate Accelerator
  • AddQuicktag
  • Advanced Custom Fields
  • Akismet
  • Autoptimize
  • BackWPup
  • BJ Lazy Load
  • Category Order and Taxonomy Terms Order
  • Contact Form 7
  • Custom Post Types Relationships (CPTR)
  • EWWW Image Optimizer
  • Feedly Insight
  • File Renaming on upload
  • Greg’s Threaded Comment Numbering
  • NextScripts: Social Networks Auto-Poster
  • Nginx Cache Controller
  • plugin load filter
  • Post Thumbnail Editor
  • PubSubHubbub
  • SB-RSS_feed-plus
  • Simple Local Avatars
  • Table of Contents Plus
  • User Role Editor
  • WP Multibyte Patch
  • WP No Category Base
  • WP-Mail-SMTP
  • WP-Polls
  • Yet Another Related Posts Plugin
  • Yoast SEO
  • Multi Device Switcher
  • Redirection

私の環境ではこれらのプラグインはちゃんと動いているように見えます。しかし、高速化を考えるなら、もう少しプラグインを減らさないと……。

PHP 7.0おすすめ!

バージョンアップにかかる時間は30分程度で、ダウンタイムも10分以下、yumで簡単にインストールできるし、確かに早くなったし、特に悪い影響は起きなかったので、WordPressを少しでも高速化したいと考えている人にはおすすめできます。

Geeklesは他にも色々やってWordPress高速化を図っているので、よろしくお願いしますー。