Загрузка...
Закрыть
Предупреждение
Для обеспечения высокого уровня обслуживания на этом сайте используются куки (cookies). Продолжая его использование, вы соглашаетесь с тем, что куки (cookies) будут сохраняться на вашем компьютере: Принять

Как сделать CS-Cart быстрее? Советы от Alt-team

August 16th, 2019

Друзья,

В Alt-team есть традиция обучать своих коллег тому, что умеешь сам. Раз в месяц мы проводим творческие ITишные встречи, где один и программистов делиться своим опытом в разработке. 

В августе 2019 очень интересный доклад на обозрение наших коллег представил один из наших ведущих разработчиков Евгений Шахин. Евгений рассказывал, как сделать CS-Cart магазин быстрее, какой сервер нужно использовать и от чего зависит скорость загрузки страниц CS-Cart движка. 

How to make CS-Cart faster?

Евгений работает с CS-Cart платформой около 7 лет. К нам он пришел талантливым студентом и уже через пару месяцев работы в компании, Евгению стали доверять масштабные проекты. Ежегодно Евгений успешно проходит официальный тест от CS-Cart, чем подтверждает свою квалификацию.

CS-Cart certificated developers

Итак, доклад Жени был настолько интересный с практической точки зрения, что мы решили на его основе написать статью и поделиться полезными знаниями по оптимизации скорости CS-Cart. 

Сразу отмечу, что мы не будем говорить о результатах Google Page Speed Insights. Данный сервис, в основном, проверяет вёрстку. МЫ поговорим о проблемах в настройке сервера, работе MySQL запросов и о методах, как сделать загрузку страниц CS-Cart быстрее. 


cs-cart performance test

От чего зависит скорость работы CS-Cart?


  1. Особенности хостинга
  2. Веб сервер (Apache, Nginx)
  3. PHP
  4. MySQL
  5. Кэш
  6. Дополнительное программное окружение

 

Обычно, мы встречали 3 варианта веб серверов:

  • Apache+mod_php (распространенное решение)
  • Nginx + php-fpm
  • Nginx + Apache + mod_php

Согласно W3Tech.com, от 14 января, 2019, около 85% пользователей используют либо Apache сервер, либо Nginx.При этом Apache все же популярнее Nginx решения.

The popularity of Apache and Nginx

Давайте поговорим о разнице между Apache и Nginx. Как вы думаете, что быстрее работает? Nginx быстрее при определенных обстоятельствах. 



Метод обработки соединений с клиентами Отдаваемый контент
Apache один процесс ОС — один запрос статический и динамический (mod_php)  
Nginx один процесс ОС — много запросов

только статический. Для динамического нужна помощь (php-fpm, apache+mod_php)

 

 

Принимая во внимание все аспекты веб серверов, мы пришли к выводу, что наиболее лучший вариант для высокой производительности CS-Cart  — это Nginx в связке с php-fpm, но этот вариант требует перенастройки config файла. 

Конечно, Вы можете использовать и Nginx + Apache + mod_php, но данный вариант будет чуть-чуть медленнее. Зато он поддерживает .htaccess файл. 

В случае, если у вас уже есть Apache+mod_php и вы хотите увеличь производительность CS-Cart, стоит ли вам переходить на сервер Nginx? Если честно, то стоит это делать, если:

  • у вас часто посещаемый интернет-магазин (более 5 посетителей одновременно);
  • на страницах много статического контента;
  • вы не удовлетворены результатами проверки интернет-магазина на сервисе Google Page Speed Insights. 

Если у вас мало посещаемый вебсайт и всего лишь несколько посетителей в день, то вы не почувствуйте разницу от перехода на сервер Nginx.

 

Но, наш совет, все же использовать Nginx+php-fpm на CS-Cart проектах.

 

Что насчет PHP?

php vertions to use

Коротко, используйте PHP 7 + модуль OPCache!

По умолчанию, CS-Cart использует OPCache модуль, но иногда он отключен! Проверьте это!

OPCache улучшает скорость PHP путем сохранения в памяти прекомпилированный байт-код скрипта. OPCache кэширует и оптимизирует сгенерированный байт код. 

 

ВНИМАНИЕ! Поддержка PHP 7.3. начинается только в CS-Cart 4.9. версии и выше. 

 

Вы должны осознавать, что сам по себе PHP не является узким местом в производительности CS-Cart. Да, несомненно, что PHP 7 быстрее PHP 5, но версия PHP не оказывает такого влияния на скорость загрузки страниц CS-Cart, как MySQL запросы.

Итак, мы переходим к самой главной части в теме Как увеличить скорость работы CS-Cart — MySQL запросы!

Обычно, CS-Cart работает очень быстро после открытия интернет-магазина. Первые проблемы начинаются, когда администратор интернет-магазина начинает загружать товары в магазин. Чем больше товаров, тем медленнее становится магазин. Со временем (когда много товаров уже загружено, много блоков) скорость CS-Cart магазина очень сильно падает и это уже сложно не заметить. Как раз в этом случае к нам обращаются владельцы интернет-магазинов на CS-Cart, которым просто необходим "летающий" интернет-магазин. 

 

Почему скорость CS-Cart падает, как только вы начинаете пользоваться платформой?


  1. Слишком сложные итоговые запросы.Сказать по правде, это очень плохой запрос! Не для всех частей запроса используются индексы. В условиях запроса используются функции MySQL. Обратите внимание на часть с FIND IN SET и оператором OR! Оператор OR нужно использовать очень осторожно, он может создавать множественные запросы. Вы никак не сможете использовать индексы в данном запросе. 
  2. Использование SQL_CALC_FOUND_ROWS. В таком случае запрос выполняется, игнорируя LIMIT. 
  3. При определенных обстоятельствах это приводит к блокировкам. (Например, сортировка по популярности, вывод блоков основанных на данных продаж и т.д.).

 

Итак, как увеличить скорость работы CS-Cart с помощью работы над MySQL запросами и блокировками?

 

MySQL запросы.

CS-Cart otimization

Лечение причин.

  1. Качественное решение — реализация индексации продуктов в том или ином виде. В то же время —сложное и подойдет не всем.
  2. Компромиссное — упростить итоговый запрос и оставить только компоненты использующие индексы —станет намного лучше.

 

Лечение симптомов.

  1. Увеличение размеров буферов в конфигурации MySQL (join_buffer_size и т.п.), в совокупности с апгрейдом RAM.
  2. Кеширование блоков с продуктами и полностраничное кэширование.

 

 

MySQL блокировки.

Блокировки делятся на 2 типа: блокировки на чтение и блокировки на запись. 

CS-Cart mysql locks

  1. Если A хочет читать данные, то другие клиенты тоже могут читать данные, но никто не может записывать, пока А не закончит чтение (read lock).
  2. Если А хочет записать данные, то другие клиенты не могут ни читать, ни писать данные, пока А не закончит(write lock).

 

How to use InnoDB for CS-Cart

По умолчанию, CS-Cart использует MyISAM систему хранения данных в СУБД MySQL. Данная система хоть и стара, но отлично и стабильно работает. Единственный огромный минус — это блокировка всей таблицы. Чтобы решить данную проблему, была изобретена другая система хранения данный — InnoDB. InnoDB использует более совершенный алгоритм блокировок. Система блокирует не всю таблицу, а только используемую строку.


Главная проблема CS-Cart — это использование системы MyISAM по умолчанию, что очень часто приводит к блокировкам таблиц полностью.

 

Примеры блокировок таблиц.

  1. Первый клиент открывает категорию с сортировкой по популярности. (блокируется таблица products_popularity по read lock). Другой клиент хочет открыть страницу продукта, но ждет первого, т.к. надо изменить значение популярности продукта.
  2. Клиенты постоянно лочат таблицы сессий по write lock (можно и нужно перенести в другое хранилище.
  3. Клиенты регулярно лочат по write lock таблицы статистики, логов, ордеров.
  4. Бекап БД создает read lock. Дольше всего бэкапятся самые нежелательные таблицы для лока.
  5. Синхронизация продуктов с внешней системой создает write lock на таблице продуктов. Например, синхронизация с 1С может работать до получаса.

cs-cart slow page loading

 

Лечение причин.

Конвертация таблиц в InnoDB или XtraDB (форк InnoDB от Percona) и сопутствующее редактирование конфига MySQL (установить innodb_buffer_pool_size и innodb_log_buffer_size в соответствии c RAM).

Лечение симптомов.

Кеширование в любом из своих проявлений сгладит ситуацию, но не устранит проблему.

MySQL. Конфигурационный файл.


Что можно поменять?

  1. Адаптировать значения настроек в соответствии с имеющейся RAM. В первую очередь, это касается значения буферов.
  2. Можно включить кэширование запросов. Но осторожно.

 

Как поменять?

  1. Утилита Mysqltuner https://github.com/major/MySQLTuner-perl
  2. Посмотреть рекомендации по основным настройкам в слайдах от Percona https://www.percona.com/resources/technical-presentations/optimizing-mysql-configuration-mysql-56-percona-technical-webinars

 

Когда менять?

  1. Если у клиента мощный сервер и до этого настройка не проводилась.
  2. Если провели конвертацию в InnoDB

 

О кэшировании!


cs-cart cache

  • Мы не рекомендуем делать кэширование на уровне базы данных!
  • Можно делать кэширование на уровне CS-Cart (блоки, промежуточные данные). Можно перенести все это на Redis.
  • Полностраничное кэширование. Уже есть готовое решение Кеш для пользователей.

 

Дополнительные программы

  • Используйте Redis для кеша и сессий. Redis is data caching technology. It caches data into RAM, so it's quickly accessed.
  • Можно использовать  Sphinx для поисковой оптимизации по сайту, но полнотекстовый поиск MySQL для большинства проектов не хуже.
  • Используйте Varnish кеш для полностраничного кеширования.

 

Как тестировать сайт на предмет проблем со скоростью?

 

1. Необходимо включить дебагер!

 

Постоянно

В файле config.local.php или local_conf.php вставить строчку:

 define('DEBUG_MODE', true);

В этом случае дебагер будет работать всегда и везде. Отключить его можно, заменив true на false, или совсем убрав определение константы.

 

Временно

  1. Войти в панель администратора как root-администратор.
  2. В URL дописать параметр, например:
 http://example.com/admin.php?debug

Так дебагер включится только для данной сессии. Чтобы выключить его, наведите курсор на логотип CS-Cart на панели дебагера вверху. Чуть левее логотипа появится кнопка выключения.

 

2. С помощью ресурса loaddy.com


Как измерить скорость сайта c loaddy

сервис loaddy для нагрузочного тестирования

Get a quote

 

Если нужна помощь для решения проблем со скоростью CS-Cart, то мы с удовольствием поможем!

Оставьте заявку по кнопке выше или напишите нам на почту manager@alt-team.com

 

Комментарии

Сообщения не найдены

Новое сообщение

Up