转载

Swift 提升性能的秘密 Part 1 - Measure

Swift 提升性能的秘密 Part 1 - Measure

原文由Kostiantyn Koval发表于Medium,地址为 Secret of Swift Performance :Part 1 — Measure

Swift性能方面的讨论已经很多了。如:它真的比C快么?它怎样才能更快? 去Google一下吧。

但是作为一个App开发者,我们需要知道如何以更简单的方式让我们的App更快。那加速App的银弹又是什么呢?

找出性能瓶颈

找出App的性能瓶颈是很重要的。按照80/20的原则来说,“大约20%的代码占用了80%的运行速度”,这意味着我们需要找出这20%的代码并优化它,而不用关心剩余的80%。

我写了个简单的带有一个闭包参数的测试函数,它的主要功能是测试闭包代码的运行速度。让我们来分析一下这段代码。

func measure(title: String!, call: () -> Void) {     let startTime = CACurrentMediaTime()     call()     let endTime = CACurrentMediaTime()     if let title = title {         print("/(title): ")     }     println("Time - /(endTime - startTime)") }

这个测试函数的参数有两个:辅助分析的可选名称(title)和类型为()->()的闭包函数。相当简单吧。它在调用call()的前后分别获取了当前时间,并打印出call()执行所花费的时间。

让我们来试一下吧。我有一个函数,它的职责是迭代一个数组,并加载图片。我想看看它需要花费多少时间。我们简单地包装一下这个代码块以方便测试函数调用。在这里我们使用了尾随闭包语义,看上去非常棒。

func doSomeWork() {     measure("Array") {         var ar = [String]()         for i in 0...10000 {             ar.append("New elem /(i)")         }     }     measure("Image") {         let url = NSURL(string: "http://lorempixel.com/1920/1920/")         let image = UIImage(data:NSData(contentsOfURL:url!)!)     } }

测试结果是

Array: Time — 0.0845723639995413 Image: Time — 1.77442857499955

Swift 提升性能的秘密 Part 1 - Measure

现在你知道了哪块代码占用了更多时间,然后就需要去优化它或者将其移到二级线程中处理。

提醒

应该总是在Release模式且Optimization Level设置为[-Os]或[-Ofast]的情况下去测试运行速度。

Swift 提升性能的秘密 Part 1 - Measure

正文到此结束
Loading...