Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
今すぐできる、ユーザーとチームのためのiOS速度改善 / Gunosy Kaizen Nigh...
Search
Seiji Takahashi
August 10, 2017
Programming
5.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
今すぐできる、ユーザーとチームのためのiOS速度改善 / Gunosy Kaizen Night iOS development optimization
Gunosy カイゼン Night #1の発表資料です。
Seiji Takahashi
August 10, 2017
More Decks by Seiji Takahashi
See All by Seiji Takahashi
AIエージェントのデータガバナンスの最新事情。そしてプロダクトのAIファースト化
timakin
0
3.9k
営業、広報、開発。 多面的なAIネイティブ化のための 基盤について
timakin
0
270
権限と承認 〜ユーザー信頼性に繋がる管理画面の根幹について〜
timakin
0
1k
Go Backends for frontends with GraphQL and gRPC
timakin
6
4.3k
Design Pattern for Image and Text Composition in Go
timakin
5
6.9k
Golang API Testing the HARD way
timakin
13
7.3k
Head First Golang Image Package
timakin
2
10k
React Native Beyond Prototype
timakin
2
1.7k
Performance Optimization on Google AppEngine
timakin
5
6.7k
Other Decks in Programming
See All in Programming
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
230
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
650
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
310
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
410
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
20k
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
App Intentsのビルドプロセスを支える技術
kntkymt
0
490
mrbgem 三角測量 開発
ogom
0
160
AWSに止められる覚悟してますか?
morizo_1984
2
490
iOSDC2026登壇資料.pdf
riofujimon
0
200
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Making Projects Easy
brettharned
120
6.8k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Raft: Consensus for Rubyists
vanstee
142
7.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Designing for Timeless Needs
cassininazir
1
510
Music & Morning Musume
bryan
48
7.4k
WENDY [Excerpt]
tessaabrams
14
40k
Transcript
ࠓ͙͢Ͱ͖Δɺ ϢʔβʔͱνʔϜͷͨΊͷ iOSվળ @__timakin__ / Gunosy ΧΠθϯ Night #1
ࣗݾհ • Github: timakin / Twitter: @__timakin__ • Contributor of
Go / golang.tokyo / roppongi-golunch • Gunosy ৽نࣄۀ։ൃࣨ ॴଐ • Go / Swift • Recently Contributed / Created • giginet/xcprofiler • mercari/gaurun • timakin/gopli • timakin/ssm2env • timakin/md2mid • timakin/autocompl
߹ΘͤͯಡΈ͍ͨ https://speakerdeck.com/timakin/maikurotimudefalsegao-su-naxin-gui-kai-fa-wozhi-erukai-fa-fen-xi-ji-pan
ࠓ͢͜ͱ • iOS(Swift)։ൃͷΧΠθϯ • ϢʔβʔͷͨΊͷΧΠθϯ • νʔϜͷͨΊͷΧΠθϯ
Goͷɺ ͠·ͤΜʂ
Swift(iOSΞϓϦ)ྺ 3ϲ݄
ؒҧͬͯΔ͋Δ͔Ͱ͕͢ɺ ΑΖ͓͘͠ئ͍͠·͢ʂ
ͦͦͳΜͰ վળ͕ඞཁ͔ʁ
͍ͱԿ͕ى͜Δʁ
͍ͱى͜Δ͜ͱɿΞϓϦମݧฤ • ਓੜແବײ͋ͬͯΞϓϦΘͳ͘ͳΔ
͍ͱى͜Δ͜ͱɿΞϓϦମݧฤ • ਓੜແବײ͋ͬͯΞϓϦΘͳ͘ͳΔ • ࡶΞϓϦײ͋ͬͯ։ൃνʔϜͷαϙʔτ͕ෆ҆
• ਓੜແବײ͋ͬͯΞϓϦΘͳ͘ͳΔ • ࡶΞϓϦײ͋ͬͯ։ൃνʔϜͷαϙʔτ͕ෆ҆ • ใ͕ܽམͯ͠Πϥͭ͘ ͍ͱى͜Δ͜ͱɿΞϓϦମݧฤ
• ਓੜແବײ͋ͬͯΞϓϦΘͳ͘ͳΔ • ࡶΞϓϦײ͋ͬͯ։ൃνʔϜͷαϙʔτ͕ෆ҆ • ใ͕ܽམͯ͠Πϥͭ͘ • ͬͯΔؒʹbackground -> ଞͷΞϓϦʹભҠ͠
ͯΔͷΕΔ ͍ͱى͜Δ͜ͱɿΞϓϦମݧฤ
• ਓੜແବײ͋ͬͯΞϓϦΘͳ͘ͳΔ • ࡶΞϓϦײ͋ͬͯ։ൃνʔϜͷαϙʔτ͕ෆ҆ • ใ͕ܽམͯ͠Πϥͭ͘ • ͬͯΔؒʹbackground -> ଞͷΞϓϦʹભҠ͠
ͯΔͷΕΔ • ڝ߹ΞϓϦͱѱ͍ΛൺΒΕΔධՁϦεΫ ͍ͱى͜Δ͜ͱɿΞϓϦମݧฤ
• ਓੜແବײ͋ͬͯΞϓϦΘͳ͘ͳΔ • ࡶΞϓϦײ͋ͬͯ։ൃνʔϜͷαϙʔτ͕ෆ҆ • ใ͕ܽམͯ͠Πϥͭ͘ • ͬͯΔؒʹbackground -> ଞͷΞϓϦʹભҠ͠
ͯΔͷΕΔ • ڝ߹ΞϓϦͱѱ͍ΛൺΒΕΔධՁϦεΫ • αʔϏεͷࢮ ͍ͱى͜Δ͜ͱɿΞϓϦମݧฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ • ΟϯυҠͬͯɺ͕ͯूத్͕ΕΔ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ • ΟϯυҠͬͯɺ͕ͯूத్͕ΕΔ • ͖ͬͯͯ࡞ۀΛࢥ͍ग़͢ͷʹίϯςΩετεΠο νͷίετ͕͔͔Δ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ • ΟϯυҠͬͯɺ͕ͯूத్͕ΕΔ • ͖ͬͯͯ࡞ۀΛࢥ͍ग़͢ͷʹίϯςΩετεΠο νͷίετ͕͔͔Δ • ݕূʹऔΕΔ͕࣌ؒݮΔ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ • ΟϯυҠͬͯɺ͕ͯूத్͕ΕΔ • ͖ͬͯͯ࡞ۀΛࢥ͍ग़͢ͷʹίϯςΩετεΠο νͷίετ͕͔͔Δ • ݕূʹऔΕΔ͕࣌ؒݮΔ •
ϦϦʔε͕ΕΔ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ • ΟϯυҠͬͯɺ͕ͯूத్͕ΕΔ • ͖ͬͯͯ࡞ۀΛࢥ͍ग़͢ͷʹίϯςΩετεΠο νͷίετ͕͔͔Δ • ݕূʹऔΕΔ͕࣌ؒݮΔ •
ϦϦʔε͕ΕΔ • Πέͯͳ͍։ൃνʔϜʹͳͬͯਓݺͳ͍ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ແҙࣝʹ࿘අ͞ΕΔ࣌ؒ • ΟϯυҠͬͯɺ͕ͯूத్͕ΕΔ • ͖ͬͯͯ࡞ۀΛࢥ͍ग़͢ͷʹίϯςΩετεΠο νͷίετ͕͔͔Δ • ݕূʹऔΕΔ͕࣌ؒݮΔ •
ϦϦʔε͕ΕΔ • Πέͯͳ͍։ൃνʔϜʹͳͬͯਓݺͳ͍ • αʔϏεͷࢮ ͍ͱى͜Δ͜ͱɿ։ൃฤ
• ͱʹ͔͘ࢮ͵ ͍ͱى͜Δ͜ͱɿ·ͱΊ
୭ͷͨΊʹ͘͢Δ͔
1. Ϣʔβʔ
2. νʔϜ
ϢʔβʔͷͨΊͷվળ • ىಈվળͷ͠·͢
https://developer.apple.com/videos/play/ wwdc2016/406/
https://developer.apple.com/videos/play/ wwdc2017/413/
ϢʔβʔͷͨΊͷվળ • ىಈ͕͘ͳΔݪҼ • ىಈΛܭଌ͢Δํ๏ • վળํ๏
ىಈ͕͘ͳΔݪҼ • Too many dylibs
ىಈ͕͘ͳΔݪҼ • Too many dylibs • Too many class/method declarations
• Too many dylibs • Too many class/method declarations •
Too many initializers ىಈ͕͘ͳΔݪҼ
• Too many dylibs • Too many class/method declarations •
Too many initializers • SDK ىಈ͕͘ͳΔݪҼ
• Too many dylibs • Too many class/method declarations •
Too many initializers • SDK • API Call ىಈ͕͘ͳΔݪҼ
• Too many dylibs • Too many class/method declarations •
Too many initializers • SDK • API Call • Middleware ىಈ͕͘ͳΔݪҼ
• ࣌ؒͷ͔͔ΔॲཧdaemonͰ Dyld3
• ࣌ؒͷ͔͔ΔॲཧdaemonͰ • ෳࡶͳॲཧ(Mach-O parse/compile) શ෦ͦͬͪʹدͤΔ Dyld3
• ࣌ؒͷ͔͔ΔॲཧdaemonͰ • ෳࡶͳॲཧ(Mach-O parse/compile) શ෦ͦͬͪʹدͤΔ • launch closure caching
Dyld3
ىಈܭଌ • Instruments • Time Profiler
ىಈܭଌ • Instruments • Time Profiler • Static Initializer Calls
(iOS11 / Mac OS High Sierra)
ىಈܭଌ • Instruments • Time Profiler • Static Initializer Calls
(iOS11 / Mac OS High Sierra) • DYLD_PRINT_STATISTICS
DYLD_PRINT_STATISTICS Total pre-main time: 2.5 seconds (100.0%) dylib loading time:
1.3 seconds (54.0%) rebase/binding time: 111.49 milliseconds (4.3%) ObjC setup time: 432.17 milliseconds (16.9%) initializer time: 631.54 milliseconds (24.7%) slowest intializers : libSystem.B.dylib : 22.83 milliseconds (0.8%) xxx-ios : 500.72 milliseconds (19.5%)
վળํ๏ • Fewer dylibs • ༻සͷ͍UIϥΠϒϥϦͳͲΛͻͨ͢ Βআڈ
վળํ๏ • Fewer initializers • initͰඞཁͳ͍ॲཧۃྗআ֎
վળํ๏ • Fewer initializers • initͰඞཁͳ͍ॲཧۃྗআ֎ • Debug༻ͷϥΠϒϥϦͷinitͳͲΛຊ൪Ͱআ֎
վળํ๏ • Fewer initializers • initͰඞཁͳ͍ॲཧۃྗআ֎ • Debug༻ͷϥΠϒϥϦͷinitͳͲΛຊ൪Ͱআ֎ • RxSwiftͰແҙࣝʹͬͯͨॏෳAPI
Callͷআڈ
վળํ๏ • Fewer initializers • initͰඞཁͳ͍ॲཧۃྗআ֎ • Debug༻ͷϥΠϒϥϦͷinitͳͲΛຊ൪Ͱআ֎ • RxSwiftͰແҙࣝʹͬͯͨॏෳAPI
Callͷআڈ • SDKͷฒྻsetup
վળํ๏ • Fewer classes/methods • structͰએݴͰ͖Δͷۃྗஔ͖͑
վળํ๏ • Fewer classes/methods • structͰએݴͰ͖Δͷۃྗஔ͖͑ • ͬͯͳ͍Ϋϥεɺ༻සͷ͍Ϋϥεͷআ ڈ
Ҏ্ɺϢʔβʔͷͨΊʹ ىಈΛ͘͢Δɻ
νʔϜͷͨΊͷվળ • Ϗϧυ࣌ؒͷΛ͠·͢ɻ
νʔϜͷͨΊͷվળ • Ϗϧυ͕͘ͳΔݪҼ • Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • վળํ๏
Ϗϧυ͕͘ͳΔݪҼ • ཁ͢ΔʹίϯύΠϥϥΠϒϥϦͷϚούʔ ʹࣄͤ͗͢͞
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • -Xfrontend -debug-time-function-bodies
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • -Xfrontend -debug-time-function-bodies • ؔ͝ͱͷϏϧυ࣌ؒܭଌ(Swift)
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • giginet/xcprofiler
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • giginet/xcprofiler
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • giginet/xcprofiler • Rubygemύοέʔδ
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • giginet/xcprofiler • Rubygemύοέʔδ • ϝιου୯ҐͰܭଌ࣌ؒ(ms)Λιʔτͯ͠ ςʔϒϧग़ྗ
Ϗϧυ࣌ؒΛܭଌ͢Δํ๏ • giginet/xcprofiler • Rubygemύοέʔδ • ϝιου୯ҐͰܭଌ࣌ؒ(ms)Λιʔτͯ͠ ςʔϒϧग़ྗ • giginet/danger-xcprofilerͱซ༻͍͍ͯ͠
͔
վળํ๏ • ͱΓ͋͑ͣ50~60msͷϥΠϯΛ͑ͨΒɺ ؾ͍ͮͨλΠϛϯάͰؔຖϏϧυ࣌ؒΛ ݮΒ͢
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ • ྻ݁߹(don’t +,
append)
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ • ྻ݁߹(don’t +,
append) • `??` ࡾ߲ԋࢉࢠΘͳ͍
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ • ྻ݁߹(don’t +,
append) • `??` ࡾ߲ԋࢉࢠΘͳ͍ • lazy propertiesͷϓϥΠϕʔτϝιουԽ
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ • ྻ݁߹(don’t +,
append) • `??` ࡾ߲ԋࢉࢠΘͳ͍ • lazy propertiesͷϓϥΠϕʔτϝιουԽ • ObjectMapperۃྗΘͳ͍
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ • ྻ݁߹(don’t +,
append) • `??` ࡾ߲ԋࢉࢠΘͳ͍ • lazy propertiesͷϓϥΠϕʔτϝιουԽ • ObjectMapperۃྗΘͳ͍ • CocoaPodsΛv1.3.0Ҏ্ʹΞοϓάϨʔυ͢Δ
վળํ๏ • ܕਪආ͚Δ ʢClosureΓ, Variableએݴʣ • ϝιουνΣΠϯආ͚ΔʢҰ࣌มʹ֨ೲʣ • ྻ݁߹(don’t +,
append) • `??` ࡾ߲ԋࢉࢠΘͳ͍ • lazy propertiesͷϓϥΠϕʔτϝιουԽ • ObjectMapperۃྗΘͳ͍ • CocoaPodsΛv1.3.0Ҏ্ʹΞοϓάϨʔυ͢Δ
CocoaPods >= v1.3.0
CocoaPods >= v1.3.0 • Dynamic FrameworkͷpathΩϟογϡͷόά͕ मਖ਼͞ΕͨͬΆ͍ʁ
CocoaPods >= v1.3.0 • Dynamic FrameworkͷpathΩϟογϡͷόά͕ मਖ਼͞ΕͨͬΆ͍ʁ • ͍͘Β͍͘ͳΔɻ LUCRAॳظϏϧυ͡Όͳ͚Ε2ඵ͘Β͍ʹͳͬͨɻ
Ҏ্ɺνʔϜͷͨΊʹ ϏϧυΛ͘͢Δɻ
• αʔϏεͷࢮʹͭͳ͕ΔͷͰվળ͔ͬ͠Γɻ • ϢʔβʔͷͨΊͷվળ • XCodeඋ͚͑ͷػೳͰىಈ࣌ؒܭଌɻ • ίϯύΠϥɾϦϯΧʹ༏͍͠ίʔυɾߏΛɻ • νʔϜͷͨΊͷվળ
• पลπʔϧ͍ͭͭϏϧυ࣌ؒܭଌɻ • γϯλοΫεɺpodsͳͲಓʹվળɻ ·ͱΊ
Thank you!