Draft: Performance increase in projects_helper
What does this MR do and why?
See #425166 (closed)
The goal is to fix the performance issue with the code behind project_templates_without_min_access
feature flag and re-enable the FF.
Refactoring results
[62] pry(main)> Project.all.count
=> 18
[62] pry(main)> control = ::ActiveRecord::QueryRecorder.new(skip_cached: false) do
[62] pry(main)* Project.all.select { |project| can?(User.second, :download_code, project) }
[62] pry(main)* end
[62] pry(main)> control.count
=> 90
[63] pry(main)> compared = ::ActiveRecord::QueryRecorder.new(skip_cached: false) do
[63] pry(main)* Ability.projects_downloadable_by_user(Project.all, User.second)
[63] pry(main)* end
[62] pry(main)> compared.count
=> 58
[74] pry(main)> def recorder_duration(recoder)
duration = 0
recoder.data.each do |_, query_log|
duration += query_log[:durations].sum
end
duration
end
[75] pry(main)> recorder_duration(compared)
=> 0.018966000000000004
[76] pry(main)> recorder_duration(control)
=> 0.027395999999999997
Related to #425166 (closed)
Edited by Patrick Cyiza