|
12 | 12 | Я решил исправить эту проблему, оптимизировав эту программу. |
13 | 13 |
|
14 | 14 | ## Формирование метрики |
15 | | -Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: *тут ваша метрика* |
| 15 | +Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: Время выполнения программы |
16 | 16 |
|
17 | 17 | ## Гарантия корректности работы оптимизированной программы |
18 | 18 | Программа поставлялась с тестом. Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации. |
19 | 19 |
|
20 | 20 | ## Feedback-Loop |
21 | | -Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за *время, которое у вас получилось* |
| 21 | +Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за 10-20 секунд. |
22 | 22 |
|
23 | | -Вот как я построил `feedback_loop`: *как вы построили feedback_loop* |
| 23 | +Вот как я построил `feedback_loop`: Создавал файл с N строк, чтобы программа могла выполнятся 10-20 секунд |
24 | 24 |
|
25 | 25 | ## Вникаем в детали системы, чтобы найти главные точки роста |
26 | | -Для того, чтобы найти "точки роста" для оптимизации я воспользовался *инструментами, которыми вы воспользовались* |
| 26 | +Для того, чтобы найти "точки роста" для оптимизации я воспользовался RubyProf, с отчетами в видел Graph и CallStack |
27 | 27 |
|
28 | 28 | Вот какие проблемы удалось найти и решить |
29 | 29 |
|
30 | 30 | ### Ваша находка №1 |
31 | | -- какой отчёт показал главную точку роста |
32 | | -- как вы решили её оптимизировать |
33 | | -- как изменилась метрика |
34 | | -- как изменился отчёт профилировщика - исправленная проблема перестала быть главной точкой роста? |
35 | | - |
36 | | -### Ваша находка №2 |
37 | | -- какой отчёт показал главную точку роста |
38 | | -- как вы решили её оптимизировать |
39 | | -- как изменилась метрика |
40 | | -- как изменился отчёт профилировщика - исправленная проблема перестала быть главной точкой роста? |
| 31 | +- CallStack показал что программа 94.55% времени тратит на Array#select. С помощью Graph стало понятно что много времени тратиться на поиск сессий пользователя. |
| 32 | +- Для решения данной проблемы, перед тем как проходится по пользователям, нужно подготовить данные users_sessions в виде хэша, ключем будет id пользователя, а значение массив его сессий, тогда мы один раз пройдемся по sessions |
| 33 | +- Время выполнения программы уменьшилось с ~20 секунд до ~1 секунды, при входных данных в 30000 строк. |
| 34 | +- Отчет профилировщика стал указывать на другие проблемы, главная точкой роста изменилась. |
41 | 35 |
|
42 | 36 | ### Ваша находка №X |
43 | 37 | - какой отчёт показал главную точку роста |
|
0 commit comments