Skip to content

Commit 0a9e95b

Browse files
committed
Optimization hardcode-dev#1 - added select_sessions_for_users method
1 parent c27da02 commit 0a9e95b

9 files changed

Lines changed: 50968 additions & 16 deletions

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
.DS_Store
12
data_large.txt
3+
data_prof.txt
24
result.json

case-study.md

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,26 @@
1212
Я решил исправить эту проблему, оптимизировав эту программу.
1313

1414
## Формирование метрики
15-
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: *тут ваша метрика*
15+
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: Время выполнения программы
1616

1717
## Гарантия корректности работы оптимизированной программы
1818
Программа поставлялась с тестом. Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации.
1919

2020
## Feedback-Loop
21-
Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за *время, которое у вас получилось*
21+
Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за 10-20 секунд.
2222

23-
Вот как я построил `feedback_loop`: *как вы построили feedback_loop*
23+
Вот как я построил `feedback_loop`: Создавал файл с N строк, чтобы программа могла выполнятся 10-20 секунд
2424

2525
## Вникаем в детали системы, чтобы найти главные точки роста
26-
Для того, чтобы найти "точки роста" для оптимизации я воспользовался *инструментами, которыми вы воспользовались*
26+
Для того, чтобы найти "точки роста" для оптимизации я воспользовался RubyProf, с отчетами в видел Graph и CallStack
2727

2828
Вот какие проблемы удалось найти и решить
2929

3030
### Ваша находка №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+
- Отчет профилировщика стал указывать на другие проблемы, главная точкой роста изменилась.
4135

4236
### Ваша находка №X
4337
- какой отчёт показал главную точку роста

0 commit comments

Comments
 (0)