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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ernesto Tagwerker
April 26, 2017
Technology
0
53
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
1
320
Lightning Talk: Escaping the Tar Pit
etagwerker
1
150
Fortify Rails Webinar
etagwerker
0
2.5k
Here Be Dragons: The Hidden Gems of Technical Debt
etagwerker
0
270
Lessons Learned from Open Source
etagwerker
0
120
Upgrading Rails: The Dual-Boot Way
etagwerker
1
490
Ruby 3.0 & Rails 6.1
etagwerker
0
210
RubyMem: The Leaky Gems Database for Bundler at Ruby Kaigi Takeout 2020
etagwerker
0
270
Escaping The Tar Pit at NYC.rb
etagwerker
0
130
Other Decks in Technology
See All in Technology
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
150
"作る"から"使われる"へ:Backstage 活用の現在地
sbtechnight
0
170
AI時代のSaaSとETL
shoe116
1
180
Postman v12 で変わる API開発ワークフロー (Postman v12 アップデート) / New API development workflow with Postman v12
yokawasa
0
140
20260311 ビジネスSWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
340
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
3k
バクラク最古参プロダクトで重ねた技術投資を振り返る
ypresto
0
170
AWS CDK「読めるけど書けない」を脱却するファーストステップ
smt7174
3
160
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
210
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
3
340
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
生成AIで速度と品質を両立する、QAエンジニア・開発者連携のAI協調型テストプロセス
shota_kusaba
0
130
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Balancing Empowerment & Direction
lara
5
940
Side Projects
sachag
455
43k
Facilitating Awesome Meetings
lara
57
6.8k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
230
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
280
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
350
sira's awesome portfolio website redesign presentation
elsirapls
0
190
We Have a Design System, Now What?
morganepeng
55
8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
290
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