Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Micro Performance Improvements
Search
Ernesto Tagwerker
April 26, 2017
Technology
0
61
Micro Performance Improvements
A few changes that you can do to your code to make it have a faster performance
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
1
300
Lightning Talk: Escaping the Tar Pit
etagwerker
1
130
Fortify Rails Webinar
etagwerker
0
2.4k
Here Be Dragons: The Hidden Gems of Technical Debt
etagwerker
0
240
Lessons Learned from Open Source
etagwerker
0
100
Upgrading Rails: The Dual-Boot Way
etagwerker
1
480
Ruby 3.0 & Rails 6.1
etagwerker
0
200
RubyMem: The Leaky Gems Database for Bundler at Ruby Kaigi Takeout 2020
etagwerker
0
270
Escaping The Tar Pit at NYC.rb
etagwerker
0
120
Other Decks in Technology
See All in Technology
IAMユーザーゼロの運用は果たして可能なのか
yama3133
1
280
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
180
新 Security HubがついにGA!仕組みや料金を深堀り #AWSreInvent #regrowth / AWS Security Hub Advanced GA
masahirokawahara
1
2k
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
1
150
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
6
400
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/09 - 2025/11
oracle4engineer
PRO
0
130
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
210
OCI Oracle Database Services新機能アップデート(2025/09-2025/11)
oracle4engineer
PRO
1
180
AWS Trainium3 をちょっと身近に感じたい
bigmuramura
1
140
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
150
年間40件以上の登壇を続けて見えた「本当の発信力」/ 20251213 Masaki Okuda
shift_evolve
PRO
1
130
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
1.1k
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
730
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Docker and Python
trallard
47
3.7k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Code Review Best Practice
trishagee
74
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Faster Mobile Websites
deanohume
310
31k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Balancing Empowerment & Direction
lara
5
800
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Automating Front-end Workflow
addyosmani
1371
200k
Optimizing for Happiness
mojombo
379
70k
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 return true unless OBJECT.nil? # Good return true
if OBJECT
Benchmark.ips do |x| OBJECT = "nil".freeze x.report("unless nil") do true
unless OBJECT.nil? end x.report("if object") do true if OBJECT end x.compare! end
$ bundle exec ruby benchmarks/unless_nil_vs_if_object.rb Ruby version: 2.3.3 Warming up
-------------------------------------- unless nil 251.994k i/100ms if object 267.552k i/100ms Calculating ------------------------------------- unless nil 9.435M (± 6.9%) i/s - 47.123M in 5.021124s if object 11.431M (± 4.9%) i/s - 57.256M in 5.021363s Comparison: if object: 11431148.2 i/s unless nil: 9435226.8 i/s - 1.21x 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 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
# 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
Resources 16
17 https://github.com/ombulabs/benches/ https://github.com/evanphx/benchmark-ips https://github.com/evanphx/benchmark.fyi
Thank you! @etagwerker 18