Кэш для Magento EE 1.9. Следует ли использовать полное кэширование страниц (с перфорацией) и / или "классическое" блочное кэширование?

Мы используем Magento EE 1.9.

Чтобы ускорить работу сайта клиента, мы пытаемся настроить кэш.

Как вы знаете, Magento поставляется с техникой кеша difnet.

В Magento EE мы можем использовать Full Page Cache в сочетании с техникой, называемой "Hole Punching". Насколько я понимаю, этот кэш использовал некоторый контейнер, чтобы определить, должен ли динамический блок извлекаться из кэша => applyWithoutApp($content) или должен создаваться и обрабатываться динамический блок с использованием $this->_renderBlock() => applyWithApp($ содержание)

Чтобы сделать это, вы должны объявить в cache.xml блок, который вы хотите "перфорировать", среди прочего, своим собственным классом контейнера, расширяющим Enterprise_PageCache_Model_Container_Abstract. В этом классе контейнеров вы должны реализовать другую функцию, такую ​​как _getIdentifier(), _getCacheId(), _renderBlock Как вы видите, у Contanier есть собственный идентификатор кэша.

Как объяснено здесь

http://www.magentocommerce.com/wiki/5_-_modules_and_development/block_cache_and_html_ouput для кэширования блока, который вы только что добавили, необходимо добавить данные непосредственно в конструктор блока, определив cache_lifetime, cache_tags, cache_key

class {NS}_{Module}_Block_{View} extends Mage_Core_Block_Template {

  protected function _construct()
  {
    $this->addData(array(
        'cache_lifetime'    => 120,
        'cache_tags'        => array(Mage_Catalog_Model_Product::CACHE_TAG . "_" . $this->getProduct()->getId()),
        'cache_key'         => $this->getProduct()->getId(),
    ));
  }
}

Редактировать с изменяющимся постом http://magebase.com/magento-tutorials/adding-cache-support-to-magento-blocks/

Я понимаю, что статического "cache_key" просто недостаточно. Для этих случаев мы должны использовать метод getCacheKeyInfo:

 public function getCacheKeyInfo()
 {
     return array(
         'EXAMPLE_BLOCK',
         Mage::app()->getStore()->getId(),
         (int)Mage::app()->getStore()->isCurrentlySecure(),
         Mage::getDesign()->getPackageName(),
         Mage::getDesign()->getTheme('template')
     );
 }

После всего сказанного я возвращаюсь к своим вопросам: поскольку я понимаю, что перфорация в FPC + кажется более полным решением для "кэширования". Но в чем разница между полным кэшированием страниц (с дырочками) и "классическим" блочным кэшем?

-> Поскольку мы используем Magento EE 1.9, следует ли использовать только пробивание отверстий в FPC +?
(Потому что в некотором смысле FPC + дырокол - это уже способ кешировать блок?)

  • Означает ли это, что "классическое" блочное кэширование просто устарело или предназначено только для пользователей magento Comunity Edition?

-> или мы должны использовать оба (FPC + дырокол и классическое блочное кэширование)?

  • В этом случае, какой интерес представляет установка идентификатора кэша для контейнера, когда блок имеет свой собственный ключ кэша (или getCacheKeyInfo())?
  • В этом случае какой из этих методов кэширования является преобладающим?

Спасибо заранее за все ваши ответы!

1 ответ

Обычно Magento использует многоуровневый подход к кешированию: если кеш верхнего уровня не дает попадания, то, к счастью, некоторые кеши низкого уровня ускоряют сборку ответа.

Однако в отношении Magento FPC обычное кэширование на уровне блоков отключается автоматически. Кэширование динамических блоков выполняется на уровне FCP. Процесс, тем не менее, включает в себя информацию из gatCacheKeyInfo() способ построения ключа кеша (и построения списка параметров для регенерации блока "без приложения").

Если вы используете FCP, отличный от EE, вполне возможно, что обычное блочное кэширование все еще можно использовать в качестве запасного уровня кэширования. ИМО такой подход будет иметь смысл.

Другие вопросы по тегам