WebView稳定性提升30%+, X5内核多进程实践
前言
图源:https://developers.google.com/web/updates/2018/09/inside-browser-part3
Browser:负责管理 WebView 或浏览器 Tab 实例(包括运行 UI、管理导航请求和历史栈等),发起实际的网络请求加载网页资源和访问文件等等
Renderer:负责网页内容解析、排版、绘制、JavaScript 执行等
GPU:负责 GL 指令的实际执行与上屏等
Plugin:负责控制网页中的插件
Utility:用于执行短期的任务
多进程架构
沙箱多进程机制
行业观察
X5 内核多进程架构
Android 系统内核多进程架构
X5 解决方案
SDK 设计
动态化
X5 内核沙箱多进程动态化解决方案
dex 加载
so 加载
启动优化
执行重编 base.odex 的命令耗时较长,在上述 2 个机型分别耗时 63 秒和 128 秒
执行上述命令在部分机型上比较耗费 CPU 和内存资源,实测荣耀 V10(Android 9)上 CPU 占用率峰值可以达到 50%+
执行上述命令期间 base.odex 不可用,导致应用程序其他进程启动时也不能直接加载 odex 文件
另外也存在生成的 base.odex 文件较大的问题
-
在不开启 isolated 进程的情况下,荣耀 V10 和华为 P30 Pro 上 Browser 进程与 Renderer 进程合计总 PSS 比单进程分别多 23M 和 34M -
在开启了 isolated 进程且 odex 可读的情况下(线上大约 37% 用户 odex 可读),2 台机器总 PSS 比单进程分别多 94M 和 101M -
在开启了 isolated 进程且 odex 不可读的情况下,2 台机器总 PSS 比单进程分别多 210M 和 203M
内核子进程 dex 减包
宿主 Application 初始化屏蔽
子进程绑定 3 秒超时率
总结与展望
内核 Crash 率
内核 OOM 率
-
答案大部分都在源码中:InMemoryDexClassLoader、Crazy Linker 和 base.odex 重编等都是从源码中找到的解决方案;mmap so 可执行段权限不足,也是通过 v8 JIT 确认可行 -
最小集合:子进程 Java 代码 dex 化就是我们区分了系统限制的最小集合,将不受限制的部分剥离出来做成 dex 解决包大小和兼容性问题
在QQ浏览器实验室,交流技术创新