Сайт стал быстрее в 5 раз. Рассказываю, что чинил и почемуСайт стал быстрее в 5 раз. Рассказываю, что чинил и почему
С чего всё началось
С жалобы. Один из вас написал: «сайт замирает при переходах, невозможно работать».
Не буду делать вид, что это было недоразумение. Я сел, замерил — и всё подтвердилось. Переход между разделами действительно занимал секунды, а на дашборде можно было успеть налить кофе.
Причина, в общем-то, приятная: база выросла. Сейчас в ней 2.18 миллиона закупок. Запросы, которые год назад отрабатывали мгновенно, на таком объёме начали захлёбываться. Так бывает со всеми растущими сервисами — вопрос только в том, замечает это владелец или ждёт, пока пользователи разбегутся.
Что изменилось в цифрах
Страница дашборд 9.5с уменьшил до 1.9с
Страница поиск 7.3с уменьшил до 0.6с
Страница горящие 2.3с уменьшил до 0.9с
Страница банкротство с 0,6с-. 0.5 с
Замер честный, без подгонки: залогиненный пользователь, полная загрузка страницы, медиана из трёх прогонов. Один и тот же сценарий до и после — иначе цифры не значат ничего.
Что вы почувствуете в работе
Цифры — это хорошо, но важнее ощущения. Вот что изменилось на практике:
Возврат назад стал мгновенным. Если вы заходили в раздел меньше 30 секунд назад, браузер покажет его сразу, вообще не обращаясь к серверу. Просмотр списка → карточка → назад → следующая карточка — теперь это работает в темпе вашей мысли, а не сервера.
Вместо «замирания» — скелетон. При переходе в новый раздел сразу появляется каркас страницы. Вы видите, что сайт вас услышал, а не гадаете, прошёл клик или нет.
Дашборд собирается по частям. Раньше журнал сделок держал всю страницу: пока он не загрузится, вы не видели ничего. Теперь плитки появляются сразу, журнал подтягивается следом.
«Тендеры» в шапке ведут сразу в кабинет. Если вы залогинены, лишней промежуточной страницы больше нет. Мелочь, но вы кликаете туда десятки раз в день.
Что было под капотом
Для тех, кому интересно, — три пункта без занудства.
Девяносто процентов времени жило в базе. Одна функция поиска, которую вызывает каждый раздел сайта, на выросшем объёме деградировала до 7.5 секунды на вызов. Пришлось переписать её в три захода: добавить индексы под сортировки, переработать сам запрос и научить его выбирать разный путь в зависимости от того, насколько частая фраза ищется. Теперь раздел без фильтров отдаётся за 16 миллисекунд, редкая фраза — за 24, самая частая — за треть секунды.
Сервер ходил к своей же базе через интернет. Каждый переход тянул до девяти запросов, и каждый уходил наружу через публичный адрес, теряя от 40 до 200 миллисекунд. Теперь всё общение происходит внутри сервера — 2–6 миллисекунд. Плюс проверка авторизации выполнялась трижды на страницу вместо одного раза.
Ответы сервера не сжимались вообще. Настроил сжатие — трафик при переходах упал в разы. Особенно заметно с мобильного интернета.
Чего я НЕ трогал — и это, пожалуй, главное
Логику отбора закупок. Ни одной строчки. Тот же поисковый запрос, что вы вводили вчера, вернёт ровно те же закупки в том же порядке — просто быстрее.
Это принципиальный момент. Ускорять сервис можно по-разному, в том числе за счёт «а давайте будем показывать поменьше и поприблизительнее». Так я не делаю: вы принимаете по этим данным решения на миллионы, и подвижки в выдаче обошлись бы вам дороже, чем любые секунды. Перед выкаткой прогнал 13 наборов проверок, которые сравнивают результаты до и после — все совпали.
Почему я вообще об этом пишу
Потому что хочу, чтобы вы видели схему, по которой сервис живёт:
Ваша жалоба → замер → правка → повторный замер → отчёт вам.
Это обновление появилось не потому, что я однажды решил заняться скоростью. Оно появилось, потому что конкретный человек написал конкретную претензию — и она оказалась справедливой.
Если что-то в сервисе неудобно, медленно или работает не так, как вы ожидаете — напишите. Я читаю всё. Половина того, что сейчас в сервисе есть, появилась из таких сообщений.
Что дальше
Скорость — не разовая акция. База продолжит расти, и то, что сегодня отдаётся за 16 миллисекунд, через год снова начнёт проседать. Поэтому замеры теперь регулярные, а не «когда пожалуются».
ссылка на сайт 👉
Спасибо тем, кто пишет о проблемах вместо того, чтобы молча уходить. Вы делаете сервис лучше буквально своими руками.