by 知识小集 - Vong
今年的 GMTC 大会在 6.21~6.22 进行,由于时间问题,我只去了两个自己感兴趣的专题:性能优化专场以及 iOS 新技术专场。
性能优化专场在 21 号下午进行,当天早上 Flutter Release Preview 1 放出,更多关于 Flutter 的文章,可以在我们公众号 知识小集 上获取。
性能优化专场
当天下午提前一小时从公司出发,1:30 到现场时,会场已经满座,只能坐地下,第二场一些人走了之后才空出一些座位。
第一场是 LinkedIn iOS 工程师带来的《LinkedIn 移动应用的性能优化实践》,分享了领英的一些性能优化实践。 随着应用体量(功能)变得越来越庞大,最初的应用架构会变得越来越撑不住,所以需要适时调整合理的应用架构。领英使用组件化和标准化来提高代码复用率以及降低项目复杂度,进而减少了线上的崩溃率和性能问题。建立完善的性能监控体系对线上用户的性能数据进行分析,发现问题并解决问题,同时使用 AB 实验来快速验证效果。最后作者通过一个实际案例来阐述,以上几点是如何在项目中落地实践的。通过线上监控发现页面加载比较慢,主要原因有:网络请求多、数据量大、页面渲染慢,对这三个分别采取对应措施来解决:网络优化,使用 http/2、数据简化(服务端精简返回字段)、布局优化(领英开源库 LayoutKit,将布局计算放到后台线程)。
其实大部分应用都可能存在上述问题,从网络发起到页面完整渲染展示,里面很多的关键节点都可能导致页面加载过慢。对于数据简化这一块,作者有提到他们内部有一个 Frontend Deco 平台,客户端可以根据实际情况选择需要服务端返回的字段,然后生成一个 recipe_id,请求时带上这个参数,则只会返回对应的数据,进而实现数据精简。
这里有一点很疑问,理论上性能优化是肯定能改善用户体验的,这里对性能优化做 AB 实验是不是有点多此一举?
剩下的 3 场主要是前端和安卓上的性能优化,由于自己对于安卓和前端技术一无所知,所以只是大概听了一下。
印象比较深的是阿里的监控体系,还原用户“事发现场”,大致原理就是记录首屏时的所有数据,用户操作导致的增量数据页实时记录,进而实现用户操作现场的还原。
爱奇艺的“极致”性能优化,对于功耗的测量,使用 PowerMonitor 来检测分析,同时使用 AI 来做自动化测试。同时开源了 LiteAPP,感兴趣的可以自行在 GitHub 上搜索。
iOS 新技术专场
这一场在22号早上9点半开始,9点到达会场,人没有昨天那么多,空位很多。这个专题出品人是嘀嘀出行的戴铭老师。这个专场有三个主题,讲师分别来自 Instagram、美团、美甲帮。
来自 Instagram 的工程师主要分享了复杂列表的解决方案、对照实验、以及加快编译速度。
复杂列表使用他们自己开源的 IGListKit 以及 MVVM 架构来实现代码复用,各自业务团队代码集中在 SectionController 来达到解耦,各个业务团队只需专注于自己的业务逻辑。同样 Instagram 也通过 AB 实验来抉择出一些较好的产品需求,同时通过 AB 实验来保持产品的快速迭代。同时随着 AB 实验的增多,难免会遇到一些互斥实验或者互相影响的实验,所以在设计一些实验时,也需要尽量避免这种情况。对于可能互相干扰的实验,作者举了一个例子以及可能的几个解决方案,思路也是很多的,具体内容大家可以去官网上找到对应的 PPT 链接,下载查看。
最后一个分享点,也是目前大部分 iOS 开发者的槽点,就是 Xcode 的编译速度。随着工程及代码量的增大,编译速度也随之变慢,从原来的十几秒到几分钟到半小时(真正的“带薪编译”),编译时的心情也依次改变:😀->🙂->😰->😡->💀。Facebook 内部使用 Buck+Focus 来加快编译速度,Buck 目前已开源,据作者说,使用 Buck+Focus 后,编译速度又能到十几秒,感兴趣的可以尝试一下。