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

性能

首屏慢,先画请求瀑布

一个页面串行打四五个接口,用户等到的是最后一条的尾巴,不是你本地解析有多快。

界面逻辑已经很干净,首屏仍要两秒。用网络仪器看瀑布:是不是进页面才发请求,后一个请求要等前一个的 id,图片又排在数据之后。本地解析省下的 20 毫秒,盖不住这一串等待。

能并行的不要串

没有依赖的请求一起发。有依赖的,把关键路径缩到最短:首屏必须的字段先回来,评论、推荐、红点下一帧再要。不要为了“接口少”把一个大接口做成必须全成功才能渲染。

func loadHome() async throws -> Home {
    async let profile = api.profile()
    async let feed = api.feed(page: 1)
    return Home(profile: try await profile, feed: try await feed)
}

async let 会并行开始。其中一个失败时,记得取消另一个,不要让无用请求继续占连接。URLSession 的超时和重试要有上限,无限重试会把首屏卡死在转圈上。

缓存是界面策略

度量用首屏可用时间:从进入页面到第一条内容画出来,再记到图片稳定。两个数分开。只记接口耗时,会漏掉你在主线程上拼模型和排版的时间。