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 后,编译速度又能到十几秒,感兴趣的可以尝试一下。
来自美团的臧成威老师分享了他们即将开源的面向对象的响应式架构:EasyReact 以及 EasyMVVM,相信用过 ReactiveCocoa 的同学都很清楚,每次调试时,调用栈非常深,而且中间的调用栈内容几乎没啥用处,调试起来比较费劲,作者表示 EasyReact 相对于 ReactiveCocoa,同样的5次变换操作,前者调用栈只有10层,而 ReactiveCocoa 有50层。关于其它的对比,可以参考一下作者放出的 benchmark 对比图
![](http://www.mk2048.com/web_upload/blog_imgs/8/https___user-gold-cdn-xitu-io_2018_7_4_16462b80b007fde4_w-1080_h-580_f-jpeg_s-49289.gif)
最后美甲帮的靛青分享了他的解决异构列表的开源库 Flix。主要是通过几个实例来一步步给出 Flix 的设计理念,以及一些使用场景,会上代码涉及的较多,感兴趣的可以自行去 GitHub 上翻阅对应源码。
感受
AB 实验作为一种快速验证想法的工具,目前国内外大公司应该都有在使用,相对于传统的版本迭代,AB 实验可以较好的缩小迭代周期,在以数据结果为导向的情况下,也能快速得出结论,不需要做过多争辩。但同时它也带来了一些挑战,比如 AB 实验的设计,以及对实验结果的分析等。
性能优化作为每个开发者都应该掌握的技能,开发过程中需要多考虑性能上的问题,不能一味追求需求完成速度,还要兼顾质量。
整个两场专题听下来,感受最深的就是几乎每个小主题都在分享自己的开源框架,一方面可以提高自己公司的影响力,另一方面也可以吸引到更多人。
最后就是一定要挑自己感兴趣的主题去听,不然可能会觉得有点无聊,对于一些比较火爆的场次,最好提前一点去,不然全程站着,会很累?。
PS:以上所有场次的 PPT 均可下载
知识小集是一个团队公众号,主要定位在移动开发领域,分享移动开发技术,包括 iOS、Android、小程序、移动前端、React Native、weex 等。每周都会有 原创 文章分享,我们的文章都会在公众号首发。欢迎关注查看更多内容。
![知识小集](http://www.mk2048.com/web_upload/blog_imgs/8/https___user-gold-cdn-xitu-io_2018_5_8_1633d1278e68b61a_w-430_h-430_f-jpeg_s-38777.gif)