TAMURA Toshihiko
tamur****@bitsc*****
2010年 5月 25日 (火) 16:55:06 JST
こんにちは、田村です。 土屋さん: > catalog/includes/column_left.phpで、カテゴリーBOXのキャッシュを使う条件が、 > > if ( (USE_CACHE == 'true')&& !SID ) { > echo tep_cache_categories_box(); > } else { > include(DIR_WS_BOXES . 'categories.php'); > } > > となっていますが、始めのif文の「&& !SID」がなぜ必要なのかがわかりません。 > > この場合、セッションIDがついている初回のアクセス時はキャッシュを使わずに > include(DIR_WS_BOXES . 'categories.php'); > が呼び出されると思うのですが、 > セッションIDがついている初回のアクセス時から > echo tep_cache_categories_box(); > を使うと何かまずいことがあるでしょうか? セッションIDがついている状態のアクセスで、 キャッシュ・ファイルを生成すると、 セッションIDがキャッシュ内のリンクに記録されます。 続いてアクセスしたユーザがキャッシュ内のリンクをクリックすると、 キャッシュ・ファイルを生成したユーザと同じセッションIDに なってしまいます。 それがまずいです。 > なぜこのようなことをお聞きするかと申しますと、 > 今このプログラムを真似て、新着商品をキャッシュで表示させているのですが、 > 訪問者があるたびに、キャッシュではなくincludesで元プログラムが呼び出されており、 > その処理が重たいため、Slowqueryに頻繁に記録されております。 > (新着商品を表示させるプログラムは、カテゴリの条件などをいろいろ加えているため、 > どうしても処理が重たくなってしまいます。) 初回アクセス時からキャッシュを利用するためには、 キャッシュ・ファイルに記録されているセッションIDを、 当該ユーザのセッションIDに置換するような 仕組みを追加する方法もあります。 それから、新着商品の処理が重いということですが、 productsテーブルにインデックスを追加すれば改善するかもしれません。 (参照) Re: 新着商品表示が遅い (Tep-j-general) http://sourceforge.jp/projects/tep-j/lists/archive/general/2005-May/004140.html -- 田村敏彦 / 株式会社ビットスコープ E-mail:tamur****@bitsc***** http://www.bitscope.co.jp/