← 返回文章

Performance · Instruments

启动优化先切掉不该在启动期做的事

启动优化的第一原则:不要优化本来就不该发生的工作。很多启动耗时来自过早初始化 SDK、同步读文件、预加载非首屏数据和主线程解析大对象。

先定义首屏

没有首屏定义,就没有启动优化目标。首屏需要的服务优先,其余服务延迟到首帧后、用户触发时或后台队列中执行。

给关键路径打点

用 os_signpost 标记 AppDelegate、SceneDelegate、root view 创建、首个接口返回和首屏渲染完成。猜测没有价值,时间线才有。

let log = OSLog(subsystem: "com.cushiro.app", category: "launch")
let signpostID = OSSignpostID(log: log)
os_signpost(.begin, log: log, name: "FirstScreen", signpostID: signpostID)
// build root view and render first content
os_signpost(.end, log: log, name: "FirstScreen", signpostID: signpostID)

延迟不是乱丢后台

延迟初始化也要有顺序和依赖管理。把所有任务扔进全局队列只会制造竞态。更好的方式是列出启动后任务队列,按优先级逐步执行。