-
Notifications
You must be signed in to change notification settings - Fork 24
Trying to make script faster + case study #10
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
base: master
Are you sure you want to change the base?
Conversation
|
|
||
| ### Находка №4 | ||
| Запустила ruby-prof+qcachegrind. Стало очевидно, что наибольшее число аллокаций происходит при переборе массивов при вызове метода collect_stats_from_users. Проблема в том, что метод вызывается 7 раз для сбора информации, когда можно всё собрать за один проход. Тем более, что выше уже есть перебор всех пользователей для сбора user_objects. Гипотиза - переписать сбор данных в один проход по массиву пользователей. | ||
| Думала, что данная оптимизация принесёт больше пользы. |
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.
Хм, мда. А map'ы то я не убрала 🤔 Видимо, останутся на следующую порцию оптимизаций.
spajic
left a comment
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.
Approve + some comments
| ### Находка №2 | ||
| При запуске memory_profiler становится очевидным, что происходит постоянное создание одинаковых строк, которые являются ключами в хэшах. | ||
| Заменим строки на символы. Попутно, убрав из хэшей пользователя и сессия не используемые данные. | ||
| Эта оптимизация позволила сократить время работы скрипта до 11.21 сек. |
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.
А какое было изначально?
| Думала, что данная оптимизация принесёт больше пользы. | ||
| Теперь файл в среднем обрабатывается ~0.41 сек при потреблении ~34 Мб памяти. | ||
| То есть улучшения в рамках погрешности. | ||
| Возможно как-то связано с использованием патченой версии руби для этой итерации. |
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.
Измерения лучше проводить в равных условиях.
То есть, чтобы воспользоваться профилированием памяти и посмотреть отчёт - воспользоваться патченной версией можно.
Но проверить влияние сделанных изменений на метрику корректно на той версии Ruby, в которой делались остальные замеры метрики.
| Полный файл с данными обрабатывается за 78.09 сек, при этом выполнение скрипта потребляет 2894 Мб памяти. | ||
|
|
||
| ## Защита от регресса производительности | ||
| Для защиты от потери достигнутого прогресса при дальнейших изменениях программы сделано хммм... ничего? |
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.
Тут предполагалось написать тестик, но можно в ДЗ №2
| @sessions = sessions | ||
| end | ||
| end | ||
| SEPARATOR = ','.freeze |
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.
Можно ещё было заюзать волшебный коммент # frozen_string_literal: true
No description provided.