Ответить Новая тема Новый опрос 
Всего: 9 < 1 2 3 4 5 6 > »
 Оптимизация кэширования
Иван Кафка


Новичок
Сообщений: 21
Регистрация: 07-06-2010


10-06-2010 12:48
Цитата:
Добавляем в модуль blockmanufacturer кэширование:
Код:
function hookLeftColumn($params)
    {
        global $smarty, $link;
//Включаем кэширование
    $smarty->caching = true;
//Проверяем кэширован ли уже блок
    if (!$smarty->is_cached(dirname(__FILE__).'/'.'blockmanufacturer.tpl')) {
//Если нет - получаем данные
            $smarty->assign(array(
                'manufacturers' => Manufacturer::getManufacturers(),
                'link' => $link,
            ));
    }
//Обрабатываем шаблон
        $page= $this->display(__FILE__, 'blockmanufacturer.tpl');
//Выключаем кэширование
        $smarty->caching = false;
//Возвращаем результат
        return $page;
    }

Cреднее время: 1011
Попытался добавить этот фрагмент - страница не загружается (белый фон).
Подскажи, что может не правильно добавил?

Вот что у меня получилось:

Код:
function hookLeftColumn($params)
    {
        global $smarty, $link;
        //Включаем кэширование
    $smarty->caching = true;
    //Проверяем кэширован ли уже блок
    if (!$smarty->is_cached(dirname(__FILE__).'/'.'blockmanufacturer.tpl')) {
//Если нет - получаем данные
        $smarty->assign(array(
            'manufacturers' => Manufacturer::getManufacturers(),
            'link' => $link,
            'text_list' => Configuration::get('MANUFACTURER_DISPLAY_TEXT'),
            'text_list_nb' => Configuration::get('MANUFACTURER_DISPLAY_TEXT_NB'),
            'form_list' => Configuration::get('MANUFACTURER_DISPLAY_FORM'),
        ));
        return $this->display(__FILE__, 'blockmanufacturer.tpl');
//Выключаем кэширование
        $smarty->caching = false;
//Возвращаем результат
        return $page;
    }
    }



Сообщение отредактировано Иван Кафка 10-06-2010 13:49 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
xenol


Новичок
Сообщений: 61
Регистрация: 11-02-2010


10-06-2010 12:58
Цитата:( Иван Кафка @ 10-06-2010 08:48 Смотреть сообщение )
Цитата:
Добавляем в модуль blockmanufacturer кэширование:
Код:
function hookLeftColumn($params)
    {
        global $smarty, $link;
//Включаем кэширование
    $smarty-&gt;caching = true;
//Проверяем кэширован ли уже блок
    if (!$smarty-&gt;is_cached(dirname(__FILE__).'/'.'blockmanufacturer.tpl')) {
//Если нет - получаем данные
            $smarty-&gt;assign(array(
                'manufacturers' =&gt; Manufacturer::getManufacturers(),
                'link' =&gt; $link,
            ));
    }
//Обрабатываем шаблон
        $page= $this-&gt;display(__FILE__, 'blockmanufacturer.tpl');
//Выключаем кэширование
        $smarty-&gt;caching = false;
//Возвращаем результат
        return $page;
    }

Cреднее время: 1011
Попытался добавить этот фрагмент - страница не загружается (белый фон).
Подскажи, что может не правильно добавил?

Вот что у меня получилось:

Код:
function hookLeftColumn($params)
    {
        global $smarty, $link;
        //Включаем кэширование
    $smarty-&gt;caching = true;
    //Проверяем кэширован ли уже блок
    if (!$smarty-&gt;is_cached(dirname(__FILE__).'/'.'blockmanufacturer.tpl')) {
//Если нет - получаем данные
        $smarty-&gt;assign(array(
            'manufacturers' =&gt; Manufacturer::getManufacturers(),
            'link' =&gt; $link,
            'text_list' =&gt; Configuration::get('MANUFACTURER_DISPLAY_TEXT'),
            'text_list_nb' =&gt; Configuration::get('MANUFACTURER_DISPLAY_TEXT_NB'),
            'form_list' =&gt; Configuration::get('MANUFACTURER_DISPLAY_FORM'),
        ));
        return $this-&gt;display(__FILE__, 'blockmanufacturer.tpl');
//Выключаем кэширование
        $smarty-&gt;caching = false;
//Возвращаем результат
        return $page;
    }
    }

у тебя строчка
Цитата:
return $this->display(__FILE__, 'blockmanufacturer.tpl');

а должно быть
Цитата:
$page =  $this->display(__FILE__, 'blockmanufacturer.tpl');
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Иван Кафка


Новичок
Сообщений: 21
Регистрация: 07-06-2010


10-06-2010 15:35
Цитата:
function hookLeftColumn($params)
{
  global $smarty, $link;
//Включаем кэширование
$smarty->caching = true;
//Проверяем кэширован ли уже блок
if (!$smarty->is_cached(dirname(__FILE__).'/'.'blockmanufacturer.tpl')) {
//Если нет - получаем данные
  $smarty->assign(array('manufacturers' => Manufacturer::getManufacturers(),
    'link' => $link,
'text_list' => Configuration::get('MANUFACTURER_DISPLAY_TEXT'),
  'text_list_nb' => Configuration::get('MANUFACTURER_DISPLAY_TEXT_NB'),
  'form_list' => Configuration::get('MANUFACTURER_DISPLAY_FORM'),
  ));
 
//Обрабатываем шаблон
  $page= $this->display(__FILE__, 'blockmanufacturer.tpl');
//Выключаем кэширование
  $smarty->caching = false;
//Возвращаем результат
  return $page;
}

@xenol исправил на page, но не помогло - тот же белый экран.


Сообщение отредактировано Иван Кафка 10-06-2010 16:37 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
xenol


Новичок
Сообщений: 61
Регистрация: 11-02-2010


10-06-2010 16:34
у тебя ошибка парсинга
ты забыл поставить закрывающую скобку "}" перед выражением
Цитата:
//Обрабатываем шаблон 
  $page= $this->display(__FILE__, 'blockmanufacturer.tpl');



Сообщение отредактировано xenol 10-06-2010 12:35 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Иван Кафка


Новичок
Сообщений: 21
Регистрация: 07-06-2010


10-06-2010 16:48
@xenol : глухо =) не помогает.


Сообщение отредактировано Иван Кафка 10-06-2010 17:48 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


10-06-2010 17:03
Включите отображение ошибок в config/config.inc.php
ini_set('display_errors', 'on');
Просто замените полностью hookLeftColumn на то, что в первом посте находится
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Иван Кафка


Новичок
Сообщений: 21
Регистрация: 07-06-2010


10-06-2010 17:26
Специалист, ors.

Вот такую ошибку выдает:

Fatal error: Smarty error: unable to write to $cache_dir '/sata1/home/users/truepromo/www/www.eckoshop.com.ua/enter/tools/smarty/cache'. Be sure $cache_dir is writable by the web server user. in /sata1/home/users/truepromo/www/www.eckoshop.com.ua/enter/tools/smarty/Smarty.class.php on line 1095
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


10-06-2010 17:55
Выставьте права на запись в tools/smarty/cache
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Иван Кафка


Новичок
Сообщений: 21
Регистрация: 07-06-2010


10-06-2010 18:05
Цитата:( ors @ 10-06-2010 18:55 Смотреть сообщение )
Выставьте права на запись в tools/smarty/cache


thanks =)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
xenol


Новичок
Сообщений: 61
Регистрация: 11-02-2010


29-06-2010 11:44
Цитата:( ors @ 30-05-2010 08:13 Смотреть сообщение )
Тестировал со включенным кэшированием во всех статических блоках в левой и правой колонках - удалось снизить время загрузки на 30-40%. Еще добавил кэширование к sitemap.php (у меня больше 400 категорий, поэтому поисковики из-за долгой загрузки вообще отказывались страницу загружать)

В официальной престе, думаю, кэширование еще не скоро сделают. Это связано с поддержкой мультиязычности.

Для страниц кэш сделать тоже легко, но нужно ли? Во-первых это вмешательство в движек, а во-вторых для каждой категории и для каждого товара будет создаваться своя страница в кэше. У меня 7000 товаров, так что лучше оставлю как есть.

Вот пример для кэширования категорий (используется множественное кэширование, в качестве ид кэша- идентификатор категории):
Код:
/*fix*/
$smarty->caching      = true;
if (!$smarty->is_cached(_PS_THEME_DIR_.'category.tpl', Tools::getValue('id_category'))) {
/*fix*/
$errors = array();
if (!isset($_GET['id_category']) OR !Validate::isUnsignedId($_GET['id_category']))
    $errors[] = Tools::displayError('category ID is missing');
else
{
...
if (isset($subCategories))
    $smarty->assign(array(
        'subcategories_nb_total' => sizeof($subCategories),
        'subcategories_nb_half' => ceil(sizeof($subCategories) / 2)));

//$smarty->display(_PS_THEME_DIR_.'category.tpl');
/*fix*/
}
$smarty->display(_PS_THEME_DIR_.'category.tpl',Tools::getValue('id_category'));
$smarty->caching      = false;
/*fix*/

Кстати при таком подходе не работает сортировка
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 9 < 1 2 3 4 5 6 > »