EC-CUBE:商品件数が多い場合の商品一覧表示が遅い
以前から気になってはいたのですが、商品が1000件を超えるような状況に遭遇していなかったので気付かない振りをしてみていたのですが、大量な商品件数を扱う可能性が出てきたので調査してみました。
■ 調査した環境:
・Dell Latitude D430
・Core2 CPU
・2G MEM
3年前くらいのノートPCです。
・商品件数 2万件
ただし、1商品につき3カテゴリに紐付けているので dtb_product_categories は 6万件
(本当は10万件までデータ登録したかったんですが、時間がかかり過ぎて挫折・・・)
参考までに。

■ 調査内容
今回ですが商品一覧の表示が遅いということで、LC_Page_Products_List.php のクエリ発行箇所へLog出力を仕込み調査してみました。
調査対象クエリは以下の3箇所
・選択されたカテゴリ(下層も含む)の全商品件数を取得するクエリ
・商品一覧へ表示する商品情報を取得するクエリ
・商品一覧へ表示する商品の規格情報を取得するクエリ
Log出力の設定例
GC_Utils_Ex::gfPrintLog("getAllListCount START:" .microtime());
こんな感じでEC-CUBEのsite.logへ出力
■ 調査結果
ん〜これはサーバのスペックでどうにかなる問題ではないかな・・・。
・全商品件数取得
getAllListCount START:0.72998600 1278918749
getAllListCount END :0.50113800 1278918758
約8.8秒・・・・
・商品情報取得
getListPageData START:0.50419600 1278918758
getListPageData END :0.37605900 1278918764
約5.8秒・・・・
・商品規格情報取得
getListPageKikauData START:0.41795700 1278918764
getListPageKikauData END :0.27991500 1278918766
約1.8秒・・・・
※ get○○ はLog出力の際の識別名です^^; (Function や クエリ名 ではありません・・)
■ クエリ改修
まだまとめきれていないのでクエリの改修内容については載せていませんが、クエリを改修することで以下まで性能を改善させることに成功しました!
・全商品件数取得
無駄なカラム取得排除とSELECTで取得したArrayデータの件数をカウントする方式から Select Count へ変更。
getAllListCount START:0.25121500 1278918835
getAllListCount END :0.67420500 1278918835
約0.4秒
・商品情報取得
全件の商品情報を取得した後に1ページへ表示する商品情報を抜き出していたのを、1ページへ表示する商品情報を特定した後付加情報を取得するように変更。
getListPageData START:0.67723600 1278918835
getListPageData END :0.93837800 1278918836
約1.3秒
・商品規格情報取得
ここも全件の商品規格情報を取得した後に1ページへ表示する商品規格情報を抜き出していたのを、1ページへ表示する商品情報を特定した後、規格情報を取得するように変更。
getListPageKikauData START:0.97085200 1278918836
getListPageKikauData END :0.00583200 1278918837
約0.1秒
ちなみに、チョットスペックのよいデスクトップPCで測定したら 1秒切ってました><b
-------- 会社の宣伝です --------
短期間でサイトを立ち上げたい!
拡張性もほしいし、セキュリティもちゃんと考慮したい。
などWebに絡む内容はワンストップで実現します。
(インフラ・デザイン・静的html・動的php などなど)
PC・携帯に対応した EC・CMS、iPhone や Android アプリも開発可能です。
そんな方は是非、
株式会社ランチェスターからお問い合わせください。
こそっと
採用 もやってるよ〜
Comment
Page Top