Skip to content

optimization#3

Open
yarafan wants to merge 1 commit intospajic:masterfrom
yarafan:master
Open

optimization#3
yarafan wants to merge 1 commit intospajic:masterfrom
yarafan:master

Conversation

@yarafan
Copy link

@yarafan yarafan commented May 29, 2019

Case-study оптимизации проекта

На одном проекте решил оптимизировать тесты. Написаны они на rspec, всего - 271 example, среднее время прогона 39 сек.

Построение feedback-loop

Исходное время прогона позволяет работать со всем suite целиком, к тому же rspec --profile не выявил особо "жирные" участки, которые можно было бы взять за основу

Поиск точек роста

Решил начать с проверки фабрик, но к сожалению (или к счатью) результаты были такими, что оптимизация в данном направлении не имела смысла
FactoryProf показала что всего на фабрики уходит 2, 46 сек причем явная проблема factory cascade отсутствовала
Снимок экрана 2019-05-29 в 22 58 47

FactoryDoctor нашел 2 потенциальных места оптимизации с приросто 00:00.68 сек, т.е вообще не имеет смысла
Снимок экрана 2019-05-29 в 23 00 27

Профилировщики общего характера показали, что основное процессорное время уходит на 2 библиотеки: Psych, которая парсит yaml и Nokogiri, которая парсит html
Снимок экрана 2019-05-29 в 23 14 56
Снимок экрана 2019-05-29 в 23 23 24
Я это связываю с тем, что в данном проекте в тестах очень активно используется гем VCR, который записывает сетевые HTTP взаимодействия и сериализует их в yaml для повторного воспроизведения (к тому же размер некоторых кассет достигает 70Мб, что явно не добавляет скорости)

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

Реальный прирост дало использование гема parallel_tests.
Снимок экрана 2019-05-29 в 23 57 08
Время прогона сократилось с 39 до 26, что уже неплохо

Copy link
Owner

@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.

Меньше 30 секунд, уже хорошо 👍

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