Как ускорить магазин - кешируем прожорливые куски кода в Opencart
Очень простой метод при котором используя стандартный функционал кеширования в Opencart можно значительно увеличить скорость магазина
Мы знаем что за простотой и доступностью Opencart скрывается его слабая сторона - скорость работы. Но к счастью это не проблема - все можно оптимизировать. Вообще, что бы оптимизировать магазин под ключ надо сделать примерно следующее (очень примерно, подходы могут быть разными)
- Оптимизируем базу данных
- Оптимизируем запросы
- Оптимизируем шаблон (скрипты, стили вниз). Но надо делать в пониманием дела что бы не допустить "прыганье страницы" при загрузке
- Оптимизируем все фото, стили, скрипты.
- Оптимизируем .htaccess и robots.txt
- Оптимизируем код html - новое требования согласно google page speed
- Смотрим на динамические выгрузки товаров.
- Конечно, для мобильных устройств свой отдельный шаблон где выводится только то что отображается.
- И когда сайт в продакшене применяем серверное кеширование и полное кеширование страниц.
Но сегодня мы поговорим об одном изи методе который позволит не залазить в дебри оптимизации базы, запросов и т.п. а используя стандартный функционал кешировать те самые "трудные" куски кода.
Как применить кеширование
Например в вас в магазине 500 категорий. Мы знаем что выборка всех 500 категорий (в хедере например или на главной) это ресурсоемкая задача и при большой трафике на сайте будет создавать повышенную нагрузку на базу данных. Да, можно оптимизировать базу, запросы, но можно через стандартную систему кеширования опенкарт закешировать выборку категорий в контроллере.
Для этого надо просто добавить пару строк кода: (добавляем в примере в файл: catalog/controller/common/header.php)
if($this->cache->get('header.categories')){ //проверяем, если ли закешированные данные
$data['categories'] = $this->cache->get('header.categories'); //забираем в массив уже готовые данные и не делаем запросов
}else{
$data['categories'] = /*код для получения категорий*/; //получаем категории стандартным методом
$this->cache->set('header.categories', $data['categories']); //добавляем в кеш уже сформированные данные
}
После чего при первой загрузке страницы у нас и будет идти все эти выборки для формирования дерева из 500 категорий, но при следующем заходе данные будут браться уже не с базы и с кеша. А что такое кеш - это уже сформированные данные в файле, а как известно что считать один файл на сервере (а тем более SSD) гораздо легче и быстрее чем делать 100500 запросов в базу каждый раз.
Такой микро доработкой мы экономим очень много ресурсов сервера.
Как работает система кеширования
Без кеширования что бы сформировать массив из категорий надо сделать выборку всех категорий и всех всех подкатегорий. Далее сформировать массив данных. С кешированием при запросе страницы сервер проверяет есть ли файл кеша, если есть - отдает сформированные данные и уже нет необходимости делать какие-либо запросы в базу.
Таким образом добавив пару строк кода в узкие места магазина мы можем уменьшить ответ сервера и нагрузку в разы. Кстати при таком подходе магазин выдерживает куда больше трафика чем без кеширования.