Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Benchmark_on_iOS
to4iki
October 08, 2016
Programming
0
190
Benchmark_on_iOS
https://github.com/to4iki/Benchmark
to4iki
October 08, 2016
Tweet
Share
More Decks by to4iki
See All by to4iki
to4iki
0
460
to4iki
1
270
to4iki
11
2.4k
to4iki
0
8.7k
to4iki
2
740
to4iki
0
100
to4iki
0
16
to4iki
0
380
to4iki
0
860
Other Decks in Programming
See All in Programming
takaram
1
1.1k
horie1024
1
340
tommykw
1
310
kubode
0
180
line_developers_tw
0
990
osyo
1
360
mu2in
0
130
line_developers_tw
0
350
fkubota
1
390
line_developers_tw
0
370
akatsukinewgrad
0
130
supikiti
3
1.3k
Featured
See All Featured
keathley
17
630
chrislema
173
14k
3n
163
22k
schacon
145
6.6k
paulrobertlloyd
71
3.6k
davidbonilla
69
3.5k
shpigford
368
42k
myddelton
109
11k
shpigford
165
19k
tanoku
86
8.5k
dougneiner
119
7.8k
searls
204
35k
Transcript
Benchmark on iOS shinjyuku.lt #2 @to4iki
୭ʁ • @to4iki • GANMA!ͱ͍͏ອը৴ͷαʔϏεΛ࡞ͬͯ ͍·͢
Agenda • ՝ • Benchmarkͱ • BenchmarkΛͱΔ
՝ • iOSΞϓϦʹ͓͍ͯϖʔδද͕͍ࣔͷΛߴ Խ͍ͨ͠
ո͍͠ͱ͜Ζࢁ • HTTP௨৴ • JSONͷσγϦΞϥΠζ • ඳը(UITableView etc..) • ը૾ؔ࿈
• etc…
ݪҼΛಛఆ͢ΔͨΊͷࡐྉ͕ ඞཁ
ܭଌ͠Α͏
None
https://developer.apple.com/jp/documentation/ToolsLanguages/Conceptual/ Xcode_Overview/Debugging/MeasuringPerformance.html
XCTest#mesure
https://developer.apple.com/reference/xctest/xctestcase/1496290-measure
͍ॴ • ͬ͘͟Γͱͨ͠ಛఆͩͱInstrumentߴػೳ ͗͢Δ => ࡉཻ͔͍Ͱݟ͍ͨࡍʹ༗ޮ • XCTest#mesuretest࣮ߦͷ࣌ͷΈ͔͠ܭଌ Ͱ͖ͳ͍
ΑΓ”ࡶ”ʹݪҼΛಛఆ͍ͨ͠
Benchmark
Benchmark • ൺֱͷͨΊʹ༻͍Δࢦඪ • ਫ४ج४ • ଌྔʹ͓͍ͯ… • ௨ৗͰಈ͔ͳ͍ҐஔΛϕϯν”ϚʔΫ”ϙΠϯ τʹఆΊͦΕΛج४ͱͯ͠ݐɺߏͷҐஔ
ΛܾΊΔ
Benchmark(Programming) • ϥΠϒϥϦͷબఆɺγεςϜߏͷܾఆͳͲʹͨͬͯɺ୭͕ೲಘ Ͱ͖٬؍తͳஅΛԼ͢͜ͱΛՄೳͱ͢ΔࠜڌͱͳΔఆྔతͳࢦඪ • ಛఆͷॲཧΛऴ͑Δ·Ͱʹ͔͔Δ࣌ؒ • ಛఆͷ࣌ؒʹॲཧͰ͖ͨճ • ϝϞϦফඅྔͷਪҠ
• σΟεΫΞΫηεͷස • etc…
func measure(f: () -> Void) { let start = CACurrentMediaTime()
f() let end = CACurrentMediaTime() print("Time: \(end - start)") } // exc measure { aswesome() }
func measure<A>(f: () -> A) -> A { defer {
print("Time: \(end - start)") } let start = CACurrentMediaTime() let result = f() let end = CACurrentMediaTime() return result } // exc let result = measure { aswesome() }
࠷ݶͷࢦඪ • nճ࣮ߦͨ͠߹ͷ • ฏۉ࣮ߦ࣌ؒ • ඪ४ภࠩ(Β͖ͭ)
to4iki/Benchmark https://github.com/to4iki/Benchmark
None
to4iki/Benchmark • Inspired by Ruby Benchmark Module • Swift3.0 •
XCTest#measureʹد͍ͤͯΔ • ؆қతͳϝτϦΫεܭଌΛߦ͏
let time = Benchmark.realTime(label: "awesome: ") { sleep(3) } print(time)
// awesome: 0.030s let metrics = Benchmark.measure(label: "[awesome]") { awesome() } print(metrics) // [awesome] // average: 0.030s // STDDEV: 4%
let n = 100000 Benchmark.bm(labels: ["total: ", "ave: "]) {
(r: Benchmark.Report) -> [TimeInterval] in let ex1 = r.time(label: "for: ") { for i in 1...n { String(i) } } let ex2 = r.time(label: "forEach: ") { (1...n).forEach({ String($0) }) } let total = ex1.elapsed + ex2.elapsed let ave = total / 2 return [total, ave] } // for: 0.027s // forEach: 0.037s // total: 0.064s // ave: 0.032s
ͬͯΈͨ • ࣮ϓϩμΫτͷܭଌʹ༻ • ·ͩ·͍ͩʹ͍͘ൃݟ
• ϓϩμΫγϣϯίʔυʹϏδωεཁ݅Ҏ֎ͷ ίʔυΛຒΊࠐΈͨ͘ͳ͍ͷͰ • AOPͰܭଌ༻ͷϩάग़ྗΛ͍ͨ͠ (http://qiita.com/xaatw0/items/ 5876afa418d4b6467e4e) • ଌఆͷ։࢝ͱऴྃͷ໌ࣔతͳίϯτϩʔϧ
·ͱΊ • ·ͣ”ࡶ”ʹ”ܭଌ”(ݱঢ়ΛѲ͢ΔͨΊ) • ͦͷ͋ͱʹৄࡉΛ֬ೝ • ϕϯνϚʔΫΛऔΔࡍʹͲͷ؍ʹண͢Δ ͔Λ͖ͬΓͤ͞Α͏
Any Questions?
(͓·͚) Ͳ͏͍ͬͨνϡʔχϯάΛߦ͔ͬͨ • σʔλؒ௨৴ʹMessagePackΛ༻ͯ͠Έͨ • ίετʹରͯ͠ϖΠ͠ͳ͍ͷͰෆ࠾༻ • ࠶ඳըΛݮΒ͢Α͏ʹλΠϛϯάௐ • ߴ͞ܭࢉճస࣌ͷϩδοΫΛվम
• ಓʹίπίπͱϨΠΞτఆٛݟ͠