Сайт стал быстрее в 5 раз. Рассказываю, что чинил и почемуСайт стал быстрее в 5 раз. Рассказываю, что чинил и почему

Сайт стал быстрее в 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 миллисекунд, через год снова начнёт проседать. Поэтому замеры теперь регулярные, а не «когда пожалуются».

ссылка на сайт 👉

Спасибо тем, кто пишет о проблемах вместо того, чтобы молча уходить. Вы делаете сервис лучше буквально своими руками.

1