case-study о проделанной оптимизации #17
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Case-study оптимизации
Для экспериментов я взял самый медленный спек на своем проекте.
RSpecDissect
:Создание основных сущностей я переделал с помощью
let_it_be
+ вынес некоторые операции (создания второстепенных сущностей) вbefore_all
:Время прогона тестов сократилось в 5 раз.
FactoryProf
и прогнал тесты с переменнойFPROF=flamegraph
Я убрал каскадное создание в фабриках, и вынес его в спеку + обратил внимание,
что некоторые объекты создаются для всех тестов, но используются только для некоторых. Перенес их в нужные тесты.

В итоге время прогона тестов сократилось еще в двое:
Finished in 2.23 seconds (files took 3.57 seconds to load)
и флеймграф стал выглядеть поприятнее:
FactoryDoctor
, но заменаcreate
наbuild_stubbed
не дает значительного прироста, возможно на всех тестах это будет заметнее.Прогон всех тестов с
FDOC=1
показал, что время потенциально может сократиться на 1:30Но на деле, думаю это не сильно повлияет на время.
Резюме
Выбрав оттельный спек удалось сократить время прогонов тестов в 10 раз.

Остальные спеки в целом проходят успешно, но есть и красные с которыми нужно разбираться. Но думаю это не составит труда.
Итоговый график из хронографа: