rubocop / rubocop-performance

An extension of RuboCop focused on code performance checks.
https://docs.rubocop.org/rubocop-performance
MIT License
674 stars 79 forks source link

Cop idea: `Array#insert` vs `Array#unshift` #396

Open ydakuka opened 9 months ago

ydakuka commented 9 months ago

https://github.com/fastruby/fast-ruby#arrayinsert-vs-arrayunshift-code

Describe the solution you'd like

# bad
array.insert(0, i)
# good
array.unshift(i)

Rubocop

ydakuka@yauhenid:~/Work/project$ bin/rails_docker rubocop -V
1.57.2 (using Parser 3.2.2.4, rubocop-ast 1.29.0, running on ruby 2.7.8) [x86_64-linux]
  - rubocop-capybara 2.19.0
  - rubocop-factory_bot 2.24.0
  - rubocop-performance 1.19.1
  - rubocop-rails 2.22.0
  - rubocop-rake 0.6.0
  - rubocop-rspec 2.25.0
  - rubocop-thread_safety 0.5.1
ydakuka commented 9 months ago

I've benchmarked it (ruby 3.3.0).

ydakuka@yauhenid:~/ruby-docker-app$ docker run ruby-app  
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]
Warming up --------------------------------------
       Array#unshift    15.000 i/100ms
        Array#insert     1.000 i/100ms
Calculating -------------------------------------
       Array#unshift    137.945 (± 4.3%) i/s -    690.000 in   5.013164s
        Array#insert      1.050 (± 0.0%) i/s -      6.000 in   5.726303s

Comparison:
       Array#unshift:      137.9 i/s
        Array#insert:        1.0 i/s - 131.38x  slower
ydakuka commented 9 months ago

real-world-ruby-apps - 18 matches across 16 files real-world-rails - 25 matches across 22 files