Swift で Benchmark して速度改善しよう
最近、 Ruby や Ruby on Rails から離れ、iOS のアプリ開発をするようになりました。
iOSアプリ自体は初めてではないのですが、1 - 2年ぶりでその時も言語としては Objective-C をメインにしていたので、
やっと Swift デビュー をする感じになりました。
そんな、久しぶりの アプリ開発 でこれ欲しいなーという機能があったので作ってみました。
iOS (Xcode) で速度改善
速度改善する上で、一番重要なのは どこの処理 に どれだけの時間 がかかっているか。 これを測定するには、今までは やたらとログを貼りまくって 時間を測定するという方法をとってました。
// こんなやつ let start = NSDate() print("process - start") sleep(1) print("process step 1 \(NSDate().timeIntervalSinceDate(start))") sleep(1) print("process step 2 \(NSDate().timeIntervalSinceDate(start))") sleep(1) print("process - end \(NSDate().timeIntervalSinceDate(start))")
正直、時間図るために、このコード量。。。問題ありだろ。。 と思いながらも、こんな感じのコードをいつも渋々書いておりました。
しかし、 「せっかくの Swift デビューだし、 Podのライブラリも作ったこと無いし、ライブラリ作るか!」 と思いたち、いつも使い慣れてる ruby の benchmark に相当するクラスを作成してみました。
導入方法
Podfile
に下記のように追加してください。
pod 'Benchmark', git: 'https://github.com/kei-p/Benchmark-swift.git'
使い方
使い方としては、以下の2通りを想定して作りました。
例1: 単純な計測
let b = Benchmark.measure("hoge") { // 計測したい処理 sleep(10) } print(b)
Benchmark hoge { start 0.000 sec - 2016-09-30 03:10:46 +0000 end 10.001 sec - 2016-09-30 03:10:56 +0000 }
例2: 一連の処理の各処理ごとの経過時間計測
// case 2 let b = Benchmark.start("hoge") sleep(1) b.lap("step1") sleep(1) b.lap("step2") sleep(1) b.end() print(b)
Benchmark hoge { start 0.000 sec - 2016-09-30 03:10:56 +0000 step1 1.001 sec - 2016-09-30 03:10:57 +0000 step2 2.002 sec - 2016-09-30 03:10:58 +0000 end 3.003 sec - 2016-09-30 03:10:59 +0000 }
さいごに
速度改善はまずどこが原因かを探るのが大変なので、探る作業自体をやりやすくするってのはかなり重要だなと思いました。
かなり機能の薄いライブラリですが、それでも pod install
するだけで使いまわせる便利さは十分に発揮できそうな気がしてます!