-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Homework solution #116
base: master
Are you sure you want to change the base?
Homework solution #116
Conversation
araslanov-e
commented
Feb 14, 2025
- Оптимизировал загрузку больших данных
- Оптимизировал загрузку страницы Маршрута
- Добавил тест производительности
- Описал этапы оптимизации
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ ещё бы индексов накинуть и рендеринг коллекций заюзать
Я решил исправить эту проблему, оптимизировав эту программу. | ||
|
||
#### Формирование метрики | ||
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я добавил вывод времени выполнения программы (определяю временную метку в начале выполнения и в конце, и смотрю разницу). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
простое и достаточное решение 👍
При первом запуске программы с medium.json файлом она отработала за ~ 1 минуту. | ||
|
||
#### Гарантия корректности работы оптимизированной программы | ||
Для гарантии был добавлен тест, который в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
``` | ||
|
||
#### Профилирование | ||
Чтобы понять какие проблемы с программой, я решил использовать логи, которые записываются в `log/development.log`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Как говорит Nate Berkopec, если бы все смотрели логи, у меня не было бы работы
``` | ||
|
||
#### Профилирование | ||
Чтобы понимать какие возможны проблемы на странице я добавил "mini-profiler-resources", который показывает что происходит при загрузке страницы. Дополнительно я установил pghero, чтобы анализировать sql запросы. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
не пойму что такое mini-profiler-resources? rack-mini-profiler имеется в виду?
погуглил "mini-profiler-resources" - ничего не нашёл
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лол, даже сам не понимаю от куда я мог это взять))) да, должен быть rack-mini-profiler
#### Поиск проблем | ||
Используя mini-profiler-resources я обнаруж что на странице делается 1975 sql запросов. Pghero так же показал что есть 2 запроса, которые делаюся более 1900 раз - Автобусы и Сервисы автобусов. Предполагаю что проблема на странице N+1 проблема. Для исправления добавил includes к Trip, для того чтобы формировались несколько запросов на все данные. После этого страница стала грузится за ~2.5 секунды, а количество sql запросов стало 5. | ||
|
||
После mini-profiler-resources показал что на странице очень много рендрерится шаблонов - списка услуг и сами услуги. Я решил избавится от шаблонов и перенести всё основной шаблон. После чего страница стала грузится за 0,6 секунд |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
я уже видел в чатике, что вы уже об этом узнали, но напишу что можно было бы использовать render collection API, там можно даже задать шаблон делимитера параметром https://guides.rubyonrails.org/layouts_and_rendering.html#spacer-templates
так получается не так сильно тормозит, но при этом можно сохранить удобство разбивки вьюх по паршлам
|
||
После mini-profiler-resources показал что на странице очень много рендрерится шаблонов - списка услуг и сами услуги. Я решил избавится от шаблонов и перенести всё основной шаблон. После чего страница стала грузится за 0,6 секунд | ||
|
||
#### Результаты |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
можно было бы ещё индексов накинуть; именно для рендеринга страницы тут это не так критично, хотя тоже помогает
но если бы мы заходили с точки зрения оптимизации БД - там бы это очень сильно помогло
(в тч составной индекс можно на trips(from, to))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, про индексы я знаю, но не один инструмент не показал в этом необходимости, для large файла. Наверное с бонусными файлами потребовалось бы, но отложил их на потом.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Старался следовать философии оптимизации) оптимизировать только Главные точки и остановится когда достигли желаемого)