Ускорить Magento

“Ускорить Magento” – основная проблема с Magento (Мадженто).

Вопрос ускорения Magento – появляется сразу после запуска интернет-магазина.

Несколько проверенных рецептов ускорения загрузки сайтов на Magento.

Стандартные способы ускорения работы Magento:

  • Включить Flat catalog Product/Category – ускорения базы данных товаров/каталога. Но модули для Magento должны быть созданы с учетом Flat catalog, в противном случае Magento работать не будет.
  • Включить стандартный кеш Magento.
  • Хостинг с диском типа SSD – это ускорит работу сервера. Время обработки файлов ускоряется в сравнении с HDDSSD диск должен стоять на сервере – по умолчанию.

Сайт на Magento станет заметно быстрее.
Но при добавлении большого количества товаров и категорий – сайт становится заметно медленнее.

  • Кеш в Redis. Redis – это хранилище данных, легко-настраиваемое, быстрое. Для Magento необходимо установить дополнительный модуль – для хранения данных кеша в хранилище Redis.
    Magento работает заметно быстро. Кеш в Redis работает быстрее кеширования в файлах. Но есть и “ложка дёгтя в бочке мёда” 😉
    Если много данных хранится в Redis – то при обновлении кеша Magento может “подвиснуть” на несколько секунд-минут. Скорее всего причина в “блокировании” Redis, при “сбрасывании данных”.
  • Версия базы данных – протестировать насколько быстрее работают версии базы данных MySQL.
  • Установить настройки кеширования запросов в базе данных MySQL.

Magento работает быстро, но при проверке скорости через сервис типа – Google PageSpeed Tools есть сомнения в скорости сайта.
SEO специалисты, очень любят этот сервис для проверки скорости сайта.
Google PageSpeed показывает общую статистику по скорости, есть Javascript/CSS/Картинки/HTML статистика.

  • Minify CSS – размер файлов CSS стилей.
  • Optimize images – картинки сайта должны быстро загружаться в браузер пользователя.
  • Minify JavaScript – файлы скриптов JavaScript требуется уменьшить.

Для решения этих пунктов – требуется скачать по ссылке “Download optimized image, JavaScript, and CSS resources for this page.” на странице проверки скорости.
Скачивается архив с картинками и файлами, и копируется в Magento.
Google оптимизировал картинки и Javascript/CSS – искать модули сжатия файлов не требуется
🙂 , copy+paste .

В Google PageSpeed доступно API – для автоматизации.

Обратить внимание следует на параметр – Reduce server response time – время ожидания ответа от сервера в запросе браузера, также называют TTFB (время до получения первого байта).

TTFB – должен быть, как можно низкое значение.
Идеально – скорость ответа сервера, такая же как при закрузке файла site.com/robots.txt .

Возникает вопрос – возможно ли с Magento TTFB – как у статического файла?
Возможно ли скорость загрузки как у Amazon?

Да, такое возможно.

Ускорить Magento, как и любой другой PHP сайт, можно используя только HTML кеш.

Кеш HTML страницы.

К примеру полное кеширования HTML страницы и при запросе от браузера возвращать HTML из кеша, без запросов к базе данных сайта.
Таким споcобом – сбрасывается время обработки базой данных.
В основном база данных “узкое место” Magento, при постоянном запросе просмотра страниц сайта. Например боты поисковых систем и сервисов – постоянные запросы на сканирование и большая нагрузка на сервер/базу данных.

Скорее всего гиганты e-commerce такие как Amazon, Aliexpress – используют готовые (сохраненные/кешированные) страницы каталога товаров.

Например – страница товара кешируется 1 раз в неделю/сутки, блок с корзиной подгружается через Ajax, блок с наличием товара/кнопка купить – также подгружается через Ajax.
В результате получается, сервер быстро работает – используя только HTML-файлы (текстовые файлы).

HTML кеш для Magento можно добавить c готовым решением – Varnish. Varnish – что-то наподобие прокси перед веб-сервером. Возможно Varnish не всем подойдет, чуть сложноват в настройке.

Некоторое время назад, занялся вопросом ускорения Magento только используя PHP/Magento.
Ниже пример HTML кеш для Magento, что получилось 🙂 .

Логика работы HTML-кеша состоит из 3-х задач:

  1. Сохрание кеша HTML
    • Сайт на Magento сканируется и сохраняется HTML страниц в текстовой файл
    • Сканируется 1 или 2 раза в сутки, в зависимости как часто обновляется контент сайта, и сколько много страниц для сканирования
    • Сканируются только страницы из карты сайта Sitemap.xml, скорее всего эти страницы наиболее запрашиваемые
    • HTML-код страницы сохраняется в txt файл, название файла – это md5-хэш, также может добавляться суффикс в названии для мобильной версии (-mobile).
  2. Запрос к кешированой версии страницы
    • Проверка есть ли у посетителя cookie (куки), например клиент залогинен или есть товар в корзине, или не использовать HTML кеш к посетителю
    • Поиск кешированой страницы – по md5-хэш адреса URL
    • Проверка версии кешированной страницы для мобильной версии
  3. Добавлять куки, если клиент добавил что-то в корзину
    • Передавать через блок – параметр для кеша, если клиент залогинен или есть товар в корзине

Минусы:

  • Проблема с товарами, которые распродались (out of stock) – а  страница еще закешированная. Для этого можно добавить проверку на обновления товара/слада (Event) и обновлять кеш страницы.
  • Если у товаров постоянно меняется цена, решение HTML кеш – не подойдет, или делать подгрузку данных цен через Ajax.

Что получилось?
Сайт на Magento грузится мега быстро, посетителям нравится быстрый сайт, и статистика сканирования скорости сайта улучилась в Google Webmaster.