4ff75e3179
This cuts down the time it takes to sort issues of a milestone by about 10x. In the previous setup the code would run a SQL query for every issue that had to be sorted. The new setup instead runs a single SQL query to update all the given issues at once. The attached benchmark used to run at around 60 iterations per second, using the new setup this hovers around 600 iterations per second. Timing wise a request to update a milestone with 40-something issues would take about 760 ms, in the new setup this only takes about 130 ms. Fixes #3066
17 lines
489 B
Ruby
17 lines
489 B
Ruby
require 'spec_helper'
|
|
|
|
describe Milestone, benchmark: true do
|
|
describe '#sort_issues' do
|
|
let(:milestone) { create(:milestone) }
|
|
|
|
let(:issue1) { create(:issue, milestone: milestone) }
|
|
let(:issue2) { create(:issue, milestone: milestone) }
|
|
let(:issue3) { create(:issue, milestone: milestone) }
|
|
|
|
let(:issue_ids) { [issue3.id, issue2.id, issue1.id] }
|
|
|
|
benchmark_subject { milestone.sort_issues(issue_ids) }
|
|
|
|
it { is_expected.to iterate_per_second(500) }
|
|
end
|
|
end
|