EC-CUBE3でhttpキャッシュを有効にする方法

EC-CUBE Advent Calendar 2021 18日目の記事です。

元々ec-cube.coについて書くつもりでしたが、諸事情により別記事を掲載します。

EC-CUBE3では、パフォーマンスを上げるためにhttpキャッシュという機能が用意されています。

doc.ec-cube.net

4系にはこちらの機能はありませんのでご注意ください。

こちらを有効にする事でレスポンスが良くなるのですが、httpキャッシュを有効にすると正常に会員登録がされないという不具合があります。それを回避するために以下の修正を行なってください。

index.phpの修正

  • html/index.php
if ($app['config']['http_cache']['enabled']) {
    $app['http_cache']->run();
} else {
    $app->run();
}

と記載されている箇所を、

$url = parse_url($_SERVER['REQUEST_URI']);
$cacheRoute = $app['config']['http_cache']['route'];

if (in_array($url['path'], $cacheRoute) === true) {
    $app['http_cache']->run();
} else {
    $app->run();
}

に変更してください。

Application.phpの修正

  • src/Eccube/Application.php
// フロント画面
$cacheRoute = $app['config']['http_cache']['route'];

if (in_array($route, $cacheRoute) === true) {

と記載されている箇所を

// フロント画面
$cacheRoute = $app['config']['http_cache']['route'];

$path = $request->getPathInfo();
if (in_array($path, $cacheRoute) === true) {

に変更してください。

http_cache.yml.distの修正

route名で記載されていた内容を実際のURLに変更します。

  • src/Eccube/Resource/config/http_cache.yml.dist
http_cache:
    enabled: true
    age: 10
    # フロントでキャッシュを適用させる画面のrouteを設定
    route:
        - /
        - /products/list
        - /block/category
        - /block/news
        - /block/search_product
        - /help/about
        - /help/guide
        - /help/privacy
        - /help/tradelaw
        - /help/agreement

こちらは、app/config/eccube/http_cache.ymlに保存しても問題ありません。

以上の修正でhttpキャッシュが正常に動作するようになります。ただし、ドキュメントにも記載があるように

  • Tokenを利用している画面にはhttpキャッシュを適用させない

という事は必ずお守りください。 もしパフォーマンスにお悩みの方はhttpキャッシュをお試しください。

ec-cube.coについての記事が気になる方はコメントしてください。個別に対応させていただきます。