由于H5应用具备开发周期短、灵活性好的特点,所以OA项目应用功能开发过程中经常结合WebView +H5进行Hybrid模式开发,但Android 原生WebView客观存在的性能问题,导致H5应用加载速度慢,影响用户体验。基于OA H5应用中找到审批详情加载慢的原因,并对其优化。
一个页面在WebView中加载的粗略流程如下:
WebView初始化
当App首次打开时,默认是并不初始化浏览器内核的;只有当创建WebView实例的时候,才会创建WebView的基础框架;所以与浏览器不同,App中打开WebView的第一步并不是建立连接,而是启动浏览器内核。
针对Android WebView的初始化,分为首次初始化与第二次初始化。
首次初始化时间:客户端冷启动后,第一次打开WebView,从开始创建WebView到开始建立网络连接之间的时间
二次初始化时间:在打开过WebView后,退出WebView,再重新打开WebView,从开始创建WebView到开始建立网络连接之间的时间
设备环境 | 首次初始化(ms) | 第二次初始化(ms) |
---|---|---|
华为Mate 20 pro EMUI 10.1.0 (Android 10.0) | 196.2 | 34.7 |
华为P20 pro EMUI 10.0.0(Android 10.0) | 356.1 | 56.8 |
华为EH880 EMUI4.0(Android 6.0) | 191.6 | 43.7 |
以上皆为在OA应用上测试15次得出的平均数据
OA App 版本 1.0.30.*
公司生产环境-通知公告全区
由此可见,WebView在首次比非首次初始化时间消耗很多;可以尝试将WebView首次初始化提前准备,作为一个优化点。
方案: 提前初始化WebView备用。
数据加载
根据W3C介绍的有关页面导航时序规范,给我们提供了navigation Timing交互性能检测指标,可以帮助我们量化有关数据加载的指标。
具体的参数说明可以在官方了解 Navigation Timing
在性能优化方面,我们可以通过Navigation Timing 帮我们省去了繁琐的手动断点的操作,而且提供了以前我们我们无法获取的数据,比如DNS和TCP连接所需的时间。同时,Chrome给我们提供了辅助插件 DevTools可以协助调试。
Performance指标:
NekWork指标:
从性能指标与网络请求的过程看出,在加载页面时对首屏展示的时间直接影响了整体页面的体验效果。Web页面是由许多个资源和请求、渲染、绘制等一起参与加载出来的,而每个资源(