Кеш и скорость магазина
Где магазин хранит кеш и как это выбрать: файлы, база, Redis или Memcached. И что нажать, когда витрина показывает старое.
На этой странице
Кеш — это память магазина о том, что он уже посчитал. Собранная страница категории, список языков, настройки, разобранные характеристики: посчитать это заново стоит времени, а достать из кеша — почти нет.
Магазин пользуется кешем сам, настраивать его не обязательно. Но одно решение стоит принять осознанно: где этот кеш лежит.
Где выбирается
«Система» → «Обслуживание», карточка «Где магазин хранит кеш».
Там видно, что выбрано сейчас, и что доступно на вашем сервере. Недоступное не просто погашено — рядом написано, почему: «на сервере нет поддержки Redis, её ставит хостинг».
Выбор записывается в настройки сервера (файл .env), а не в базу данных. Иначе
получился бы круг: чтобы прочитать из базы, какой кеш выбран, магазину нужен
кеш, который этой настройкой и выбирается.
Что выбрать
| Хранилище | Когда подходит |
|---|---|
| Файлы | Умолчание для новых магазинов. Работает на любом хостинге и ничего не требует. Подходит большинству. |
| База данных | Когда файлы почему-то недоступны. Работает везде, но каждое обращение к кешу — это запрос к базе: на странице их набегает несколько десятков. |
| Redis | Самый быстрый вариант и единственный, который выдержит магазин на нескольких серверах. Нужен установленный Redis и расширение PHP — это ставит хостинг. |
| Memcached | Быстрый отдельный сервер кеша. Разумный выбор, если он уже стоит у вашего хостера. |
Короткий ответ для большинства: оставьте файлы. Переходить на Redis имеет смысл, когда магазин перерос один сервер или когда хостинг и так его предлагает.
Как переключить
- Выберите хранилище.
- Заполните поля соединения, если они появились (у Redis — сервер, порт, пароль, номер базы).
- Нажмите «Проверить соединение».
- Нажмите «Переключить».
Магазин проверяет соединение до сохранения и не даёт переключиться на хранилище, которое не отвечает. Это не придирка: магазин, переведённый на неработающий кеш, перестаёт открываться целиком — вместе с панелью, из которой это можно было бы починить.
Пароль после сохранения наружу не отдаётся. Пустое поле пароля означает «оставить сохранённый» — так вы можете поправить только порт, не набирая пароль заново.
Что делать, если магазин показывает старое
Кеш иногда нужно сбросить руками — например, вы поправили файл темы прямо на сервере или загрузили данные мимо панели. В той же «Системе → Обслуживании» есть кнопки:
| Кнопка | Когда нажимать |
|---|---|
| Сбросить страницы витрины | Витрина показывает старую вёрстку или старые цены |
| Пересобрать шаблоны темы | Правка темы не видна на витрине |
| Сбросить данные кеша | Списки и справочники отдают устаревшее |
| Сбросить весь кеш | Когда не помогло ничего из перечисленного |
В обычной работе эти кнопки не нужны: магазин сбрасывает нужное сам, когда вы правите товары, категории, страницы, скидки и настройки.
Страницы витрины
Отдельно от кеша данных магазин хранит готовые страницы витрины — это то, что сильнее всего влияет на скорость для покупателя.
Страница собирается один раз, а дальше отдаётся готовой. Разница на живом магазине: собрать категорию заново — около трёхсот миллисекунд, отдать готовую — около пятидесяти.
Из этого хранилища намеренно исключены страницы, которые у каждого свои: корзина, оформление заказа, кабинет покупателя, избранное, сравнение и подсказки поиска. Вошедший покупатель и вошедший сотрудник магазина всегда видят свежую страницу — поэтому, правя тему, держите панель открытой в соседней вкладке: вам будет видно изменения сразу.
Что стоит знать про сервер
Файловый кеш складывается в папку магазина и требует только права на запись.
Redis и Memcached — это отдельные программы на сервере, магазин их не устанавливает. Если хостинг их не предлагает, выбор просто не будет доступен, и магазин честно об этом напишет.
Кешу Redis стоит задать предел памяти и вытеснение старого — иначе он будет расти, пока не займёт всю память сервера. Это делается один раз в настройках самого Redis и обычно входит в работу хостинга.