редакции Выбор
Как одно слово тормозило весь сайт на 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 минут, и непонятно, что вы там всё это время делаете. Однако все действия требуют отладки, тестирования. Найти конкретный участок кода, который тормозит весь сайт, тоже непросто, из-за сложной архитектуры проектов, большой структуры скриптов, которые отвечают за определенные задачи, и подключаются на каждый хит (открытие страницы). После того, как плохой участок кода найден, придумать решение и написать его — отдельная задача.