---
title: "GMTC 之旅"
description: "第一次参加 GMTC 的现场记录，重点整理性能优化专场里 LinkedIn 的组件化、监控体系与 LayoutKit 后台布局实践。"
date: "2018-10-28"
tags: ["原创","杂谈"]
canonical: "https://vonglo.cn/posts/some-thoughts-on-gmtc-2018/"
license: "CC BY-NC-SA 4.0"
licenseUrl: "https://creativecommons.org/licenses/by-nc-sa/4.0/"
---
# GMTC 之旅

> 第一次参加 GMTC 的现场记录，重点整理性能优化专场里 LinkedIn 的组件化、监控体系与 LayoutKit 后台布局实践。

上周凑巧有机会拿到 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 实验是不是有点多此一举？

> 分享者的回答：
> ![分享者解释性能优化仍需 A/B 实验，以检查副作用并量化收益](/media/Some-thoughts-On-GMTC-2018/Some-thoughts-On-GMTC-2018-01-15407047702510.jpg)

剩下的 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](https://github.com/facebook/buck) 目前已开源，据作者说，使用 `Buck+Focus` 后，编译速度又能到十几秒，感兴趣的可以尝试一下。

来自美团的臧成威老师分享了他们即将开源的面向对象的响应式架构：`EasyReact` 以及 `EasyMVVM`，相信用过 `ReactiveCocoa` 的同学都很清楚，每次调试时，调用栈非常深，而且中间的调用栈内容几乎没啥用处，调试起来比较费劲，作者表示 `EasyReact` 相对于 `ReactiveCocoa`，同样的5次变换操作，前者调用栈只有10层，而 `ReactiveCocoa` 有50层。关于其它的对比，可以参考一下作者放出的 `benchmark` 对比图

![GMTC 分享中的 EasyReact 与 ReactiveCocoa 各项操作性能对比柱状图](/media/Some-thoughts-On-GMTC-2018/Some-thoughts-On-GMTC-2018-02-15304329513135.jpg)

最后美甲帮的靛青分享了他的解决异构列表的开源库 [`Flix`](https://github.com/DianQK/Flix)。主要是通过几个实例来一步步给出 Flix 的设计理念，以及一些使用场景，会上代码涉及的较多，感兴趣的可以自行去 GitHub 上翻阅对应源码。

## 感受

AB 实验作为一种快速验证想法的工具，目前国内外大公司应该都有在使用，相对于传统的版本迭代，AB 实验可以较好的缩小迭代周期，在以数据结果为导向的情况下，也能快速得出结论，不需要做过多争辩。但同时它也带来了一些挑战，比如 AB 实验的设计，以及对实验结果的分析等。

性能优化作为每个开发者都应该掌握的技能，开发过程中需要多考虑性能上的问题，不能一味追求需求完成速度，还要兼顾质量。

整个两场专题听下来，感受最深的就是几乎每个小主题都在分享自己的开源框架，一方面可以提高自己公司的影响力，另一方面也可以吸引到更多人。

> PS：以上所有场次的 PPT 均可在[这里](https://gmtc.infoq.cn/2018/beijing/schedule)下载到
---

Canonical: https://vonglo.cn/posts/some-thoughts-on-gmtc-2018/
License: [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)
Author: Vong
