Chrome 将代码分区,在 Android 上性能大变 - Go语言中文社区

Chrome 将代码分区,在 Android 上性能大变


code小生 一个专注大前端领域的技术平台

公众号回复Android加入安卓技术群

文 |  罗奇奇

出品 | OSC开源社区(ID:oschina2013)

11 月 16 日, 谷歌宣布通过隔离拆分代码提高 Android 上 Chrome 的速度和内存使用率。通过这些改进,Android 上的 Chrome 现在使用的内存减少了 5-7%,并且启动和加载页面的速度比以前更快。

对于 Android 应用程序(包括 Android 上的 Chrome),编译后的 Java 代码存储在.dex 文件中。由于其多进程架构,Android 上 Chrome 的用户体验对 .dex 大小的增加特别敏感。

在 Android 上,Chrome 会一直运行 3 个以上的进程:浏览器进程、GPU 进程和一个或多个渲染器进程。Chrome 的 Java 代码绝大多数只在浏览器进程中使用,但加载代码的性能和内存成本是由所有进程支付的。

捆绑包和功能模块

最理想的情况是加载浏览器进程运行所需的最小 Java 块。谷歌通过使用 Android App Bundles 并将浏览器进程代码拆分为功能模块来接近这一点,功能模块可以在用户需要时才加载。

例如,如果一个应用程序有一个只有一部分用户需要的大型功能,该应用程序可以避免为不需要的用户安装。但是,对于更常用的功能,在运行时才下载的功能可能会给用户带来困扰——例如,如果移动数据不可用,则会带来额外的延迟或挑战。

d9291651ce7b7a673105835acd512d26.png

最理想的情况是能够提前安装所有标准模块,但只在实际需要时才加载。

特征模块

在 Chrome 的情况下,渲染器和 GPU 进程中所需的少量代码可以保留在基本模块中,浏览器代码和其他高内存消耗的功能可以在需要的时候拆分成功能模块进行加载。使用这种方法,谷歌将加载在子进程中的 .dex 大小减少 75% ,到大约 2.5MB,启动更快,并使用更少的内存。

4af40b406f262bb2fe5ea427206b735a.png

该架构还启用了浏览器进程的优化,通过在后台线程上预加载大部分浏览器进程代码来缩短启动时间,同时应用程序初始化导致加载时间缩短 7.6%。当需要浏览器代码的 Activity 或其他组件启动时,实际上它已经被加载了。

通过优化如何将特征分配到特征模块中,就可以实现按需加载特征,从而节省内存和加载成本。

结论

目前,Chrome 在 Android Oreo 或更高版本的 Android 的内存使用、启动时间、页面加载速度和稳定性方面拥有以下改进:

  • 总内存使用量中位数提高了 5.2%

  • 中值渲染器进程内存使用量提高了 7.9%

  • GPU 进程内存使用中位数提高了 7.6%

  • 浏览器进程内存使用中位数提高了 1.2%

  • 95% 的启动时间提高了 7.6%

  • 95% 的页面加载速度提高了 2.3%

  • 浏览器崩溃率和渲染器挂起率的大幅改进

6 年软件开发,我的那些变与不变

推荐学Java——初识数据库

Chrome 浏览器将登陆 Fuchsia OS

直接 root Android 设备,会「隐身」的恶意软件 AbstractEmu 正在偷偷作恶

我是code小生,喜欢可以随手点个在看、转发给你的朋友,谢谢~

d10915f67ecd15fc6b06a1c4b3b04c5b.png

d2d656e92a6abfe24a88f91deac2ead5.png觉得不错,请点个在看呀

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_38754349/article/details/121528923
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-12-11 21:13:02
  • 阅读 ( 1357 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢