Подтвердить что ты не робот

Почему Magento Invalidation полного кэширования страниц на продукте сохраняет фактическую страницу, не кэшированную, и что делает обновление, поскольку оно не кэшируется

Итак, Кэширование - это то, что меня смущает больше всего в Magento, так как для большинства других я уверен. В настоящее время один из сайтов, на которых мы работаем, находится на Enterprise и, конечно же, использует FPC. Проблема в том, что у нас есть обновление инвентаря, которое выполняется каждые 15 минут. Многие заказы размещаются в CSR по телефону и через каталог во внешнюю систему за пределами Magento.

Каждые 15 минут запускается script, чтобы проверять любой инвентарь в этой системе и видеть, отличается ли он от того, что находится в Magento. Если есть разница, инвентарь обновляется в Magento. Используя все методы Magento, нет sql или ничего подобного.

У нас всегда были проблемы с кешированием, и они пытались использовать все новейшие методы, когда они выходят. Последний, который мы пытаемся сделать, это Redis, и у нас был хороший успех на других сайтах. Тем не менее, мы все еще видим сумасшедшую нагрузку на сервер, и очевидно, что страницы не кэшируются.

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

Я запутался в том, что означает недействительность, потому что некоторое время назад у нас был вопрос к поддержке клиентов о чем-то подобном, и это был ответ

Кэш полной страницы недействительное состояние при любых изменениях в продуктах, категориях, CMS даже когда запасы уменьшаются после продажи.

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

Однако, если FPC, подтвержденное во все времена, является обязательным для вашего бизнес-логику, вы, безусловно, можете настроить свою установку Magento на обновлять его автоматически через функциональность cron так часто, как вы желание.

Однако во всех тестах, которые я сделал, на обоих версиях 1.9 и 1.11 Enterprise появляется, когда FPC недействителен, ответ не извлекается из кеша. Что противоречит тому, что они говорили об этом, просто не имея новых обновлений.

Есть ли что-то, что мне не хватает? Кто-нибудь имеет хорошее объяснение того, как недействительность работает в Magento специально для FPC или любых хороших ссылок, чтобы полностью понять процесс и код?

Вы можете попробовать это самостоятельно для любой страницы с полной кешей. Но я понимаю, что метод processRequest в /app/code/core/Mage/Core/Model/Cache.php должен устанавливать содержимое тела с кешированным ответом и возвращать true, если страница кэшируется.

Чтобы проверить, перейдите на любую страницу, убедитесь, что вы ее кешировали и возвращаете true. Входите и отредактируйте продукт, в нашем случае количество. Это приведет к недействительности FPC. Однако теперь, когда вы загружаете страницу, которая была кэширована, прежде чем она вернет false в этом методе, а не будет кешированной страницей. Я не знаю, насколько это правильно, если вы можете сказать, что страница кэширована или нет, но именно там мое исследование ведет меня. Пожалуйста, поправьте меня, если я ошибаюсь.

UPDATE: При дальнейшем исследовании я обнаружил, что при сохранении продукта в администраторе действие контроллера

Mage_Adminhtml_Catalog_ProductController::saveAction()

вызовет следующий метод

Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)

Затем в классе Mage_CatalogRule_Model_Resource_Rule вызывается метод applyAllRulesForDateRange и который отключает событие

catalogrule_after_apply

Какой модуль полной страницы просматривает и запускает метод чистого кэша для тега FPC. По сути, удаление всех записей кеша FPC.

Я не понимаю, почему это необходимо, если до этого логика очищает записи FPC, привязанные к тегам продукта и категории. Это ошибка?

4b9b3361

Ответ 1

Вы должны создать новый настраиваемый индексатор Mage_Index_Model_Indexer_Abstract и создать новые методы api-модели ресурса с заданиями cron

Ответ 2

FPC наблюдает за изменениями инвентаря, поскольку намерение состоит в том, чтобы отображать на складе любые товары, которые были уменьшены до нулевого запаса. Исправление будет заключаться в создании диспетчеризации событий, когда продукт попадает в ноль, а не каждый раз, когда какой-либо продукт меняет запас и переписывает FPC, чтобы наблюдать это событие вместо оригинала.

Другим методом будет только аннулировать части кеша, относящиеся к обновляемым продуктам, но это будет довольно значительным архитектурным изменением.

Ответ 3

модуль Cache Phoenix Cache очищает страницы продуктов и страницы категорий, но не раскрывает некоторые области недействительности кеша. также он плохо справляется с динамическим контентом.

Возможно, вам стоит проверить модуль aoe_static, который отлично справляется с загрузкой динамического содержимого, загружая макет по умолчанию и отображая блоки с помощью ajax-вызова. этот вызов ajax также устанавливает cookie для сеансов.

вам нужно быть осторожным, используя 2 модуля в довольно сложной области, возможно, вам стоит рассмотреть этот пурпурный полнотекстовый пул с полным исходным кодом magento

Ответ 4

Прочитайте статью, которую я написал о полном кэшировании страниц в Magento. В нем подчеркивается исправление ошибок, которое внезапно делает весь механизм кэширования понятным!

http://www.excitedcroc.com/article/why-the-magento-full-page-cache-doesnt-expire

По сути, существует ошибка в способе использования механизма кэширования Zend Framework Magento.

Проблема заключается в том, что классы кэша библиотеки Zend и классы кэша корпоративного предприятия Magento используют сочетание нулевых и ложных значений в своих функциях, которые генерируют значение времени жизни. Потому что null! == false всегда используется срок службы по умолчанию 10 дней. Проблема связана с функцией processRequestResponse в app/code/core/Enterprise/PageCache/Model/Processor.php. Поскольку в экземпляр кэша не передается значение продолжительности жизни, но по умолчанию оно равно null.

Изменение значения по умолчанию для параметра lifetime функции сохранения app/code/core/Mage/Core/Model/Cache.php устранит эту проблему. Просто установите для него значение false вместо null (приведенная выше статья полностью объясняет, почему).

- сохранение открытых функций ($ data, $id, $tags = array(), $lifeTime = null)

+ сохранение общественных функций ($ data, $id, $tags = array(), $lifeTime = false)