Кеш и индексы
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, а блоки оставляйте кешируемыми.