サイトが重くなったという理由で高速化のご相談をいただくことがよくあります。
EC-CUBE3系、4系でページの表示速度、管理画面の表示速度が遅くなったと感じる場合、原因はDoctrineによるメモリ消費かデータベースへの問い合わせ過多であることが多いです。
EC-CUBE3系、4系ではDoctrineというORM(=データベースとプログラムの仲介役のイメージ)を使用しており、Doctrineは非常にメジャーなライブラリで大変高機能であるものの、あまり効率性にすぐれているとは言いにくい面があります。
ただDoctrineが悪いわけではなく、一括で大量のデータを取得してしまっているなど、Doctrineの使い方が悪いといったケースがほとんどです。
サイト立ち上げ時はデータが少ないので気付かないのですが、データ量が増えるとプログラムの作り方によっては急激にサイトが重くなってきます。
Doctineは大量のメモリを食う
Dctrineの仕組みによって商品・会員・注文といったデータがProductやCustomer、Orderといったオブジェクトにマッピングされていますが、データ量が多くなればなるほど大量のメモリを消費します。
メモリを一気に消費しないようなプログラムの書き方をすることで改善することができます。
Doctineは大量のクエリを発行する
Doctrineのおかげで、会員と注文データを紐づけることが簡単です。ManyToOneやOneToManyといったアノテーションでどんどん機能の開発を進めることができます。
しかしながら、何も考えないでデータの取得方法を指定しないで開発すると、非常にクエリ効率が悪いプログラムを作ってしまっていることがあります。
1000商品の情報を取得するために、少しDoctrineの使い方を工夫すれば1回のSQLで済むものを、1000回SQLを実行しているような例をほぼ全てのサイトで目にしています。
改善方法
見た目が同じだとしても、内部のプログラムの作り方次第でサイトのパフォーマンスは大きく変わります。
もっと高価なスペックの高いサーバーにしないといけないのでは?と考える必要はほとんどありません。特にEC-CUBEでは、プログラムの書き方の改善で速度が大幅に改善可能です。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。