Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
iOS 通信のパフォーマンス改善
yohei sugigami
February 14, 2015
Technology
1
340
iOS 通信のパフォーマンス改善
- SDWebImageによる改善
- PonryDebugerによる通信の解析・分析
yohei sugigami
February 14, 2015
Tweet
Share
More Decks by yohei sugigami
See All by yohei sugigami
susieyy
6
1.3k
susieyy
0
650
susieyy
5
1.2k
susieyy
8
980
susieyy
10
1.3k
susieyy
14
5.3k
susieyy
0
3k
susieyy
7
5.8k
susieyy
0
440
Other Decks in Technology
See All in Technology
udzura
2
260
dena_tech
1
730
inductor
1
140
dena_tech
0
170
tosh2230
3
320
khrd
1
660
shirayanagiryuji
1
280
miura55
0
450
lmi
3
1.2k
kkosukeee
0
190
noriyukitakei
0
100
go5paopao
9
1.7k
Featured
See All Featured
morganepeng
93
14k
trishagee
24
2.5k
philhawksworth
192
8.8k
ddemaree
273
31k
marktimemedia
7
400
danielanewman
1
520
hatefulcrawdad
257
17k
roundedbygravity
84
7.9k
revolveconf
200
9.7k
philnash
9
590
trallard
14
720
62gerente
587
200k
Transcript
௨৴ͷύϑΥʔϚϯεվળ ਿ্༸ฏ ΤϯδχΞ / ΥϯςουϦʔגࣜձࣾ iOSΦʔϧελʔζษڧձ
None
None
None
݄ؒ40ສਓར༻ اۀ7000ࣾ ϝϯόʔ40ਓ͙Β͍
None
J1IPOF J1BE "OEPSJE ̏ףୡʂ
WHY? ௨৴ͷύϑΥʔϚϯεվળ
Wantedlyࠓւ֎ਐग़͠·͢ʂ ڌͷਓ
ڌΞδΞʂ
ւ֎ ௨৴ճઢ͕ ͍
STARTUP ASIA 2014 ˏ JAKARTA ւ֎Ͱૉఢͳ Wantedly ɹɹ ମݧΛ
WoWoW
Period is two weeks Dec 2014
Team ాઌੜ ME Full Time iOS Engineer iOS Engineer મ౬ཱྀਓ
Half Time ιϑΝʔͰϖΞϓϩελΠϧͳ։ൃ :)
Analyze
New Relic MobileͰੳ ͬ͘͟ΓͳϘτϧωοΫௐࠪ
Pony DebuggerͰࡉ͔͘ੳ ϦΫΤετ୯ҐͰࡉ͔͘ௐࠪ
Pony DebuggerͷΈ iPhone Server Client Python CocoaPods Chrome Developer Tool
Θ͔ͬͨ͜ͱ ɾJSONͷϦΫΤετʹΑΓը૾ͷ༰ྔ͕ଟ͍ ɾແବͳը૾ͷϦΫΤετ͕͋Δ ɾݟ͍ͤͨը૾ͷॱ൪ʹͳ͍ͬͯͳ͍
PLAN ௨৴ྔͷେΛΊΔ ը૾ͷ௨৴Λվળ͢Δ
ը૾௨৴ͱݴ͑ SDWebImage
SDWebImageͷίʔυΛಡΉ 63- 63- 63- 63- 63- 63- 63- 63- 63-
63- SDWebImageDownloader Request Queue SDWebImageDownloaderOperation UIImageView#sd_setImageWithURL
SDWebImageͷίʔυΛಡΉ 63- SDWebImageDownloaderOperation Memory / Disk Cache SDWebImageManager
SDWebImageͷόάΛൃݟʂ Ϛʔδ͞ΕͨΑʂ
Let’s Kaizen
ืूҰཡը૾ͷઌಡΈ ·ͩը໘্ʹදࣔ ͞Ε͍ͯͳ͍ը૾Λ ࣄલʹऔಘ
SDWebImagePrefetcher @interface SDWebImagePrefetcher : NSObject @property (strong, readonly) SDWebImageManager
*manager; @property (assign) NSUInteger maxConcurrentDownloads; - (void)prefetchURLs:(NSArray *)urls; 63- 63- 63-
ը૾Λऔಘ͢Δ༏ઌ͚ ߴ ߴ Priority
SDWebImageOptions @interface UIImageView (WebCache) - (void)sd_setImageWithURL:(NSURL *)url placeholderImage: (UIImage *)placeholder
options:(SDWebImageOptions)options; typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { SDWebImageLowPriority = 1 << 1, SDWebImageHighPriority = 1 << 8, Change Priority
ભҠݩͷը૾औಘΛΩϟϯηϧ ભҠݩ ભҠઌ ௨৴Ωϟϯηϧ ભҠઌͷը૾Λ༏ઌͯ͠දࣔ
SDWebImageManager#cancelAll @interface UIImageView (WebCache) - (void)sd_cancelCurrentImageLoad; @interface SDWebImageManager : NSObject
- (void)cancelAll; 63- 63- 63- 63- SDWebImageDownloader Request Queue
'BDFCPPL͕ޠΔϞόΠϧŋνϡʔχϯάͷۃҙɿ͜ΕͰ్্ࠃͷΠϯλʔωοτ0,ʂ ฐࣾCTO͔Βͷࢥ͠ঌ͠ Facebook90% ͷΠϝʔδͰ WebP ϑΥʔϚοτ͕༻͍ΒΕ͍ͯΔ “ Facebookܦ༝ͰΔͳͲ “ ଓεϐʔυ࣭ʹԠͯ͡
ػೳͷৼΔ͍Λదਖ਼Խ͍ͯ͘͠
ը૾ϑΥʔϚοτΛWebPʹ 90KB 30KB SDWebImageWebPʹରԠ͍ͯ͠Δ
SDWebImage/WebP Podfile pod ‘SDWebImage/WebP' $ pod install @interface UIImage (WebP)
Only Install !
Webpʹม͢Δը૾αʔόͷߏ CloudFront S3 EC2 Docker nginx AWS iPhone ҙʹϦαΠζ &
WebPʹม ΦϦδφϧը૾ Ωϟογϡը૾ ʢCDN)
wantedly/nginx-image-server Open Source !!
௨৴ଳҬʹΑΓऔಘ͢Δը૾αΠζΛมߋ ྑ͍ ѱ͍ ͘͢͝ ѱ͍ 100KB 25KB 6KB 16ͷ̍
௨৴ଳҬͷਪଌ 63- ௨৴։࢝ɾऴྃͷܦա࣌ؒͱ डྖը૾αΠζ͔Βਪଌ 30KB
௨৴ଳҬͷਪଌ MONITORING: kbps 108.73 [Excellent] average rtt 0.971914 MONITORING: kbps
108.73 [Excellent] average rtt 0.971914 MONITORING: kbps 108.73 [Excellent] average rtt 0.971914 MONITORING: rtt 0.17s, 0KB, Cached: YES, https://e4fb0db8addb.png MONITORING: rtt 0.32s, 0KB, Cached: NO, https://5af9694863de.png MONITORING: rtt 0.35s, 1KB, Cached: NO, https://9b-80a9-37eb4c7182ea.jpeg MONITORING: rtt 0.41s, 9KB, Cached: NO, https://510-a619-10701876ad0c.png MONITORING: rtt 0.01s, 8KB, Cached: YES, https://2aa3646d.jpeg MONITORING: kbps 189.65 [Excellent] average rtt 0.461638 MONITORING: rtt 0.52s, 27KB, Cached: NO, https://b5-bceda20f3034.png MONITORING: rtt 0.40s, 21KB, Cached: NO, https://54a-52cbe1efb0bc.jpeg MONITORING: rtt 0.82s, 33KB, Cached: NO, https://5b-1d537f677f61.png MONITORING: rtt 0.46s, 19KB, Cached: NO, https://-0461512b3080.jpeg MONITORING: rtt 0.26s, 36KB, Cached: NO, https://c2b-e88d33bb56dc.jpeg MONITORING: kbps 159.05 [Excellent] average rtt 0.515586 MONITORING: rtt 0.98s, 45KB, Cached: NO, https://83f6512cef.jpeg MONITORING: kbps 160.66 [Excellent] average rtt 0.569087 MONITORING: rtt 2.56s, 30KB, Cached: NO, https://65e-55cee3d4f2eb.jpeg MONITORING: kbps 130.23 [Excellent] average rtt 1.270392 MONITORING: rtt 2.53s, 11KB, Cached: NO, https://65e-55cee3d4f2eb.jpeg
࠷େαΠζ͔ΒΩϟγϡը૾ΛνΣοΫ 63- େ த খ ᶃ ᶄ ᶅ ᶆ
HOW? Ͳ͏ͬͯվળΛ֬ೝ͢Δͷʁ
վળͷ֬ೝํ๏ ௨৴ͷଳҬΛ੍ݶͯ͠ମݧ͕Α͘ͳ͍ͬͯΔ͔
One More Thing
͞ΒͳΔվળํ๏Ҋ ɾMessagePackͰJSONΛѹॖ͢Δ ɾHTTP/2Ͱ௨৴ίωΫγϣϯΛ·ͱΊΔ ɾ௨৴ଳҬʹΑΔಉ࣌ଓͷௐ
ΤϯδχΞืूͯ͠·͢ɿʣ ͓͠·͍