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
Benchmark_on_iOS
Search
to4iki
October 08, 2016
Programming
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Benchmark_on_iOS
https://github.com/to4iki/Benchmark
to4iki
October 08, 2016
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
180
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.7k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.8k
ビューインプレッションの計測方法
to4iki
1
1.2k
秘伝の `gitconfig`
to4iki
1
470
Abema iOS Architecture
to4iki
12
3.6k
timetable-bot
to4iki
0
15k
BLoC Pattern Introduction with Swift
to4iki
2
1.4k
nel
to4iki
0
200
Other Decks in Programming
See All in Programming
typoなんかねぇよ
raspython3
0
530
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
1
2k
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
320
React本体のコードリーディング
high_g_engineer
1
150
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
350
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
370
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
110
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.2k
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
210
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Statistics for Hackers
jakevdp
799
230k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
440
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Code Reviewing Like a Champion
maltzj
528
40k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
57k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
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Λ༻ͯ͠Έͨ • ίετʹରͯ͠ϖΠ͠ͳ͍ͷͰෆ࠾༻ • ࠶ඳըΛݮΒ͢Α͏ʹλΠϛϯάௐ • ߴ͞ܭࢉճస࣌ͷϩδοΫΛվम
• ಓʹίπίπͱϨΠΞτఆٛݟ͠