Speed up EE project helpers by using let_it_be for project factory
What does this MR do?
This MR improves the performance of EE project helpers by using let_it_be
where feasible.
Contributes to #251358 (closed) and https://gitlab.com/gitlab-org/plan/-/issues/145.
Here's the output from test-prof
when run with FPROF=1
. Note:
-
Total
amount of factories created went down from 146 to 31🚀 -
Total events
went down from 4155 to 964 - Queries saved: 3191
Before
[TEST PROF INFO] EventProf results for sql.active_record
Total time: 00:07.044 of 00:27.130 (25.97%)
Total events: 4155
Top 5 slowest suites (by time):
ProjectsHelper (./ee/spec/helpers/projects_helper_spec.rb:5) – 00:07.044 (4155 / 58) of 00:27.130 (25.97%)
Finished in 34.74 seconds (files took 4.64 seconds to load)
58 examples, 0 failures
[TEST PROF INFO] Factories usage
Total: 146
Total top-level: 84
Total time: 13.6880s
Total uniq factories: 8
total top-level total time time per call top-level time name
55 55 12.0875s 0.2198s 12.0875s project
55 0 3.0106s 0.0547s 0.0000s namespace
25 23 1.1200s 0.0448s 1.0520s user
3 3 0.1365s 0.0455s 0.1365s group
3 0 0.0143s 0.0048s 0.0000s namespace_settings
2 2 0.3881s 0.1941s 0.3881s vulnerability
2 0 0.0959s 0.0480s 0.0000s author
1 1 0.0238s 0.0238s 0.0238s license
After
[TEST PROF INFO] EventProf results for sql.active_record
Total time: 00:01.748 of 00:16.652 (10.5%)
Total events: 964
Top 5 slowest suites (by time):
ProjectsHelper (./ee/spec/helpers/projects_helper_spec.rb:5) – 00:01.748 (964 / 58) of 00:16.652 (10.5%)
Finished in 24.19 seconds (files took 4.65 seconds to load)
58 examples, 0 failures
[TEST PROF INFO] Factories usage
Total: 31
Total top-level: 20
Total time: 3.5695s
Total uniq factories: 8
total top-level total time time per call top-level time name
12 10 0.5937s 0.0495s 0.5192s user
4 4 2.5260s 0.6315s 2.5260s project
4 0 0.4980s 0.1245s 0.0000s namespace
3 3 0.1694s 0.0565s 0.1694s group
3 0 0.0168s 0.0056s 0.0000s namespace_settings
2 2 0.3327s 0.1664s 0.3327s vulnerability
2 0 0.1221s 0.0611s 0.0000s author
1 1 0.0221s 0.0221s 0.0221s license
Does this MR meet the acceptance criteria?
Conformity
Edited by Peter Leitzen