Skip to content

Conversation

@VidgarVii
Copy link

Проделал первоначальный рефакт кода.
С каждой итерации собирал профайл и выявлял точку старта.

Copy link
Collaborator

@spajic spajic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

approve + some comments


## Формирование метрики
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: *тут ваша метрика*
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: Количество итераций в секунду.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Количество итераций в секунду на каком объёме данных?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, не очень удобная метрика с учётом того, что наша программа выполняется намного меньше одного раза в секунду.

Программа поставлялась с тестом. Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации.
При чтении и парсинга файла data.txt Выходные данные из benchmark-ips

`2.995k (± 1.5%) i/s`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Что-то не то, не может быть 3000 итераций в секунду.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это тестовый файл с 3 пользователями. При этом rspec был зеленый. Файл формировался корректно. Такие вот цифры..

## Гарантия корректности работы оптимизированной программы
Программа поставлялась с тестом.
Выполнение этого теста в фидбек-лупе позволяет не допустить изменения логики программы при оптимизации.
Для упрощение кода и выделение абстракций я вынес тестирование программы в отдельную директорию `spec`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Добавил возможность менять подключаемый файл с данными и отключение GC. Через аттрибуты метода work.
Для поиска точки роста использовал профилировщики:
* rbspy - не дал результатов. Основная нагрузка была в самом block in work. Метод work грамозкий и является антипатерном GodObject.
Для получения более подробной информации метод надо разбить на простые методы.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Довел код до зеленных тестов. Пока получилось правда с запашком.

Треды не включал. Всё происходит синхронно. Тесты запускаю в IDE Rubymine, что возможно могут дать не точные результаты.
А они вообще могут быть точными?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, performance-тесты CPU всегда недетерминированные.

#### Результат ruby-prof на большом файле
А тут уже интересно)
```
Total: 36.541374
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В бюджет 30 секунд не удалось уложиться?

Copy link
Author

@VidgarVii VidgarVii Aug 3, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Честно говоря можно и в меньше уложиться. Есть идеи как всё реализовать. Убрать класс Юзер. Имхо это лишняя абстракиця в данной момент. Можно сделать всё как бы в лоб. Так как это маленькая консольная утилита. Формировать первоначальный массив с меньшим кол-вом данных. Попробовать использовать волокнами или очередями для управления потоками. И должно всё гуд. Так же можно было воспользоваться чанками при чтении файла. Честно говоря приходя с работы я уже падал на диван и ни чего не хотелось делать( Мой косяк

@vkurennov vkurennov closed this Jan 24, 2020
smaximov added a commit to smaximov/rails-optimization-task1 that referenced this pull request Oct 4, 2020
smaximov added a commit to smaximov/rails-optimization-task1 that referenced this pull request Oct 4, 2020
kevin-glare pushed a commit to kevin-glare/rails-optimization-task1 that referenced this pull request Apr 22, 2021
stashevgenij added a commit to stashevgenij/rails-optimization-task1 that referenced this pull request Jun 23, 2022
hayah pushed a commit to hayah/rails-optimization-task1 that referenced this pull request Mar 5, 2023
hayah pushed a commit to hayah/rails-optimization-task1 that referenced this pull request Mar 5, 2023
araslanov-e added a commit to araslanov-e/rails-optimization-task1 that referenced this pull request Jan 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants