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
Search
Ernesto Tagwerker
April 26, 2017
Technology
77
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Ernesto Tagwerker
See All by Ernesto Tagwerker
Teaching Claude Code to Upgrade Rails at Blue Ridge Ruby '26
etagwerker
0
47
Teaching Code How To Upgrade Rails at Philly.rb
etagwerker
0
27
Teaching Claude Code to Upgrade Rails (Artificial Ruby NYC, March, 2026)
etagwerker
0
40
Stuck in the Tar Pit at Sin City Ruby '24
etagwerker
1
330
Lightning Talk: Escaping the Tar Pit
etagwerker
1
170
Fortify Rails Webinar
etagwerker
0
2.6k
Here Be Dragons: The Hidden Gems of Technical Debt
etagwerker
0
300
Lessons Learned from Open Source
etagwerker
0
140
Upgrading Rails: The Dual-Boot Way
etagwerker
1
500
Other Decks in Technology
See All in Technology
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
430
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
230
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
170
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
150
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
260
人材育成分科会.pdf
_awache
4
310
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
140
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
0
160
事業会社における 機械学習・推薦システム技術の活用事例と必要な能力 / ml-recsys-in-layerx-wantedly-2026
yuya4
0
110
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
340
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
3
710
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
2
400
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.2k
Claude Code のすすめ
schroneko
67
230k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
Become a Pro
speakerdeck
PRO
31
6k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
430
Designing for Performance
lara
611
70k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
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