建筑师之家IOS / NOTES
← 全部笔记

性能

性能问题按这个顺序查

先复现并量化,再改一处。Debug 下的好转,多数不能当结论。

性能改动最浪费时间的方式,是同时关几个 SDK、换一种图片库、再把列表改成手动布局,然后觉得“好像顺了”。下次退步时,没有人知道该看哪。

顺序

实验室和线上

Instruments 适合你能复现的问题。线上的慢启动、挂起,用 MetricKit 看分布,而不是看某一个同事的机器。实验室里快 200ms,线上 p90 没动,就说明你优化的那条路径不是用户在走的那条。

import os

let log = OSLog(subsystem: "cn.myjzsfly.app", category: "feed")

func reloadFeed() {
    let signpost = OSSignposter(logHandle: log)
    let state = signpost.beginInterval("reload")
    defer { signpost.endInterval("reload", state) }
    // 只包住这一次刷新的真正工作
}

子系统用你自己的反向域名,类别用功能名。区间名字稳定,后面才能把几次录制放在一起比。

容易误判的情况

留一个最小记录:问题、指标、改动、前后数字。下一篇笔记只要能接上这个记录,就比再收藏十篇泛泛的优化清单有用。