на данный момент вижу узкое место в router.php виртумарта - при каждом вызове JROUTE для получения ссылки на категорию/производителя/товар выполняется 1-2 запроса только для того чтоб узнать sef-путь по ID ... вот и думаю - как бы это оптимизировать... какие ваши варианты ? может быть мне одному только кажется что для построения выпадающего меню из 200 категорий нужно сделать 300-350 запросов к базе? может кто решил эту проблему ? Кэширование конечно хорошо, но оно имеет свои недостатки в работе корзины/фильтра
сейчас копаю выборочное кэширование модулей - пока на стадии тестов
Во, почитал немного всякие доки и нашел интересную штуку
В свойствах системы
кэширование не включаем, а в router.php виртумарта в метод getCategoryRoute пихаем после
Код:
$cache = JFactory::getCache('_virtuemart','');
строку
Таким образом включаем принудительный кэш для ссылок
Это помогло нам скэшировать урлы категорий, таким образом я уменьшил кол-во запросов на 300... при редактировании категории кэш обновляется
UPD: обновляется каждые XX минут - настройки кэша в панели управления, по умолчанию
15 минут
В общем можете потестить и отписаться.
Да, плагин "System - кэш" должен быть ВЫКЛЮЧЕН.
Нашел способ как кэшировать результаты работы функций - дебаг показывает уменьшение запросов, в папке /cache/ создаются и обновляются раз в 15 мин нужные файлики...
например закэшировал вывод модуля "производителей":
пошел в файл
modules\mod_virtuemart_manufacturer\mod_virtuemart_manufacturer.php
находим там обычные строки
$manufacturers = $model->getManufacturers(true, true,true);
$model->addImages(
$manufacturers);
т.е. мы как бы присваиваем переменной $manufacturers результат выполнения метода getManufacturers и пихем картинки туда методом addImages.
Неплохо бы не дергать эти методы постоянно - производители же не меняются каждую минуту, верно?
вставил перед вышеуказанными строками:
Код:
$cache = JFactory::getCache('virtuemart_frontend_manufacturers', ''); // понятное название директории с кэшем
$cache->setCaching( 1 ); // принудительно включаем кэширование
$key = 'virtuemart_frontend_manufacturers' ; // уникальный ключ кэша - тут можно вязать ID модуля и т.п. но у меня модуль один и на главной - поэтому я не заморачивался - у меня уникальным является и "virtuemart_frontend_manufacturers"
вместо вышеуказанных строк -
Код:
if (!($manufacturers = $cache->get($key))) { // если короче в кэше не нашли наших производитлей
$manufacturers = $model->getManufacturers(true, true,true); // таки вызываем методы
$model->addImages($manufacturers); // и картинки тоже пихаем
$cache->store($manufacturers, $key); // ну и сохраняем в кэш нашу переменную под уникальным кеем
}
Вуаля - тестим, проверяем запросы.По этому способу можно извращаться с кэшем как угодно)))
Да, у меня отчего-то начал пихаться кэш страниц в папку /cache/
pages/ и как результат начали кэшироваться всякие ненужности типа корзины и т.п. - то из-за чего я решился на правку кода и тонкие эксперименты
я решил пока проблему заглушкой, поставив права "444" на эту папку