Мета-данные
20.12.2016
Переустановка модуля в CS-Cart
26.04.2017

Оптимизация скорости работы CS-Cart

Оптимизация скорости работы CS-Cart

Всем привет!

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

Итак:

1. Почему CS-Cart тормозит?

2. Как вывести магазин в зеленую зону Google PageSpeed Insights?

3. Как выбрать сервер для CS-Cart?

Данные вопросы тесно взаимосвязаны, и для того, чтобы дать на них ответ, я хочу кратко ознакомить Вас с теорией.

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

С теми же, кто хочет расширить диапазон своих знаний, давайте продолжим.


Почему CS-Cart тормозит?

Итак, что влияет на скорость работы интернет-магазина? Давайте рассмотрим простую схему.

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

Ваш потенциальный покупатель садится за компьютер (или берет в руки телефон) и набирает в строке браузера адрес интернет-магазина. Браузер в свою очередь обращается к серверу, где установлен CS-Cart (для тех, кто не знает, CS-Cart работает на стеке технологий HTML/CSS/Less, JavaScript/Jquery, Smarty, PHP, MySQL). Таким образом, сервер начинает обрабатывать PHP файл, который обращается к другим PHP файлам, подключает Smarty, LESS, исполняет файлы этих библиотек, посылает определенные запросы в MySQL, получает ответы, обрабатывает их, компилирует конечный результат, и отправляет обратно браузеру. Браузер обрабатывает полученный ответ и отображает результат покупателю.

Та же самая схема срабатывает когда покупатель переходит по разделам магазина, смотрит товары, добавляет их в корзину и оформляет заказ.

Так что же влияет на скорость работы интернет-магазина?

1.Скорость соединения. Т.е. скорость с которой браузер может взаимодействовать с сервером.

2.Скорость обработки браузером информации.

Которая складывается из:

2.1. Скорости выполнения JavaScript.

2.2. Объема графики на сайте.

2.3. Количества выводимой информации на сайте.

3.Скорость обработки информации сервером.

Которая в свою очередь зависит от:

3.1. Мощности сервера.

3.2. Конфигурации программного обеспечения сервера.

3.3. Скорости исполнения PHP файлов.

3.4. Скорости исполнения Smarty файлов.

3.5. Скорости выполнения MySQL запросов.

3.6. Количества одновременных запросов на сервер.

Теперь, чуть подробнее.

Скорость соединения

Сюда я включаю скорость взаимодействия сервера с клиентом. Время от времени к нам обращаются клиенты, сервера которых находятся на другом конце света. Как правило это не вызывает никаких проблем, однако есть хостинг провайдеры, до которых любой запрос из России идет очень долго и не менее долго приходит от них ответ. Совсем недавно была подобная ситуация с сервером, который располагался всего в тысячи километров от нас, в Москве. Не будем углубляться в детали почему это происходило, просто помните, что выбирая сервер нужно учитывать территориальность ваших клиентов, их удаленность от сервера и скорость, с которой сервер будет отвечать на их запросы.

Скорость обработки браузером информации

Браузер, через который вы просматриваете сайт, потребляет определенное количество ресурсов компьютера и чем больше информации он обрабатывает, тем больше ресурсов ему для этого требуется.

Таким образом, если на страницах вашего интернет-магазина много сложных скриптов, громадное количество текста или изображений, то вполне может произойти ситуация, что, пытаясь обработать весь этот объем информации, браузер будет потреблять все ресурсы машины и она будет тормозить.

И, соответственно, чем слабее компьютер у Вашего потенциального клиента, тем тяжелее его машине будет обрабатывать информацию сайта.

* Часто встречающиеся проблемы

Изображения заведомо большего размера

Как я упоминал выше, очень частой причиной медленной скорости сайта является использование изображений больших размеров. Однако есть более тонкая ситуация, когда проблему не видно сразу. Т.е. вы увидите маленькое изображение, однако в действительности оно огромных размеров и просто уменьшено за счет свойств тега html.

В данном примере, на страницу подгружаются изображения размеров 3615px на 3615px.

Тема с неоптимизированным JavaScript

Очень внимательно относитесь к теме, которую собираетесь приобрести. Перед покупкой протестируйте ее в Google PageSpeed Insights и проверьте результаты. Если результаты не входят в зеленую зону, то подумайте еще раз перед ее приобретением. Никакая красота не должна конкурировать с юзабилити и производительностью. Помните, что мы живем в быстро развивающемся информационном обществе, где люди практически полностью утратили способность ждать, по крайней мере загрузки страницы в своем браузере.

Скорость обработки информации сервером

На обсуждении этого вопроса мы остановимся чуть подробнее.

Любое программное обеспечение работает используя ресурсы железа. Если рассматривать версии CS-Cart 4.4.x, то архитекторы CS-Cart отлично потрудились над оптимизацией продукта, и он работает гораздо быстрее своих предшественников. PHP, MySQL, Smarty в нем уже великолепно оптимизированы, и если вы хотите получить движок с тем мощным функционалом, который предлагается из коробки, то улучшить его будет крайне проблематично и не оправдает тех затрат, которые для этого потребуются.

Другой вопрос, если вам требуется оптимизировать функционал, когда некоторые функции можно убрать в силу того, что вы ими не пользуетесь. Обычно такое решение принимается в масштабных проектах или когда магазин уже проработал несколько лет и совершенно ясно, что определенные функции просто дополнительно нагружают сервер.

* Часто встречающиеся проблемы

Команды по расписанию

Обратите внимание, что такие процессы как выгрузка из 1С, какая-либо иная синхронизация магазина с третьесторонним сервисом, резервное копирование магазина по расписанию, также потребляют ресурсы сервера. Во время выполнения таких событий скорость загрузки страниц для пользователей может падать.

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

Автоматическая очистка кеша

Как вы видели из результатов тестирования, страницы без кеширования тратят намного больше ресурсов, чем закешированные. И само время загрузки страниц также существенно отличается. В CS-Cart есть замечательный параметр, который помогает проводить отладку магазина перед запуском, однако сильно грузит магазин. Поэтому всегда проверяйте его состояние. Им можно управлять на странице Панель администрирования > Дизайн > Темы.

Режим разработчика

По умолчанию, строки кода, отвечающие за включение данного режима расположены и закомментированы в файле config.local.php, однако бывает, что нерадивые разработчики используют данный код в самых непредсказуемых местах.

Излюбленные места для добавления режима разработчика:

  • Непосредственно тот самый config.php. Но случается, что разработчик вставляет код просто в самое начало файла, даже не удосужившись пролистнуть файл вниз и раскомментировать нужную строку.
  • config.local.php
  • init.php

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

Модули, тема, третьесторонние модификации

Всегда обращайте внимание на то, каким образом изменилось быстродействие Вашего магазина после установки того или иного модуля. Чем более сложный функционал у модуля, тем с большей долей вероятности он может привести к тормозам.

Речь идет не только о приобретенных готовых к использованию модулей, но и кастомных разработках.

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

Теперь рассмотрим вопрос мощности и конфигурации программного обеспечения сервера.

В документации CS-Cart заявлено, что для работы стандартного интернет-магазина на базе CS-Cart 4.1.x с посещаемостью 50 посетителей в час достаточно одноядерного процессора 2.4 ГГц и 1024 Мб оперативной памяти.

Я решил проверить справедливо ли это для 4.4.x Мы приобрели виртуальный сервер с одним ядром процессора Intel Xeon E5620, 2.4Ghz и 1024 Mb оперативной памяти. На сервер установили Ubuntu 16.04 x64, использовали PHP7, комбинацию apache + Nginx и ZendOpcache. Не ради рекламы, но для того, чтобы показать каким образом далее проходило мое взаимодействие со службой поддержки хостинга, скажу, что сервер был заказан у компании Айхор Хостинг (см. раздел “Как вывести магазин в зеленую зону Google Page Insights?”).

Далее я установил на этот сервер CS-Cart 4.4.2 международная сборка и провел следующий эксперимент.

Я запустил команду top из консоли и начал смотреть, как загружают сервер те или иные процессы во время работы с магазином. Главным образом нас должны интересовать процессы httpd, nginx и mysqld. Nginx и mysql потребляли незначительное количество ресурсов, поэтому я не стал акцентировать на них внимание и в таблице привел результаты работы httpd, который главным образом грузил центральный процессор.

Вот результаты, которые я получил.

Как мы можем видеть наш сервер достаточно успешно справляется с нагрузкой при работе с ним одного человека в текущий момент времени.

Что же будет происходить с интернет-магазином, если на нем будут работать сразу несколько человек? В теории, каждый поток процессора будет обрабатывать запросы пользователей один за другим в порядке очереди. Это можно сравнить с полосами движения по мосту. Где полоса движения это поток ядра процессора, а автомобили это сами процессы. В ситуациях, когда идет плотный поток автомобилей, образуется пробка и некоторым автомобилям приходиться ждать момента, когда они смогут въехать на мост.

Чтобы посмотреть, как это работает на практике, можно воспользоваться утилитой Apache Benchmark. Данная утилита позволяет послать на сервер несколько одновременных запросов и получить некоторую полезную информацию о результатах их обработки. Кстати, еще в далеком 2010 году, я написал подробную статью на эту тему. Она так и называется “О чём говорит Apache Benchmark?”. Для тех кому интересно, можете загуглить.

Я запустил нагрузочное тестирование с помощью Apache Benchmark и посмотрел, как поведет себя наш магазин под этой нагрузкой, если я просто буду просматривать страницы как обычный пользователь.

ab -c10 -n100 http://our-test-store.com

Данным запросом мы имитируем 10 одновременных запросов к главной странице интернет-магазина. И выполняем данную имитацию 10 раз.

Так, при использовании магазина через браузер, при такой нагрузке, главная страница для меня загружалась около 2.5 секунд. По карточке товара результат получился 3.5 секунды.

Кроме фактического тестирования, у нас есть данные, предоставленные Apache Benchmark. Они показывают нам, что в результате 10 тестов, в которых запускалось 10 запросов одновременно было успешно выполнено все 100. Среднее время обработки запроса составило 1.496 секунды. Самый долгий запрос обрабатывался 1.713 секунд, а самый быстрый 1.366 секунд.

Если переводить на язык посетителей магазина, то один человек будет ждать 1.366 секунд, а другой 1.733 секунд, пока загрузится страница. Не забывайте, что фактически мы ждали 2.5 секунды. Видимо это связано с тем, что ab не учитывает скорость обработки и вывода браузером информации.


* Важно

Кроме обычных посетителей по сайту также могут ходить различные индексирующие роботы, которые неизбежно создают дополнительную нагрузку.

Для наглядности я также выполнил аналогичные действия на нашем тестовом сервере с 4-х ядерном процессором Intel Xeon D 1520, 8-ю потоками по 2.8Ghz и 32 Gb оперативной памяти. На сервере установлена CentOS 6.7, PHP5, Apache + Nginx и ZendOpcache. Вот какие результаты я получил с помощью команды top:

Результат ab тестирования:

Фактически, в процессе тестирования, главная страница загрузилась за 1.13 секунды:

Как видите скорость загрузки страниц на нашем корпоративном тестовом сервере значительно выше. Однако это связано не только мощностью и типом процессора, но и со спецификой настройки серверного программного обеспечения. Об этом будет подробнее написано ниже.


Как вывести магазин в зеленую зону Google PageSpeed Insights?

Результаты моих экспериментов показали, что несмотря на хорошую скорость загрузки при использовании одноядерного процессора 2.4Ghz, Google Page Insights показывает красную зону:

В отличии от магазина, установленного на 4-х ядерном сервере.

Но как вывести магазин в зеленую зону с одноядерным сервером 2.4Ghz?

Удивленный результатами, я начал просматривать рекомендации Google.

Далее, я написал в службу поддержки Ахор Хостинг с просьбой выполнить рекомендации Google. Взяв с меня 1000 рублей, они написали, что выполнили оптимизацию сервера. Я решил сразу же проверить результат и получил заветную зеленую зону:

В итоге мы получили следующую конфигурацию сервера:

  • Ubuntu 16.04
  • PHP7 (ZendOpcache, Memcache, Memcached)
  • Apache (mod_deflate)
  • Nginx (HttpGzipModule)
  • MySQL

Более подробную конфигурацию вы можете получить по ссылке.


Как выбрать сервер?

Для того, чтобы выбрать сервер нужно иметь следующую информацию:

  • Прогноз посещаемости сайта.
  • Количество одновременных посетителей в пики активности.
  • Количество одновременных действий, таких, как, например, заказ.
  • Как часто и в каком объеме будет меняться каталог интернет-магазина.
  • Как часто будет происходить синхронизация с какими-либо сервисами.
  • Как часто будет происходить создание резервных копий.

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

Перед выбором сервера необходимо иметь при себе упомянутую выше информацию и уже на основе нее и полученных в ходе эксперимента с Apache Benchmark данных подбирать сервер, который сможет выдерживать нагрузки.

На начальных этапах многим будет достаточно запустить магазин на сервере, который обозначен в документации CS-Cart и уже по мере развития увеличивать мощности.

В заключение хочу рассказать одну историю, которая произошла в 2016 году. Один наш постоянный клиент жаловался на медленную скорость интернет-магазина. После исследования стало ясно, что серверу недостаточно ресурсов: процессорных мощностей и дискового пространства. Магазин оптовый и заказы на нем оформляются с количеством товаров в размере 100-200 наименований. А посетителей на сайте бывает до 50 человек одновременно. Помимо этого магазин работает практически без кеша, так каждый час происходит выгрузка новых товар и обновление остатков. Клиенту было предложено провести полную оптимизацию магазина и перевести сайт на другой более мощный сервер, даже два сервера. Один для базы данных, а другой для приложений. Процедура достаточно дорогостоящая и клиент каждый раз откладывал принятие решения по данной работе и просто просил удалить ненужные файлы, перезапустить сервис и совершить прочие действия, которые откладывали неизбежное. Спустя несколько месяцев удалять стало нечего, перезагрузка сервисов и прочие временные решения, которые помогали ранее, перестали работать. Магазин просто встал. Разумеется на этот раз клиент согласился заплатить любые деньги лишь бы магазин работал и привести его в порядок на будущее. Процедура оптимизации интернет-магазина требовала минимум месяц непрестанной работы, чтобы тщательно пересмотреть весь код и продумать новые алгоритмы его более быстрой работы. Нам удалось оживить магазин клиента и продержать его в полурабочем состоянии на протяжении этого времени и в конечном итоге все закончилось хорошо. А после оптимизации клиент остался более чем доволен.

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

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

Итак, давайте подведем итоги и сформулируем лаконичные ответы на все вопросы, которые были озвучены в начале.


Почему CS-Cart тормозит?

  • Сервер недостаточно мощный.
  • Неудачная конфигурация сервера.
  • Низкая скорость передачи данных между клиентами и сервером.
  • Большое количество / неграмотно написанный код JavaScript (тема, модули, третьесторонние модификации).
  • Большое количество графики / графика размера больше требуемого.
  • Большое количество подаваемой информации на странице.
  • PHP код, MySQL запросы, Smarty код (тема, модули, третьесторонние модификации).

Как вывести магазин в зеленую зону Google PageSpeed Insights?

  • Перенесите магазин на сервер с рекомендуемыми параметрами железа. Для стандартного CS-Cart 4.4.x минимум - CPU 2.4Ghz, RAM 1024MB.
  • Запросите рекомендованную конфигурацию сервера: Linux, PHP7 (ZendOpcache, Memcache, Memcached), Apache (mod_deflate), Nginx (HttpGzipModule), MySQL.
  • Сократите количество графики на страницах.
  • Сократите количество информации, отображаемой на странице.
  • Отключите / смените тему, если она использует “плохой JavaScript”, или запросите ее оптимизацию.
  • Отключите модули, которые нагружают сервер, или запросите их оптимизацию.

Как выбрать сервер?

  • Определите какое максимальное количество пользователей бывает одновременно на вашем сайте.
  • Определите максимальное количество одновременных действий, таких, как, например, заказ.
  • Определите как часто и в каком объеме будет меняться каталог интернет-магазина.
  • Определите как часто будет происходить синхронизация с какими-либо сервисами.
  • Определите как часто будет происходить создание резервных копий.
  • Вам необходимо иметь уже готовый интернет-магазин, чтобы понимать как его работа нагружает сервер.

Имея эти данные и результаты экспериментов с Apache Benchmark, которые мы получили выше, можно ориентировочно подобрать сервер. Если для Вас это все еще затруднительно, то лучше передать упомянутые данные разработчику и попросить проконсультировать Вас.

Если говорить о стандартном CS-Cart 4.4.x и взять в расчет, что загрузка страницы за 2-3 секунды это удовлетворительный результат, то:

для 12 одновременно пребывающих на сайте пользователей достаточно одноядерного сервера 2.4 Ghz, 1024 Mb оперативной памяти;

для 45 одновременно работающих на сервере пользователей, необходим сервер с 4 ядрами по 2.8 Ghz. 8 Gb оперативной памяти будет более чем достаточно;

Надеюсь информация оказалась для Вас полезной. Всем высоких прибылей и всего наилучшего.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>