2020年初,小红书首页 UI 的复杂度显著提升,在优化布局 xml 和使用一些 stub 方式的同时,我们也在寻找一些成本更低、性能更好的方式。
X2C 是当时业界熟知的一种优化方式,其原理是编译期将 xml 翻译成代码,可以有效避免反射以及读取资源文件的损耗。由于小红书 APP 中存在着很多自定义 View 的场景,X2C 同时也会带来较高的维护成本。
经过对 LayoutInflater 耗时的深入分析,我们找到了可以兼容各种 View 场景的 APT 方案。这一方案既避免了反射所带来的损耗,也不会增加额外的维护成本,成为了一个开箱即用的工具。

我们的探索灵感来自于 ViewCompiler 。作为 Google 的一个实验性工具,ViewCompiler 可以手动地将 xml 布局转化为 java 文件或者 dex 文件,但它并不支持 merge 和 include 标签。

ViewCompiler 在 Android Q(Android 10)的时候被引入,目前来说也还是一个实验性质的工具

小红书通过分析LayoutInflater耗时,提出了一个基于APT的解决方案Layout2Code,以减少反射损耗并提高性能,尤其在处理自定义View场景时。此方案避免了X2C的高维护成本,解决了ViewCompiler不支持merge和include标签的问题。应用新方法后,线上首页布局时间显著减少,提升了用户体验。
最低0.47元/天 解锁文章
512

被折叠的 条评论
为什么被折叠?



