редакции Выбор
Как одно слово тормозило весь сайт на 3 секунды - исправляем медленную загрузку сайта на Opencart
Итак. В работу принят проект и одна из его многочисленных проблем оказалась медленная загрузка сайта.
Изучаем проблему
Компания - производитель и оптовый поставщик авторских украшений из итальянского стекла. Сайт компании — интернет-магазин дизайнерской бижутерии из стекла ручной работы. Работает на системе Opencart. Редакция 2.0.1.1.
Время отклика составляло более 5000 мс, а полное время загрузки превышало 10 секунд. Эти значения настолько высокие, что даже Google и Яндекс периодически отказывались проверять эти сайты на скорость и время отклика.
Частые проблемы Opencart
Опенкарт считается простой и удобной системой. Мы работали с сайтами на Opencart 1.5, 2.0, 3.0 и их версиями. Выделим основные проблемы системы, затрудняющие seo, продвижение и развитие сайтов:
- однотипность шаблонов;
- российское способы доставки, оплаты, 1С и другие сервисы являются дополнительными модулями, которые могут начать конфликтовать;
- недостаточная простота настройки чпу «из коробки»;
- проблемы с работой фильтров при увеличении количества товаров;
- избыточное количество строк кода в контроллерах;
- громоздские запросы к базе данных.
«Наши специалисты более 10 лет создают, продвигают и обслуживают сайты на различных cms. Если Вы хотите создать сайт и не получить вместо сайта проблемы — посоветуйтесь со специалистами APRIORUM GROUP какую систему выбрать для сайта и как сделать сайт инструментом решения бизнес-задач.»
Что рекомендуем проверять в первую очередь
При работах над ускорением сайтов есть основополагающие моменты, которые надо проверять и выполнять для любых сайтов и есть свои особенности для разных систем управления сайтами, установленных компонентов и плагинов, используемых шаблонов.
Что сделано в данном случае:
- Настроен сервер
- Обновлено серверное программное обеспечение
- Произведено сжатие html-кода
- Сжаты стили и js-скрипты сайта
- Оптимизирован php-код
- Оптимизированы изображения
- Оптимизация БД
Это позволило существенно увеличить скорость, но при этом она оставалась далеко за пределами допустимого уровня.
Реальная причина тормозов
В заголовке кейса мы обещали рассказать как всего лишь одно слово тормозило сайт. Конечно, удаление слова из текста не решило бы проблему. Но если слово является пунктом меню или другим элементом с подвязанными скриптами, обращениями к БД, то здесь и может таиться корень проблемы.
Поиск проблемы долгого отклика сайта
Нередко долгий отклик сайта связан с тем, что php-код не оптимизирован. Вот некоторые из возможных проблем:
- производится много лишний операций;
- те данные из базы, которые можно забрать одной функцией разбивается на подфункции и зацикливается;
- из базы подхватываются лишние данные — ненужные в конкретный момент описания, картинки либо неотфильтрованные по определённому полю — например, активность;
- производятся ненужные сортировки.
Иногда на некоторых системах управления также могут возникать проблемы со временем отклика из-за большого количества установленных модулей, плагинов, компонентов, решений и пр. Всё дело в том, что клиенты устанавливают плагин, активируют его. Попробовали, испытал неделю и бросили. А операции плагина, которые выполняются на каждом хите (при каждом открытии страницы), всё равно исполняются. И если установить достаточно большое количество плагинов, ещё и неоптимизированных с точки зрения PHP, скорость отклика сайта может замедлиться на значительные цифры и стать около 0.500 мс и больше.
Из всех вышеописанных ситуаций самостоятельно, без привлечения специалистов можно только деинсталлировать лишние модули / плагины, и то, только в том случае, если Вы уверены, что этот плагин действительно лишний (рекомендуем сделать бэкап перед тем, как сделать это).
Разумеется, в это проекте простым отключением модулей дело не обошлось. Проблема таилась гораздо глубже, чем казалось.
Двадцатикратное замедление действительно было связано с одним словом - «Коллекции». Если убрать эту категорию с сайта то время ответа сервера снижается с 4.000+ мс до 0.200 мс. Проблема заключалась в том, что в этой категории находится более чем 70 подкатегорий, в каждой из которых в среднем по 6 товаров. Для каждой категории нужно запросить данные — картинку, описание и пр., посчитать количество товаров в подкатегории (в коде это было далеко не самым простым способом), при этом в коде все эти процедуры, по непонятным причинам, выполнялись несколько раз. По всей видимости, один раз для верхнего меню, второй раз для бокового и контрольный на самой странице категорий. Посмотришь — глаз начинает дёргаться.
Варианты решения для ускорения сайта
Если Вы не знакомы с программированием и не хотите тратить время, самым быстрым вариантом в данном случае является отключение раздела «Коллекции». Интернет-магазин предлагает покупателям украшения с эксклюзивным характером, обладающие стилем, изысканностью и индивидуальностью и их объединение в коллекции позволяет покупателям более четко идентифицировать изделия. Для теста убираем слово «Коллекции» из меню — замер скорости показывает увеличение в 5 раз.
В данном случае отключение пункта влияло на удобство сайта для пользователей — в интернет-магазине представлено более 50 авторских дизайнерских коллекций бижутерии — и такой вариант не рассматривался.
Что в итоге — изменили код таким образом, что коллекции подхватываются из базы 1 раз, одним запросом. Количество товаров для каждой подкатегории считается сразу на уровне базы, это позволяет также дополнительно сэкономить время.
Со стороны может казаться, что сделать это было очень легко, «и вообще это делается 5 минут», «и непонятно, что вы там всё это время делаете». Однако все действия требуют отладки, тестирования. Найти конкретный участок кода, который тормозит весь сайт, тоже непросто, из-за сложной архитектуры проектов, большой структуры скриптов, которые отвечают за определенные задачи, и подключаются на каждый хит (открытие страницы). После того, как плохой участок кода найден, придумать решение и написать его — отдельная задача.
Результат виден невооруженным глазом — из сайта с откликом больше 4 секунд (как говорят пользователи - сразу возникает недоверие к таким «тупящим» сайтам), на котором находиться не очень приятно из-за очень больших задержек в открытии разделов, кликах на кнопки добавления и переходов в корзину, оформлении заказа и т.д., интернет-магазин превратился в быстрый ресурс.