[Tep-j-general] Re: ベストセラーがサーバーに及ぼす高負荷状態について

Zurück zum Archiv-Index

wataru sw2w-****@asahi*****
2005年 2月 3日 (木) 09:51:08 JST


田村さんありがとうございます

以前このMLで鈴川さんからこのカスタマイズを教えて頂いたときに「テーブルの最適
化やキャッシュの利用などの対策が必要」と言われていた事をすっかり忘れておりま
した。とりあえず昨日格闘してみた結果、phpのpの字も把握していないのでかなり雑
なやり方ですが一応キャッシュの生成&呼び出しに成功しました。
ただ自分のやり方では間違いがあるようでカテゴリー内でのベストセラーが出ず全体
でのベストセラーが出てしまいます。とりあえずキャッシュは生成できたんで高負荷
は多少軽減できたと思いますので一応納得しているんですが…

雑で(特にcolumn_right.phpはif ($check['count'] > 0) をすっ飛ばしたりかなり無
茶苦茶だと思います…)お恥ずかしい限りなんですが一応変更点を載せておきます。

1. catalog/includes/functions/cache.php の最後に以下を挿入。
(product_infoで表示されるベストセラーよりもdefault.php/cPath/〜で表示される
ベストセラーの方が表示頻度が高い為also_purchasedからではなくcategories_boxの
方から引用しました。)

////
//! Cache the best sellers module
// Cache the best sellers module
  function tep_cache_best_sellers_box($auto_expire = false, $refresh =
false) {
    global $cPath, $foo, $language, $languages_id, $id, $categories_string;

    if (($refresh == true) || !read_cache($cache_output, 'best_sellers-' .
$language . '.cache' . $cPath, $auto_expire)) {
      ob_start();
      include(DIR_WS_BOXES . 'best_sellers.php');
      $cache_output = ob_get_contents();
      ob_end_clean();
      write_cache($cache_output, 'best_sellers-' . $language . '.cache' .
$cPath);
    }

    return $cache_output;
  }

2. catalog/includes/column_right.phpを変更

変更前の箇所
if (isset($HTTP_GET_VARS['products_id'])) {
    if (tep_session_is_registered('customer_id')) {
      $check_query = tep_db_query("select count(*) as count from " .
TABLE_CUSTOMERS_INFO . " where customers_info_id = '" . $customer_id . "'
and global_product_notifications = '1'");
      $check = tep_db_fetch_array($check_query);
      if ($check['count'] > 0) {
        include(DIR_WS_BOXES . 'best_sellers.php');
      } else {
        include(DIR_WS_BOXES . 'product_notifications.php');
      }
    } else {
      include(DIR_WS_BOXES . 'product_notifications.php');
    }
  } else {
    include(DIR_WS_BOXES . 'best_sellers.php');
  }
if (isset($HTTP_GET_VARS['products_id'])) {

変更後

if (isset($HTTP_GET_VARS['products_id'])) {
    if (tep_session_is_registered('customer_id')) {
      $check_query = tep_db_query("select count(*) as count from " .
TABLE_CUSTOMERS_INFO . " where customers_info_id = '" . $customer_id . "'
and global_product_notifications = '1'");
      $check = tep_db_fetch_array($check_query);
      if ( (USE_CACHE == 'true') && !SID ) {
      echo tep_cache_best_sellers_box(86400);
      include(DIR_WS_BOXES . 'product_notifications.php');
      } else {
      include(DIR_WS_BOXES . 'best_sellers.php');
        include(DIR_WS_BOXES . 'product_notifications.php');
      }
      }
     else {
      include(DIR_WS_BOXES . 'product_notifications.php');
    }
  } else {
    if ( (USE_CACHE == 'true') && !SID ) {
      echo tep_cache_best_sellers_box(86400);
      } else {
      include(DIR_WS_BOXES . 'best_sellers.php');
      }
  }

if (isset($HTTP_GET_VARS['products_id'])) {


大きな不具合ってわけではないのでスルーして頂いても結構なのですが、もし間違い
を指摘して頂ければ大変ありがたいです。

杉本







Tep-j-general メーリングリストの案内
Zurück zum Archiv-Index