性能
启动项按四步砍
能删就删,不能删就延后,不能延后再并发,最后才是把剩下的代码写快。
启动清单一长,人会从“这段能不能再快 10 毫秒”开始改。顺序反了。先问这个任务启动时要不要存在。
四步
- 删。统计、预热、非首屏的注册,很多可以从启动拿掉。
- 延。第一次用到再做,或者首帧之后找个空档做。
- 并发。不能延的,放到多核上,别挤在主线程。
- 写快。前三步都做不到,再谈算法和 IO。
埋点要能对上用户看见的时刻。进程创建是起点。终点接近第一帧提交,而不是某个业务自己觉得“准备好了”。iOS 12 及更早,可以用根控制器的 viewDidAppear 近似;更新的系统,applicationDidBecomeActive 更接近回到前台这一下。系统内部的第一次 CATransaction commit 才是官方口径,自己的点要靠近它,并且固定下来,前后才能比。
别动的东西
不要去删 tmp 里 dyld 的启动闭包。iOS 13 之后那份缓存能让下次启动少做很多工作,删掉会重新生成,生成本身很慢。Keychain、第一次取 User-Agent,老设备上会明显变慢,能延后或缓存就不要放在首帧前。
后台拉起可以提高“用户点开时进程还在”的比例,但日活、广告和实验进组都会被算进一次后台启动。这些任务要分清是冷启动还是从后台回前台,不能把前台才该做的事在后台做掉。