Magento - чрезвычайно гибкая инфраструктура электронной коммерции, но эта гибкость имеет цену: производительность.Этот ответ представляет собой набор указателей и некоторые подробности о кэшировании (особенно для блоков).
Одна вещь, которую следует учитывать, - это среда Magento, например, настройка php, веб-сервера (предпочтение nginx перед Apache) и MySQL.Кроме того, установите хороший кеширующий бэкэнд для Magento.Все они описаны, например, в Техническом описании Magento , которое также применимо к CE.
После настройки среды другой стороной является код.
Для некоторых страниц возможно уменьшение количества запросов путем включения каталога плоских таблиц ( Система> Конфигурация> Каталог> Интерфейс ), но у вас всегда будет большое количество запросов.
Вы также не можете реально сократить время, затрачиваемое на создание блоков, кроме как путем настройки среды (APC, память, процессор).Итак, как говорили другие комментаторы, ваш лучший выбор - использовать функцию кэширования, встроенную в Magento.
Кэширование блоков Magento
Поскольку вы конкретно упомянули блоки в этом вопросе, я разработаюнемного больше о кешировании блоков.Кэширование блоков регулируется тремя свойствами:
- cache_lifetime
- cache_key
- cache_tags
Все эти свойства можно установить в _construct()
метод блока, использующий setData () или магические сеттеры, или путем реализации связанных методов получения (getCacheLifetime()
, getCacheKey()
, getCacheTags()
).
cache_lifetime указывается в (целых) секундах.Если установлено значение false
(логическое значение), блок будет кэширован навсегда (без истечения срока действия).Если установлено значение null
, блок не будет кэшироваться (это значение по умолчанию в Mage_Core_Block_Abstract
).
cache_key - это уникальная строка, используемая для идентификации кэша.запись в пул кеша.По умолчанию он составлен из массива, возвращенного методом getCacheKeyInfo()
.
// Mage_Core_Block_Abstract
public function getCacheKeyInfo()
{
return array(
$this->getNameInLayout()
);
}
public function getCacheKey()
{
if ($this->hasData('cache_key')) {
return $this->getData('cache_key');
}
/**
* don't prevent recalculation by saving generated cache key
* because of ability to render single block instance with different data
*/
$key = $this->getCacheKeyInfo();
//ksort($key); // ignore order
$key = array_values($key); // ignore array keys
$key = implode('|', $key);
$key = sha1($key);
return $key;
}
Лучший способ настроить ключ кэша в пользовательских блоках - это переопределить метод getCacheKeyInfo()
и добавить данные, необходимые для уникальной идентификации кэшированного блока при необходимости.
Например, для кэширования другой версии блока в зависимости от группы клиентов вы можете сделать:
public function getCacheKeyInfo()
{
$info = parent::getCacheKeyInfo();
$info[] = Mage::getSingleton('customer/session')->getCustomerGroupId()
return $info;
}
cache_tags - это массив, который включает сегментацию кэша.Вы можете удалить разделы кэша, соответствующие только одному или нескольким тегам.
В интерфейсе администратора в разделе Система> Управление кэшем вы можете увидеть несколько доступных по умолчанию тегов кэша (например, BLOCK_HTML, CONFIG...).Вы также можете использовать собственные теги кеша, просто указав их.
Это часть реализации Zend_Cache
, и ее нужно настраивать гораздо реже по сравнению с cache_lifetime
и cache_key
.
.
Другое кеширование
Кроме блоков Magento кеширует много других вещей (сбор данных, конфигурация, ...).
Вы можете кэшировать свои собственные данные, используя Mage::app()->saveCache()
, Mage::app()->loadCache()
, Mage::app()->cleanCache()
и Mage::app()->removeCache()
.Пожалуйста, посмотрите в Mage_Core_Model_App
подробности об этих методах, они довольно просты.
Вы также можете использовать модуль full page cache .Если вы используете Magento EE, у вас уже есть.В противном случае выполните поиск в Magento Connect - есть много вариантов (коммерческих).
Некоторые из этих модулей также настраивают различные части Magento для вас, помимо аспекта полного кэширования страниц, например, Nitrogento (коммерческий).
Использование обратного прокси-сервера, например Varnish , также очень полезно.
На эту тему довольно много постов в блоге.Вот один пост от издателей расширения Nitrogento.
Если вы работаете в Magento в более мелкомасштабной среде, посмотрите мой пост на Оптимизация серверной части кеша файлов на magebase.com.