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
Pedal to the Metal - Aftermath
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Esteban Torres
January 19, 2019
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pedal to the Metal - Aftermath
Journey SoundCloud had to undergo when improving the iOS launch times.
Esteban Torres
January 19, 2019
More Decks by Esteban Torres
See All by Esteban Torres
Pedal to the Metal
esttorhe
0
120
Interconnect All the Things!
esttorhe
0
160
Facing the VIPER
esttorhe
2
260
MVVM(DC): Taming your architecture
esttorhe
1
220
Hacking SiriKi - Mobilization 2016
esttorhe
1
5.2k
MVVM + RxSwift + DataControllers
esttorhe
1
790
Xcode's 8 Source Editor Extensions
esttorhe
0
190
MVVM + RxSwift + DataControllers
esttorhe
0
610
Using Jekyll & Octopress
esttorhe
1
170
Other Decks in Technology
See All in Technology
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.6k
PfEingのアプローチで働こう
rindrics
0
170
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
220
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
0
180
Beyond the Hype: Practical AI for Your Oracle Database with MCP
thatjeffsmith
1
260
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
2
2.2k
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
350
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
280
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
140
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
380
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
330
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Google's AI Overviews - The New Search
badams
0
1.6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
The browser strikes back
jonoalderson
0
1.6k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
240
Rails Girls Zürich Keynote
gr2m
96
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Transcript
Pedal to the Metal Esteban Torres • Core Clients @
SoundCloud • @esttorhe
Pedal to the Metal - AFTERMATH Esteban Torres • Core
Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
! Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Sequel Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
⾠ Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Context Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Planning @ SoundCloud Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
the bet Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
Improve iOS launch time Esteban Torres • Core Clients @
SoundCloud • @esttorhe
iOS branch Core Clients Esteban Torres • Core Clients @
SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Impossibility Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Check the code 1. Grab start timestamp 2. Grab end
timestamp 3. Diff 4. Multiply by a 1000 5. Send Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Check the code 1. Grab start timestamp 2. Grab end
timestamp 3. Diff 4. Multiply by a 1000 5. Send Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Over 5 seconds Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
7,000,000 milliseconds Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
context Esteban Torres • Core Clients @ SoundCloud • @esttorhe
App then Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
App now Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
more context Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
Instruments Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
1. Startup Operations 2. ViewController 4. Profit?? Esteban Torres •
Core Clients @ SoundCloud • @esttorhe
! Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Main thread Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
! Esteban Torres • Core Clients @ SoundCloud • @esttorhe
! Esteban Torres • Core Clients @ SoundCloud • @esttorhe
How about that ViewController Esteban Torres • Core Clients @
SoundCloud • @esttorhe
even more context Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
Mirroring & you Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
⚡" Esteban Torres • Core Clients @ SoundCloud • @esttorhe
What now !? Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
Total pre-main time: 2.0 seconds (100.0%) dylib loading time: 355.67
milliseconds (17.0%) rebase/binding time: 1.3 seconds (63.5%) ObjC setup time: 186.10 milliseconds (8.9%) initializer time: 218.53 milliseconds (10.4%) slowest intializers : libSystem.dylib : 5.52 milliseconds (0.2%) <Redacted> : 51.01 milliseconds (2.4%) MediaServices : 57.60 milliseconds (2.7%) SoundCloud : 182.43 milliseconds (8.7%) Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Enter Static Frameworks Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
Total pre-main time: 563.45 milliseconds (100.0%) dylib loading time: 111.39
milliseconds (19.7%) rebase/binding time: 151.48 milliseconds (26.8%) ObjC setup time: 148.33 milliseconds (26.3%) initializer time: 152.08 milliseconds (26.9%) slowest intializers : libSystem.dylib : 3.37 milliseconds (0.5%) <Redacted> : 46.06 milliseconds (8.1%) MediaServices : 25.92 milliseconds (4.6%) SoundCloud : 148.34 milliseconds (26.3%) Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Resources & Static Frameworks Esteban Torres • Core Clients @
SoundCloud • @esttorhe
Including Frameworks Esteban Torres • Core Clients @ SoundCloud •
@esttorhe
Takeaways Esteban Torres • Core Clients @ SoundCloud • @esttorhe
1. Parallelize* * Also with care Esteban Torres • Core
Clients @ SoundCloud • @esttorhe
2. Instruments is your friend Esteban Torres • Core Clients
@ SoundCloud • @esttorhe
3. Static Frameworks* * Also with care Esteban Torres •
Core Clients @ SoundCloud • @esttorhe
4. Assume no ill-intention Esteban Torres • Core Clients @
SoundCloud • @esttorhe
Links · Automatic's blogpost about static frameworks 1 · Keith
Smiley's LD python script 2 · CocoaPods 1.5.0 release notes 3 3 http://blog.cocoapods.org/CocoaPods-1.5.0/ 2 https://github.com/keith/swi"-staticlibs 1 https://blog.automatic.com/how-we-cut-our-ios-apps-launch-time-in-half-with-this-one-cool-trick-7aca2011e2ea Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Xiè xiè · Github / Twitter @esttorhe - Mastodon @
[email protected]
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
We are hiring Esteban Torres • Core Clients @ SoundCloud
• @esttorhe
Esteban Torres • Core Clients @ SoundCloud • @esttorhe
Xiè xiè Esteban Torres • Core Clients @ SoundCloud •
@esttorhe