Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Кеш и индексы

Magento на каждый запрос собирает сотни файлов XML, блоков и цен. Чтобы не делать это заново, готовый результат запоминается: это кеш. Похожую роль играют индексы — заранее пересчитанные таблицы для каталога. Оба механизма объясняют, почему правка иногда «не видна», и оба управляются из консоли.

Виды кеша

bin/magento cache:status

Команда печатает список видов кеша и состояние каждого: 1 — включён, 0 — отключён.

ВидЧто хранитКогда сбрасывать
configСобранные файлы XML из папок etcПосле правки любого XML в etc
layoutСобранные макетыПосле правки макета
block_htmlГотовый HTML блоковПосле правки шаблона
full_pageСтраницы целикомПосле любого изменения, видимого на витрине
translateПереводыПосле правки файлов перевода
eavОписания атрибутовПосле изменения атрибутов

Сброс кеша

bin/magento cache:clean
bin/magento cache:clean config layout
bin/magento cache:flush

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

КомандаЧто удаляет
cache:cleanТолько записи Magento включённых видов кеша
cache:flushВсё содержимое хранилища кеша

При разработке обычно хватает cache:clean.

Включение и отключение

bin/magento cache:disable full_page block_html
bin/magento cache:enable

Первая команда отключает два вида кеша — так удобнее править шаблоны. Вторая без аргументов включает все виды. На рабочем сервере включён весь кеш.

Кеш страниц целиком

Вид full_page хранит готовый HTML страницы и отдаёт его, не запуская почти ничего из кода модуля. Поэтому действие и модель представления выполняются только при первом обращении к странице. На рабочих серверах эту роль обычно берёт на себя отдельная программа Varnish, а сам кеш и сессии хранят в Redis или Valkey.

Данные, разные для каждого покупателя, — имя, корзина — Magento подгружает отдельным запросом JavaScript уже после отдачи страницы.

Индексы

Цену товара с учётом скидок, наличие на складе, принадлежность к категориям дорого вычислять при каждом показе. Magento пересчитывает их заранее в отдельные таблицы — индексы.

bin/magento indexer:status
bin/magento indexer:reindex
bin/magento indexer:reindex catalog_product_price

Первая команда показывает состояние каждого индекса, вторая пересчитывает все, третья — только цены.

ИндексЧто готовит
catalog_product_priceИтоговые цены
cataloginventory_stockНаличие товаров
catalog_category_productТовары в категориях
catalogsearch_fulltextДанные для поиска в OpenSearch

Режимы индексов

bin/magento indexer:set-mode schedule
bin/magento indexer:show-mode
РежимКак обновляется
realtime (Update on Save)Сразу при сохранении товара; сохранение медленнее
schedule (Update by Schedule)Планировщиком раз в минуту; нужен работающий cron

На рабочем сервере выбирают schedule.

Частая ошибка

В макет добавляют блок с атрибутом cacheable="false", чтобы он всегда показывал свежие данные. Один такой блок отключает кеш страниц для всей страницы, на которой стоит, а в файле default.xml — для всего магазина, и сайт становится медленным. Данные, зависящие от покупателя, подгружайте через JavaScript, а блоки оставляйте кешируемыми.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.