Внутреннее веб-приложение для ведения бюджетов компании.
Приложению уже более 6 лет.
В нашу комманду оно попало уже в очень печальном состоянии.
Большинство страниц загружается по несколько секунд, формирование отчетов занимает несколько минут, а часть данных обновляется только в ночное время и это может занимать почти час.
Мониторинга нет
По большей части оптимизация на протяжении нескольких месяцев производилась "подпольно", даже фоново. То в одной задаче запрос поправится, то в другой немного оптимизмруется алгоритм.
Был внедрен рубокоп, чтобы кодстайл в порядок привести.
Апнули версии Ruby с 2.4.2 до 2.6.10, и Rails с 5.1.4 до 5.2.8
В ноябре случилось (почти) не предвиденное. Приложение стало совсем медленным, те страницы, которые раньше грузились по несколько секунд, стали загружаться минутами, а те, что до этого грузились минуту, просто уходили в вечную загрузку.
Решили начать с оптимизации запросов, по логом было видно, что при загрузке страниц не мало времени занимают запросы в БД. Поставили rack_mini_profiler. Один из кейсов: Обнаружили, что на одной из проблемных страниц при каждой загрузке в базу летело почти 4000 запросов. В результате из количество удалось снизить до 60 штук. Время загрузки сократилось в 12 раз. Казалось бы пара инклудов и такой результат. Схожим образом удалось уменьшить количество обращений в базу еще в нескольких отчетах.
Также путем анализа фрагментов кода (как было показано в 4 лекции), удалось оптимизировать методы в которых была заложена бизнес логика. Оптимизация включала разбиение на более простые методы, использование мемоизации, избавление от части циклов, в том числе вложенных.
Заменили гем для работы с джейсоном на более шустрый.
Добавили тесты для контроля регрессии.
Эти оптимизации позволили ускорить работу нескольких отделов и многих сотрудников, которые так же работают с данной системой. Думаю пару часов в месяц, которые пользователь тратил на ожидание, точно сэкономили, а кому-то улучшили ментальное здоровье (и сэкономили на психологе). Если предположить, что пользователи, которые часто работают с отчетами теперь будут получать их быстрее, то работа их будет выполняться в срок с теми же человеко ресурсами, что позволяет компании сэкономить на 1-2 сотрудника на отдел. Возьмем ср зарплату по стране за схожие вакансии 60 000 руб (на руки), в перспективе за год это экономит порядка 2 000 000 руб, с учетом налогов.
На этом останавливаться не будем работы впереди еще много. Пожелайте мне удачи )
Интересно посмотреть, что получится в итоге.