Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Micro Performance Improvements (Short Version)
Search
Ernesto Tagwerker
April 26, 2017
Technology
0
36
Micro Performance Improvements (Short Version)
Small Ruby and Rails code improvements you can do to have high performance in your application.
Ernesto Tagwerker
April 26, 2017
Tweet
Share
More Decks by Ernesto Tagwerker
See All by Ernesto Tagwerker
Stuck in the Tar Pit at Sin City Ruby '24
etagwerker
0
89
Lightning Talk: Escaping the Tar Pit
etagwerker
0
71
Fortify Rails Webinar
etagwerker
0
1.8k
Here Be Dragons: The Hidden Gems of Technical Debt
etagwerker
0
130
Lessons Learned from Open Source
etagwerker
0
56
Upgrading Rails: The Dual-Boot Way
etagwerker
1
440
Ruby 3.0 & Rails 6.1
etagwerker
0
160
RubyMem: The Leaky Gems Database for Bundler at Ruby Kaigi Takeout 2020
etagwerker
0
110
Escaping The Tar Pit at NYC.rb
etagwerker
0
68
Other Decks in Technology
See All in Technology
「手動オペレーションに定評がある」と言われた私が心がけていること / phpcon_odawara2024
blue_goheimochi
2
370
コンテナセキュリティの基本と脅威への対策
kyohmizu
3
740
継続的な改善 x ⾮連続的な進化
sansantech
PRO
3
130
MySQL の SQL クエリチューニングの要所を掴む勉強会
andpad
2
5.7k
カオナビの利用実績をアウトカムへつなげる旅 / example-of-data-management-startup-in-kaonavi
kaonavi
0
130
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
130
web-application-security
matsuihidetoshi
0
110
ここが嬉しいABAC ここが辛いよABAC #再解説+補足編
masahirokawahara
1
260
反実仮想機械学習とは何か
usaito
PRO
8
3k
Postman v10リリース後を振り返る / Looking back at Postman v10 after release
yokawasa
1
150
Hands-on Gemini, the Google DeepMind LLM
meteatamel
1
110
NgRx Signal Store
rainerhahnekamp
0
140
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
36
2.1k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Scaling GitHub
holman
457
140k
We Have a Design System, Now What?
morganepeng
42
6.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Agile that works and the tools we love
rasmusluckow
324
20k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
No one is an island. Learnings from fostering a developers community.
thoeni
15
2.1k
Building Applications with DynamoDB
mza
88
5.6k
4 Signs Your Business is Dying
shpigford
175
21k
What's in a price? How to price your products and services
michaelherold
237
11k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
273
13k
Transcript
Micro Performance Improvements RailsConf, April 2017
Ernesto Tagwerker @etagwerker Founder & Software Developer at Ombu Labs
Best Practices 3
https://github.com/bbatsov/ruby-style-guide
https://speakerdeck.com/sferik/writing-fast-ruby
Bad Code vs. Good Code 6
# Bad HOUR_6 = Time.parse("2000-01-01 06:00:00 UTC") # Good HOUR_6
= Time.at(946685160).utc
$ bundle exec ruby benchmarks/time/parse_vs_at.rb Ruby version: 2.3.3 Warming up
-------------------------------------- Time.parse 3.287k i/100ms Time.at 66.086k i/100ms Calculating ------------------------------------- Time.parse 34.052k (± 3.2%) i/s - 170.924k in 5.024737s Time.at 842.576k (± 2.2%) i/s - 4.230M in 5.022207s Comparison: Time.at: 842576.2 i/s Time.parse: 34051.9 i/s - 24.74x slower
# OK phone = Hash.new(number: number) phone[:number] # Better Phone
= Struct.new(:number) phone = Phone.new(number) phone.number
$ bundle exec ruby benchmarks/struct_vs_hash.rb Ruby version: 2.3.3 Warming up
-------------------------------------- struct 22.148k i/100ms hash 4.688k i/100ms Calculating ------------------------------------- struct 240.460k (± 2.7%) i/s - 1.218M in 5.069592s hash 47.926k (± 3.9%) i/s - 243.776k in 5.094413s Comparison: struct: 240459.9 i/s hash: 47926.1 i/s - 5.02x slower
# Bad Post.select(:id).map(&:id) # Good Post.pluck(:id)
$ bundle exec rake benches:pluck_vs_map Ruby version: 2.3.3 Warming up
-------------------------------------- map(&:id) 11.000 i/100ms pluck(:id) 80.000 i/100ms Calculating ------------------------------------- map(&:id) 124.205 (±11.3%) i/s - 616.000 in 5.026999s pluck(:id) 807.127 (± 2.0%) i/s - 4.080k in 5.057062s Comparison: pluck(:id): 807.1 i/s map(&:id): 124.2 i/s - 6.50x slower
https://github.com/ombulabs/benches/ 13
Resources 14
15 https://speakerdeck.com/etagwerker/micro- performance-improvements https://github.com/evanphx/benchmark-ips https://github.com/evanphx/benchmark.fyi
Thank you! @etagwerker 16