Skip to content
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

case-study о проделанной оптимизации #17

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

mikeoleynik
Copy link

Case-study оптимизации

Для экспериментов я взял самый медленный спек на своем проекте.

  1. Первое что я сделал - прогнал его вместе с RSpecDissect:
[TEST PROF INFO] RSpecDissect report
Total time: 00:23.176
Total `let` time: 00:20.298
Total `before(:each)` time: 00:22.742

Finished in 23.19 seconds (files took 3.52 seconds to load)

Создание основных сущностей я переделал с помощью let_it_be + вынес некоторые операции (создания второстепенных сущностей) в before_all:

[TEST PROF INFO] RSpecDissect report
Total time: 00:03.392
Total `let` time: 00:01.659
Total `before(:each)` time: 00:03.031

Finished in 4.64 seconds (files took 3.54 seconds to load)

Время прогона тестов сократилось в 5 раз.

  1. Дальше я решил, что надо избавиться от каскадного создания объектов. Для этого подключил FactoryProf и прогнал тесты с переменной FPROF=flamegraph
    before
    Я убрал каскадное создание в фабриках, и вынес его в спеку + обратил внимание,

что некоторые объекты создаются для всех тестов, но используются только для некоторых. Перенес их в нужные тесты.
В итоге время прогона тестов сократилось еще в двое:
Finished in 2.23 seconds (files took 3.57 seconds to load)
и флеймграф стал выглядеть поприятнее:
after

  1. Так же запускал с FactoryDoctor, но замена create на build_stubbed не дает значительного прироста, возможно на всех тестах это будет заметнее.
    Прогон всех тестов с FDOC=1 показал, что время потенциально может сократиться на 1:30
[TEST PROF INFO] FactoryDoctor report

Total (potentially) bad examples: 1682
Total wasted time: 01:30.210

Но на деле, думаю это не сильно повлияет на время.

Резюме

Выбрав оттельный спек удалось сократить время прогонов тестов в 10 раз.
Остальные спеки в целом проходят успешно, но есть и красные с которыми нужно разбираться. Но думаю это не составит труда.
Итоговый график из хронографа:
Снимок экрана от 2020-08-27 22-38-59

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.

У вас как всегда, коротко и по делу ✅

3) Так же запускал с `FactoryDoctor`, но замена `create` на `build_stubbed` не дает значительного прироста, возмжно на всех тестах это будет заметнее.

### Резюме
Выбрав оттельный спек удалось сократить время прогонов тестов в 10 раз.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Классика, 👍

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.

2 participants