Как правильно кэшировать запросы к БД в OpenCart по клику и без сторонних модулей


1343

В дефолтном OpenCart есть система кэширования запросов к базе данных. Она даже довольно неплохая, с несколькими способами (файл, redis, memcache). Но знаете, где она используется по умолчанию? Нигде 🤷‍♂️. Почти ни в одной модели. Десятки запросов на каждую страницу категории, товара, поиска - и всё это летит в базу каждый раз, как будто кэша вообще не существует. Спасибо команде OpenCart, за такой "перформанс из коробки". Дальше я сам.

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

Кэшируем только то, что нужно: модели товаров, опций и характеристик

Включил/выключил в настройках системы - три галочки: товары, опции, характеристики (атрибуты). Почему именно эти? Потому что 80% нагрузки на фронте - это страницы категорий, фильтры, сортировки, поиск по товарам. Закэшировал эти сущности - и страница категории открывается в 3-5 раз быстрее. При этом никаких проблем с динамикой: фильтры, сортировка, наличие, цены - всё пересчитывается на лету, потому что кэш именно на уровне моделей, а не тупо всей страницы и кэшируются сущности товаров, а не категорий с товарами. Никакой головной боли с инвалидацией кэша при изменении цен или остатков - внесли изменений, кэш сбросился.

Генерация кэша по расписанию

Чтобы не было холодного старта (это когда кэша нет и какой-то из юзеров ждёт пока сайт просрётся и покажет наконец страницу), добавил фичу генерации кэша по расписанию в админке. Настраиваешь cron или просто переходишь по ссылке (с защитным токеном само собой) - и за минуты (в зависимости от количества товаров) всё прогревается. Посетители всегда получают кэшированные данные, но кэш всегда актуален. И поисковики тоже любят, когда страницы отдают быстро даже при первом заходе. Google PageSpeed и Core Web Vitals скажут спасибо.

Это не какой-то гипер-сложный full-page caching с кучей костылей и вечными проблемами инвалидации. Это простое, понятное и очень эффективное кэширование на уровне данных. Включил - ускорился. Выключил - вернулся к стоку.

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

А как работаешь с кэшем ты? Я не про деньги если что.


Написать комментарий
Введите код с картинки