質問 > フロント機能 > カテゴリー数が多いと商品一覧が遅い |
フロント機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
h_tanaka |
投稿日時: 2018/5/8 17:48
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1646 |
Re: カテゴリー数が多いと商品一覧が遅い 468様
ご提示の方法で試してみたところ、商品情報が1件も取得できなかったです。。 SELECT count(DISTINCT d0_.product_id) AS sclr0 FROM dtb_product d0_ INNER JOIN dtb_product_category d1_ ON d0_.product_id = d1_.product_id INNER JOIN dtb_category d2_ ON d1_.category_id = d2_.category_id AND (d2_.del_flg = 0) INNER JOIN dtb_product_class d3_ ON d0_.product_id = d3_.product_id AND (d3_.del_flg = 0) WHERE (d0_.status = 1 AND d1_.category_id IN (2)) AND (d0_.del_flg = 0) GROUP BY d0_.product_id, d0_.product_control_number, d0_.name, d0_.note, d0_.description_list, d0_.description_detail, d0_.search_word, d0_.free_area, d0_.no_cash_on_delivery, d0_.del_flg, d0_.create_date, d0_.update_date, d0_.creator_id, d0_.status
|
468 |
投稿日時: 2018/5/8 17:43
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: カテゴリー数が多いと商品一覧が遅い それだけのカテゴリー件数を登録した事が無かったので、初めてこの処理に気付きましたが、
src/Eccube/Repository/ProductRepository.phpの getQueryBuilderBySearchData()にて、 指定したカテゴリの子カテゴリを取得してDQLに渡す必要が無いのではないかと思います。 $Categories = $searchData['category_id']->getSelfAndDescendants(); の記述を $Categories = array($searchData['category_id']); で同じ検索結果を得られるのではないでしょうか? どのバージョンからかはっきりと思い出せないのですが、 商品編集画面でカテゴリを紐づけた時に、親カテゴリも全てdtb_product_categoryテーブルに保存するようになっていたと思います。
|
h_tanaka |
投稿日時: 2018/5/8 17:27
対応状況: 解決済
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1646 |
カテゴリー数が多いと商品一覧が遅い EC-CUBE3.0.16
現在、カテゴリーが4階層で、カテゴリー数が3209件登録されています。 この状態で次のように上位のカテゴリーを指定して商品一覧を表示すると、ページが表示されるまでに40秒ほどかかってしまいます。 https://example.com/products/list?category_id=2 デバッグモードで確認したところ、カテゴリーの取得クエリが約1000回も実行されていました。 ソースコードをデバッグして各ステップの処理時間を計測したところ、 src/Eccube/Controller/ProductController.php の paginate() で40秒ほどかかっていました。 おそらく、 src/Eccube/Repository/ProductRepository.php の getQueryBuilderBySearchData() において、
の箇所で再帰的にカテゴリーを取得しているためと思われます。 src/Eccube/Entity/Category.php
この箇所のパフォーマンスを改善したいのですが、解決方法わかりますでしょうか?
|
« 1 (2) |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |