Жалоба была общая: «сайт тормозит, корзина и оформление особенно». Поиск по ощущениям в таких случаях не работает, поэтому начали с замеров: включили лог медленных страниц и разобрали логи веб-сервера по времени ответа.
Причина первая: права на кэш
Часть служебных скриптов запускали на сервере от имени root, и созданные ими файлы кэша получили владельца root. Веб-сервер работает от другого пользователя и перезаписать их не мог — кэш фактически перестал работать на весь сайт. Вернули владельца и зафиксировали правило: скрипты на этом сервере запускаются только от пользователя веб-сервера.
Причина вторая: расчёт персональной цены
Цена клиента считается из справочника на 23 388 записей, и выборка шла перебором без подходящего индекса. Добавили индекс и кэширование в рамках запроса: расчёт цены одного товара ускорился с 0,06–0,09 секунды до 0,0019 — примерно в сорок раз. На странице с сотней товаров это решающая разница.
Причина третья: чужой упавший сервер
В шаблоне стоял компонент, который на каждой сессии обращался к внешнему сервису разработчика темы. Сервис лежал, таймаут не был задан, и сайт честно ждал ответа до двадцати секунд. Поставили жёсткий таймаут в три секунды и запомнили неудачу на час, чтобы не стучаться повторно.
Результат
Корзина и оформление открываются за секунды, кэш снова работает, расчёт цен перестал быть узким местом. Вывод, полезный для любого проекта на готовом шаблоне: обращения к внешним сервисам внутри темы — мина, которая срабатывает в самый неподходящий момент, и обезвреживать её нужно до того, как чужой сервер упадёт.
Статья была полезна?