Hatena::ブログ(Diary)

EC-CUBEのカスタマイズならクロスキューブ!サイト制作メモ このページをアンテナに追加 RSSフィード Twitter

2017-02-22

約200%早くなった! EC-CUBE3のパフォ

約200%早くなった! EC-CUBE3のパフォーマンスチューニング - キャッシュの設定方法

EC-CUBE Ver.3.0.11以降では、設定ファイルを追加する事で各種キャッシュを利用できる様になり、表示速度の向上ができます。

今回、EC-CUBEの開発コミュニティーで、ヘテムルでEC-CUBE3が遅いと書き込みがあったのでご紹介します。

EC-CUBE3 トップページ チューニング後のパフォーマンス

結論から言うと約200%早くなった

いきなりベンチ結果です。

Apache Bench : Request per second

->Faster

6.97
3.21

Chrome Developer Tools : Waiting (TTFB)

<-Faster

487ms
1,250ms

チューニング 標準

環境は、

です。
Apache Benchは-c35 -n35でトップページの表示の結果です。

http://eccube3.xross-cube.net/


EC-CUBE Ver.3.0.11で追加されたDoctrine CacheHTTP Cacheとは?

EC-CUBE3を開発するにあたり、コミッターで色々な議論がされました。その時に僕はパフォーマンス向上とデータ構造の柔軟性を強く訴え、concrete5を参考にしたEAVのサンプルコード*1とかも出していたのですが、「いきなりテーブル構造を大幅に変えるのはちょっと...」とか「EAVはちょっと...」という事でお蔵入りになってしまいました。

とりあえず2系の基本機能を新しいアーキテクチャ実装するという方針で、Ver.3.0.0は開発され、リリースされましたが、リリース直後から「もっさりしてる」「重い」という意見が多く、高速化作業が進んでいました。

その後3.0.11でパフォーマンス改善のために導入されたのがこのDoctrine CacheHTTP Cacheになります。

Doctrine Cacheとは?

EC-CUBE3ではデータベース等のアクセスDoctrineという実績豊富ライブラリを利用しています。開発をしやすくしてくれる便利ライブラリですが、こいつが重い!

そこでデータベースからのレスポンスやデータ構造の設定などをキャッシュしておく仕組みがこのDoctrine Cacheです。

HTTP Cacheとは?

EC-CUBE3ではフレームワークとしてSilexを利用しています。

Silexでは他のsymfony系のフレームワーク同様に、symfonyコンポーネントを元にしており、symfonyの多くの機能を利用できます。

このHTTP Cacheはそんなsymfony機能ひとつで、いわゆるリバースプロキシです。
プログラムの実行結果としてのWebページをキャッシュしておいて、コントローラに処理が渡る前にキャッシュからレスポンスを返します。

単純なリバースプロキシであればPHP実装されたこのHTTP Cacheよりも、Nginxリバースプロキシやfast-cgiキャッシュの方が高速に動作しますが、EC-CUBEで構築するネットショップではログインボックスやカート画面など、単純なリバースプロキシでは困る事が多々あります。

このHTTP Cacheの素晴らしい点は、EC-CUBEのブロック単位キャッシュするしないの設定が可能な事です。これにより常に動的に動作して欲しいブロックや画面はHTTP Cache無効にする事ができます。

キャッシュの設定方法

さて、では早速Doctrine CacheHTTP Cacheを設定してみましょう。

これらの設定にはYAML形式設定ファイルを利用します。*2

設定ファイルは、 /app/config/eccube 配下に、

  • doctrine_cache.yml
  • http_cache.yml

という名前で作成します。

これらのファイルの雛形が、/src/Resource/config 内にあるので、これをコピーしてきて作ると楽チンです。

では、次にそれぞれの設定ファイルの中身と設定項目です。

Doctrine Cache

Doctrine Cache設定ファイル、doctrine_cache.ymlでは以下の項目が設定できます。

設定はキャッシュドライバ指定するとこから始まります。
標準ではaray(PHP配列)となっていますが、filesystemapcredisxcachememcachedmemcache、が利用できます。

APCかAPCuが入っているなら、apcで良いと思います。OSサーバ環境によってはfilesystemが速かったりするので、試してみてください。

apc,array以外の場合は、pathやhostなどキャッシュストアにアクセスするための情報が必要です。

以下が今回僕が設定したファイルの内容です。

doctrine_cache:
  metadata_cache:
    driver: apc
    path:
    host:
    port:
    password:
  query_cache:
    driver: apc
    path:
    host:
    port:
    password:
  result_cache:
    driver: apc
    path:
    host:
    port:
    password:
    lifetime: 3600
    clear_cache: true
  hydration_cache:
    driver: apc
    path:
    host:
    port:
    password:
HTTP Cache

HTTP Cache設定ファイル、http_cache.ymlでは以下の項目が設定できます。

以下が今回設定した内容です。

http_cache:
    enabled: true
    age: 10
    route:
        - homepage
        - product_list
        - block_category
        - block_news
        - block_search_product
        - block_garally
        - block_free
        - block_new_product
        - block_footer
        - block_logo
        - help_about
        - help_guide
        - help_privacy
        - help_tradelaw
        - help_agreement

詳しくは、EC-CUBE公式のドキュメントサイトにも記述がありますので、確認してください。

さらに高速化するためには

実はEC-CUBE3でもっとも処理に時間がかかっているのは、テンプレートエンジンのTwigの処理です。

HTTP Cacheを利用していれば、基本的にTwigまで処理が回らずにページは表示されるのですが、キャッシュしてしまうと都合の良くないブロック(ログインブロックなど)アクセスの度に処理が走ります。
なので、このTwigのキャッシュI/Oを速くすると速度向上が望めます。

また、PHP7は非常に高速なので、PHP7にする事でもパフォーマンス改善が望めます。

それでもまだダメなら、

となり、最後はもう、サーバー数の力に頼る事になります。

使っていないプラグインサーバからファイルを消そう!

実はEC-CUBE3のプラグインは、利用していなくてもサーバにアップしてるだけで処理を遅くします。

使っていないプラグイン無効にするのはもちろん、サーバプラグインディレクトリからも消しておきましょう。

クロスキューブではEC-CUBE3のバージョンアップチューニングを承っております!

最後に宣伝ですw

株式会社クロスキューブではインフラからフロントエンドまで、EC-CUBE3のパフォーマンス改善チューニングを行っています。

EC-CUBE3のチューニングには、一般的サーバネットワークミドルウェア知識スキルだけでなく、PHPプログラミングEC-CUBE知識スキルが必要になり、必要とされる知識スキルが多岐にわたります。
株式会社クロスキューブではそういった様々な角度から状況を検証し、予算に合わせた最も費用対効果の高いチューニングサービスをご提案しています。

ネットショップの表示速度等のパフォーマンスは、如実にECサイトの売り上げに影響を与えますので、「EC-CUBEが重いな〜」と思ったらぜひお問い合わせください。

EC-CUBEチューニングについてのお問い合わせはこちら≫

EC-CUBE3対応!デザインカスタマイズガイドブック

新しくなったEC-CUBE3に対応したデザインカスタマイズブック。2017年1月現在 EC-CUBE3のデザインカスタマイズについて解説されている書籍はこれだけです。とりあえず買いましょう!

*1商品情報が柔軟なMagentoはEAVを採用しています。カオス

*2YAMLパースもクッソ遅いので、EC-CUBE3ではPHPのarray形式での設定も可能です。さらに速くしたい方はこちらもどうぞ

*3:実はこれが最もコストパフォーマンスが良かったりします

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/xross-cube/20170222/p1
Connection: close