К нам обратилась компания с большим интернет-магазином серверного оборудования на WordPress + WooCommerce. Сайт работал медленно — это было заметно и пользователям, и в метриках. Клиент хотел разобраться, в чём проблема, и исправить ситуацию.
Мы провели технический аудит, по итогам которого составили отчёт и план работ.
Что нашли при аудите?
Первый же замер показал: сервер начинает отдавать HTML главной страницы только через 4,2 секунды после запроса, а некоторые страницы и через 13 секунд. Почти всё это время уходит до первого байта — то есть на серверной генерации страницы.
Дальнейший анализ выявил несколько проблемных слоёв.
Что тормозило?
Кэш страниц не работал. Заголовки ответа прямо говорили: страница генерируется заново при каждом запросе.
Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Блокирующие скрипты в критическом пути рендера. На странице: 19 скриптов: 16 CSS и 3 JS. Шесть из них грузятся со сторонних сайтов: шрифты, Google Translate, Cloudflare Captcha. Самый тяжёлый занимает 403 мс. TotalBlockingTime страницы — 2242 мс.
Плагины генерировали огромную нагрузку. На одной странице товара с модулем энциклопедиии:
- 89 000 вызовов внутреннего PHP-кода
- 120 дублирующих запросов к базе данных
Encyclopedia Lite и WooCommerce при каждой загрузке страницы генерировали это заново.
Изображения весят до 50 МБ без сжатия и без предзагрузки.
Устаревший стек. PHP, MySQL, Redis, Apache и сама ОС — всё работало на старых версиях с накопившимися runtime-ошибками. Ошибки логировались при каждом запросе, создавая дополнительную нагрузку на диск.
Redis настроен неоптимально — повышенный расход памяти снижал общую производительность сервера.