Conversation
| @@ -0,0 +1,61 @@ | |||
| class Parsing | |||
| Еще добавлен тест на время выполнения теста. | ||
|
|
||
| ## Feedback-Loop | ||
| Для того, чтобы иметь возможность быстро проверять гипотезы я выстроил эффективный `feedback-loop`, который позволил мне получать обратную связь по эффективности сделанных изменений за *время, которое у вас получилось* |
| Моя первая цель ускорить обработку файла в 25 000 срок до 2 секунд. Это примерная оценка из "потолка". | ||
|
|
||
| ## Формирование метрики | ||
| Для понимания процесса обработки данных я использовал метрику *Benchmark*. Так я могу видеть время работы программы |
There was a problem hiding this comment.
У нас получается в процессе этой работы несколько метрик:
- время обработки файла X
- время обоработки файла Y
- время обработки файла Z
каждую метрику мы используем только для того чтобы понять что очередная итарация оптимизации была успешной, глобального смысла они не имеют, но они и не обязаны его иметь
|
|
||
| ### Моя находка №1 | ||
| - Ruby-prof в режиме Graph так же показал точку роста в Array#select | ||
| - Самое главное что я сделал, это первую обработку данных. Что бы все было структурировано и была некая связь между пользователем и его сессиями. После этого внес правки в весь код, что бы тесты начали выполняться |
There was a problem hiding this comment.
по описанию не совсем понятно что было сделано; если имеется в виду мощный рефакторинг на отдельные классы, то это оверкилл скорее
самый мощный эффект даёт простая группировка данных в хэш
тут собственно сложность становится линейной, это самое важное изменение по сути дела; поэтому такое большое значение и придаётся сложности алгоритмов, что она оказывает самое большое влияние на результат
|
|
||
| - StackProf показал основное время работы в Object#work | ||
|
|
||
| - StackProf в формате json на много интереснее получается и так же информативно |
There was a problem hiding this comment.
stackprof + speescope = one love
| - Ruby-prof в режиме Graph так же показал две точки роста 71% в Object#collect_stats_from_users и 50% в Array#map | ||
| - Я решил изменить метод collect_stats_from_users и теперь он сам обрабатывает все данные, без передачи блока и лишнего обхода в цикле | ||
| - А вот метрика не сильно изменилась, нужно менять подход | ||
| - Проблема сохраняется, нужно внести изменения в исходные данные |
There was a problem hiding this comment.
не совсем понял в каком смысле изменения в исходные данные
|
|
||
| ## Результаты | ||
| В результате проделанной оптимизации наконец удалось обработать файл с данными. | ||
| Мне удалось обработать весь файл в среднем на 28 секунд. Это укладывается в мой бюджет. |
No description provided.