回顾系统 WebView 进化史
从Android4.4系统开始,Chromium内核取代了Webkit内核。
从Android5.0系统开始,WebView移植成了一个独立的apk,可以不依赖系统而独立存在和更新。
从Android7.0 系统开始,如果用户手机里安装了 Chrome , 系统优先选择 Chrome 为应用提供 WebView 渲染。
从Android8.0系统开始,默认开启WebView多进程模式,即WebView运行在独立的沙盒进程中。
WebView启动过程
app首次打开默认不初始化浏览器内核,只有创建WebView实例才会初始化相关组件
初始化时间分为两部分:
首次初始化时间:客户端冷启动后,第一次打开WebView,从开始创建WebView到开始建立网络连接之间的时间。
二次初始化时间:在打开过WebView后,退出WebView,再重新打开WebView,从开始创建WebView到开始建立网络连接之间的时间。
在浏览器中,我们输入地址时(甚至在之前),浏览器就可以开始加载页面。
而在客户端中,客户端需要先花费时间初始化WebView完成后,才开始加载
怎么优化:
1.创建全局webview,但是额外的内存消耗并且容易造成内存泄漏。
2.在客户端初始化WebView的同时,直接由native开始网络请求数据;当页面初始化完成后,向native获取其代理请求的数据
70%以上业务由H5开发,手机QQ Hybrid 的架构如何优化演进?
在页面请求的数据返回之前,主要有以下过程耗费时间。
DNS
WebView的域名与App的API域名统一,则可以让WebView的DNS时间全部达到1.3ms的量级。
静态资源同理,最好与客户端的资源域名保持一致。
connection
服务器处理
在HTTP协议中,我们可以在header中设置 transfer-encoding:chunked
使得页面可以分块输出。如果合理设计页面,让head部分都是确定的静态资源版本相关内容,而body部分是业务数据相关内容,那么我们可以在用户请求的时候,首先将Web API可以确定的部分先输出给浏览器,然后等API完全获取后,再将API数据传输给浏览器。
创建独立的进程process
进度条
开启软硬加速(闪烁或者黑白屏),耗费更多的内存