summaryrefslogtreecommitdiff
path: root/spec/models/concerns/faster_cache_keys_spec.rb
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-08-08 16:18:13 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2016-08-08 16:49:22 +0200
commit77c8520e2ecd70520757aed0fbdf434643b60234 (patch)
treef2de90300397f53d8c7637d27a1528e4fc45fde9 /spec/models/concerns/faster_cache_keys_spec.rb
parent685c048d62e35636e9c5e59524e8ceddd03c9c7f (diff)
downloadgitlab-ce-77c8520e2ecd70520757aed0fbdf434643b60234.tar.gz
Added concern for a faster "cache_key" methodfaster-cache-keys
This concern provides an optimized/simplified version of the "cache_key" method. This method is about 9 times faster than the default "cache_key" method. The produced cache keys _are_ different from the previous ones but this is worth the performance improvement. To showcase this I set up a benchmark (using benchmark-ips) that compares FasterCacheKeys#cache_key with the regular cache_key. The output of this benchmark was: Calculating ------------------------------------- cache_key 4.825k i/100ms cache_key_fast 21.723k i/100ms ------------------------------------------------- cache_key 59.422k (± 7.2%) i/s - 299.150k cache_key_fast 543.243k (± 9.2%) i/s - 2.694M Comparison: cache_key_fast: 543243.4 i/s cache_key: 59422.0 i/s - 9.14x slower To see the impact on real code I applied these changes and benchmarked Issue#referenced_merge_requests. For an issue referencing 10 merge requests these changes shaved off between 40 and 60 milliseconds.
Diffstat (limited to 'spec/models/concerns/faster_cache_keys_spec.rb')
-rw-r--r--spec/models/concerns/faster_cache_keys_spec.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/spec/models/concerns/faster_cache_keys_spec.rb b/spec/models/concerns/faster_cache_keys_spec.rb
new file mode 100644
index 00000000000..8d3f94267fa
--- /dev/null
+++ b/spec/models/concerns/faster_cache_keys_spec.rb
@@ -0,0 +1,17 @@
+require 'spec_helper'
+
+describe FasterCacheKeys do
+ describe '#cache_key' do
+ it 'returns a String' do
+ # We're using a fixed string here so it's easier to set an expectation for
+ # the resulting cache key.
+ time = '2016-08-08 16:39:00+02'
+ issue = build(:issue, updated_at: time)
+ issue.extend(described_class)
+
+ expect(issue).to receive(:id).and_return(1)
+
+ expect(issue.cache_key).to eq("issues/1-#{time}")
+ end
+ end
+end