
文章插图
size-analyzer命令的输出
Proguard
Proguard是一个压缩、模糊和优化JAVA字节码的工具 。因为已经了解到可能与其他Android库不兼容,所以我们还没有探索这一途径 。我们正在寻找快速而容易的缩减的方法,未来可再进行优化 。
大型资产
使用-d标志再次运行该命令,将得到按大小排序的每个资产的列表 。由于size-analyzer工具不知道应用程序的用户流,它让我们决定哪些可以删除或动态捆绑 。

文章插图
按大小排序的大型资产列表
第一个也是最大的项目是React Native JavaScript包 。目前还不可能拆分和动态加载,但是将在稍后看到如何缩小它 。沿着建议列表进一步向下,我们看到许多大型字体(TTF)和图像(JPG和PNG)资产 。
不需要的图片
内部Storybook工具中使用的四张巨大的JPG图片吸引了我们的注意力 。他们给生产APK增加了额外的2MB垃圾!
在软件工程这个复杂的世界里,人人都会犯错误 。我相信与同行分享这些经验时,大家都可以从这里学习到很多 。如果不跟踪应用程序不断增长的规模,很可能也会犯这些失误 。
字体
在迅速摆脱这些大图之后,我们不断地查看列表的其余部分 。很明显,有大量的字体被捆绑 。在与设计团队交谈后,他们告诉我们许多旧组件没有严格遵循排版指南 。

文章插图
图源:unsplash
所以我们确定了哪些组件可以被移除,哪些可以使用类似的更新字体 。通过此法,我们把字体的使用从六个减少到四个 。
另一个问题是字体资产大小巨大无比!每个字体大小几乎达到了670KB 。这意味着四种字体占了未压缩包高达2.7MB的大小 。
有一个名为FontForge的工具,可以更深入地查看和修改这些字体文件 。打开后可以看到大部分的资产规模可以用扩展的西里尔文字和其他不需要的字形来解释 。这些都可以被删除,因为应用程序完全是葡萄牙语 。
随着这一变化,每个字体大小从670KB缩小到70KB,减少了90%!

文章插图
字体中包含的一些字形的示例
删除不需要的字体并优化剩余的字体总共减少了3.8 MB,这意味着最终APK的大小减少了2 MB 。

文章插图

文章插图
删除两个字体并优化剩余字体前后对比
优化图像
在剩下的图像中有一些是相当大的 。我们通过图像优化工具(tinyjpg)优化了其中的几个,大小缩减了很多 。之后,我们决定优化应用程序内使用的所有41个JPG和PNG资产 。

文章插图
优化的图像的前后
这使图像资产从2.5MB减少到756 KB,减少了70% 。但是图像本身没有优化,在生成最终APK的过程中已经被压缩了 。因此,实际上只为最终用户削减了500 KB 。
在这之后,我们意识到已经耗尽了所有容易的hanging fruit optimizations 。所有进一步的资产优化要么需要更多的努力,要么只会带来很小的改进 。

文章插图
优化React Native JavaScript bundle已经看完了native资产,现在是时候分析JavaScript包了 。这是一件特别值得优化的事情,原因有三:
· 首先,它减小了成品APK的bundle大小;
· 其次,由于JS虚拟机解析更少的代码,所以能进行更快的应用程序启动;
· 最后,也是最重要的一点是,它加快了每周通过CodePush多次发布的空中(OTA)更新的速度 。
Bundle analyzer
要决定将如何减少bundle的大小,首先,需要能够看到什么占用了最多的空间 。为此,我们将依靠另一个优秀的开源工具:
react-native-bundle-visualizer 。在项目运行时,得到了应用程序的每个文件夹和依赖项以及它们各自大小的可视化 。

文章插图
Mutual前端代码库的库和文件夹的展示及其大小
应用程序包总共有5.49MB,其中57.8%来自node_modules依赖项,27.5%来自应用程序代码,其余部分是工具无法映射的 。捆绑过程已经移除了未使用的代码路径,在这里看到的是应用程序实际使用的代码 。即便如此,总还有改进的空间 。
推荐阅读
- 小米高性价比手机来袭,128GB内存+4800W像素四摄,999元香不香?
- 小米应用商店风云榜办公类App下载排行,钉钉被腾讯会议反超
- 流量转化漏斗:App核心分析思路有哪些?
- 华为手机清理内存技巧,让手机使用更快
- Android指纹识别,提升APP用户体验,从这里开始
- 如何选购电脑内存条?小白装机通俗易懂的电脑内存选购知识指南
- 探索 Android 内存优化方法
- Java对象的内存分配过程是如何保证线程安全的?
- redis内存使用分析
- 网购APP百强榜单出炉 网购去哪里
