保持稳定的性能,是我们提供良好的用户体验的关键之一。
但是很多时候,性能下降很难重现,也无法获得良好的数据支撑。
为了解决这个问题,苹果在iOS12上推出了一个用于辅助开发调试的工具:Signposts(路标)。
1. Signposts 简介
Signposts(路标)
是 OSLog 家族成员之一,我们可以用它来测量和收集性能数据,以便结合 Instruments 来做可视化分析。其对应的API为 os_signpost,它主要有两大功能:标记时间段 ( intervals
) 和单个时间点 ( events
)。
下面,我们来看看如何使用 Signposts。
2. 使用 Signposts
2.1 测量时间间隔
Signposts
通过用 os_signpost(.begin, ...)
和 os_signpost(.end, ...)
来标记一个路标间隔的开始和结束。
![Measuring Intervals with Signposts
代码如下:
import os.signpost
// 1.
let refreshLog = OSLog(subsystem: "com.example.your-app", category: "RefreshOperations")
// 2.
os_signpost(.begin, log: refreshLog, name: "Refresh Panel")
for element in panel.elements {
// 3.
os_signpost(.begin, log: refreshLog, name: "Fetch Asset")
// 4.
fetchAsset(for: element)
// 5.
os_signpost(.end, log: refreshLog, name: "Fetch Asset")
}
// 6.
os_signpost(.end, log: refreshLog, name: "Refresh Panel")
下面详细解释一下上面的代码:
- Signposts是基于日志系统的,所以需要先创建一个日志句柄(或日志对象),这个日志句柄初始化需要两个参数,其中
subsystem
表示应用子系统,可以是应用的包名或者框架的名称,采用反向DNS 表示法,如com.your_company.your_subsystem_name
;category
表示子系统中的一个类别,用于对日志消息进行分类和过滤。 - 在获取所有资源的开始,添加一个名为Refresh Panel路标
- 在获取某个资源的开始,添加一个路标,因为在 for 循环内部,这里会重复调用
- 获取资源…
- 在获取某个资源结束时,添加一个路标。
- 在获取所有资源结束时,添加路标。
在每次开始、结束获取资源时,我们都添加了一个