Рефакторинг кода
Основным достижением рефакторинга было значительное сокращение времени рендеринга раздела «Банкетные залы» на сервере благодаря переносу взаимодействия с сервисом BookBanket в фоновый процесс, выполняющийся по расписанию, тогда как ранее данные получались в режиме реального времени, что сильно тормозило процесс. Параметры заведений, необходимые для сортировки и фильтрации, теперь сохраняются в базу данных сайта, а SQL-запросы были переработаны и оптимизированы.
До рефакторинга запрашивались все рестораны и банкетные залы, а не только те, в которых нуждалась текущая страница. При действовавшей реализации добавление новых ресторанов неизбежно привело бы к увеличению и без того неприемлемого времени загрузки страницы.
Выявлено несколько таблиц, содержащих устаревшие записи, которые уже не использовались. Для таких таблиц добавлены скрипты очистки и упаковки по расписанию. Например, время простейшего запроса к таблице vieweds
составляло 13 секунд, а численность записей — порядка 10 млн. Было прописано удаление записей старше 120 дней, а упаковка таблицы командой VACUUM
сократила размер с 9 гигабайт до 37 мегабайт.
До рефакторинга серверный кэш использовался нерационально, не для уменьшения количества запросов API и не для сокращения обращений к базе данных, а как промежуточное средство хранения и передачи данных между множеством методов. Значения из кэша не использовались повторно в процессе серверного рендеринга, а постоянно обновлялись, что не давало какого-либо прироста производительности. По некоторым полям, которые хранились в кэше, требовалось производить сортировку и поиск. Вместо быстрых средств СУБД задача выполнялась на языке прикладного уровня; как результат — усложнение кода, увеличение (а не уменьшение!) количества запросов к базе и потеря производительности. Был удален лишний код, который оказался бессмысленным после рефакторинга.
Ресторан скрывался, если, например, при запросе по API происходила сетевая ошибка или BookBanket был временно недоступен. Поскольку ошибки носили случайный характер, при запросах одной и той же страницы отображались разные списки заведений.
Помимо рефакторинга были произведены множественные правки в верстке и функционале по нескольким разделам сайта. Исправление дефектов ранжирования банкетных залов по цене и способу расчета стоимости улучшило пользовательский опыт. Добавление SMS-авторизации на сайте также сделало работу пользователя удобнее. И наконец, исправлены ошибки счетчика страниц и пагинатора.
Вместо заключения