В дефолтном OpenCart есть система кэширования запросов к базе данных. Она даже довольно неплохая, с несколькими способами (файл, redis, memcache). Но знаете, где она используется по умолчанию? Нигде 🤷♂️. Почти ни в одной модели. Десятки запросов на каждую страницу категории, товара, поиска - и всё это летит в базу каждый раз, как будто кэша вообще не существует. Спасибо команде OpenCart, за такой "перформанс из коробки". Дальше я сам.
Добавил нормальное, управляемое кэширование именно там, где оно реально даёт прирост без занозы в жопе.
Кэшируем только то, что нужно: модели товаров, опций и характеристик
Включил/выключил в настройках системы - три галочки: товары, опции, характеристики (атрибуты). Почему именно эти? Потому что 80% нагрузки на фронте - это страницы категорий, фильтры, сортировки, поиск по товарам. Закэшировал эти сущности - и страница категории открывается в 3-5 раз быстрее. При этом никаких проблем с динамикой: фильтры, сортировка, наличие, цены - всё пересчитывается на лету, потому что кэш именно на уровне моделей, а не тупо всей страницы и кэшируются сущности товаров, а не категорий с товарами. Никакой головной боли с инвалидацией кэша при изменении цен или остатков - внесли изменений, кэш сбросился.
Генерация кэша по расписанию
Чтобы не было холодного старта (это когда кэша нет и какой-то из юзеров ждёт пока сайт просрётся и покажет наконец страницу), добавил фичу генерации кэша по расписанию в админке. Настраиваешь cron или просто переходишь по ссылке (с защитным токеном само собой) - и за минуты (в зависимости от количества товаров) всё прогревается. Посетители всегда получают кэшированные данные, но кэш всегда актуален. И поисковики тоже любят, когда страницы отдают быстро даже при первом заходе. Google PageSpeed и Core Web Vitals скажут спасибо.
Это не какой-то гипер-сложный full-page caching с кучей костылей и вечными проблемами инвалидации. Это простое, понятное и очень эффективное кэширование на уровне данных. Включил - ускорился. Выключил - вернулся к стоку.
Всё под контролем. Всё из коробки. Поставил сборку, поставил галочки, нажал кнопку - и улыбаешься как всё хорошо работает 😊
А как работаешь с кэшем ты? Я не про деньги если что.