Όταν η επιχείρησή μας εξετάζει τον κώδικα πηγής Zencart/oscommerce, ανακαλύψατε απροσδόκητα.Στη διαταγή όπως κατωτέρω για να κατορθωθεί κάτω από το χρήστη όρου, παρακαλώ να δει με κάθε τρόπο.
Προϊόντα υπάρχει μια υπο- κατηγορία όπου το αποτέλεσμα υπερβαίνει περίπου 300 σημεία.(Δεν είναι ολόκληρο αποτέλεσμα προϊόντων)
Η τιμή προϊόντων εκείνοι της πώλησης σε μια πρόσθετη τιμή τιμών είναι ένα μισό ή περισσότερος, ή όλα είναι πώληση σε μια πρόσθετη τιμή τιμών.
Μέχρι τη λέξη κλειδί το αποτέλεσμα αναζήτησης είναι με την αναζήτηση, υπάρχει το συναίσθημα που» είναι συνημμένο» τυχαία.
・カテゴリBOXからカテゴリーをクリックし商品一覧を表示する際に”もたつく”感じがある。
・商品のソート(昇順、降順)をするのに時間がかかる。
もし、このような症状が少しでもあるようでしたら、Mysql、及びZencart/oscommerceのソースコードをチューニングすることで驚くほどブラウジングに 対するレスポンスがアップします。特に商品点数が1000点~を超えるようなサイトを運営されているお客様にはかなりの期待が持てます。
なぜか?
Zencart/oscommerceは検索結果や商品一覧表示をする前に、ユーザーが選択した検索条件や抽出条件、また管理画面で設定する一覧表示のリストをにその箇所における検索キーを基準にあらゆるデータベースへ情報を見に行きます。
ここから問題勃発
ここで上記のような条件下にあてはまると、極端にレスポンスが落ちます。
これは先日10000点ほどの商品情報をDBに格納、各サブカテゴリーには約500点前後の商品分けをしました。
この状態でカテゴリーからサブカテゴリーをクリックすると、商品の一覧表示まで1〜3分近くかかってしまいました。
確かに10000点という通常では考えられない個数なのでそれなりの覚悟はしていましたがここまでレスポンスが落ちるとは….
調査したところ、1商品に対する特売価格を呼び出しているソースコードに問題がありました。OSCは商品データベースに
products
products_description
categories_to_products
というデータベーステーブルが本来純粋な商品データを持っているテーブルですが、一覧表示するサブカテゴリー内の商品に特売価格が有る場合は
specials
というテーブルをさらにリレーショナルさせます。 → これが原因でした。
ここで specials を見に行くことによってPHPとMYSQLのレスポンスが極端に低下し、結果出力にも時間がかかるというものでした。
解決はできたのか?
specialsに格納されている特売価格を products にあたらな項目を作成し、同時に書き込むことで、products で一覧表示に必要なすべての項目表示ができるため表示に1秒とかかりません。
まさに数十倍の高速化です。ブラウジンした感じは商品点数が30点前後しか入っていないようなとても軽いレスポンスです。
もしこのように同じ症状でお悩みでしたらお問合せフォームよりご相談ください。
こちらの記事も参考にしてください。