2019-08-16:谈谈如何对WebView进行优化?
Moosphan opened this issue · 11 comments
我先来,最简单的,设置先加载文字,然后在加载图片,会快一点😂,然后就是体验问题了,你可以自定义一些loading让加载的时候好看一点。
这是美图webview优化我感觉这是个方法
https://mp.weixin.qq.com/s/-WceVvEKp8bKtIJQsD3Srw
太高深的我不懂,但我晓得webview木有加载超时的回调监听,需要自己开定时器哦。
这是美图的WebView我优化感觉这的英文个方法
https://mp.weixin.qq.com/s/-WceVvEKp8bKtIJQsD3Srw
可以试下以上的方法进行优化:
-
单/多进程化:webView在独立的进程里面,那么WebView的进程崩溃不会影响到主进程运行;同时WebView的安 全漏洞也很难影响到主进程;如果是多进程的话,可以使用WebView的容器池,有二次秒开的作用;不过缺点就是需要你做好和WebView的跨进程通讯了
-
网络优化:我们可以让WebView的host和客户端的host保持一致,那么就达到复用DNS缓存的效果;如果客户端有针对网络请求进行了优化,那么可以让WebView的全部网络请求托管给客户端
-
H5离线包:这个是手Q的H5方案之一,让客户端提前去下载离线的H5数据包,WebView只需要加载本地H5数据包即可,这么做不仅可以避免一些http的劫持,而且跳过了WebView的建立TCP连接和H5、CCS等数据下载的过程,直接开始UI渲染,大大提高了WebView的效率
用户体验方面,可以在顶部显示一个一个progress,显示网页加载进度,而不是一个白屏呈现给用户看。
设置一个全局的WebView,减少WebView初始化的时间,避免后续操作的堵塞
1、webview白屏优化
2、由于webview使用的时候存在大量的内存泄漏情况,单独开一个进程显示webview内容
chrome tabs据说要比webview好,可以在fallback时使用webview
webview加载的大致分为三个阶段:
1、webview的创建和初始化;2、网络链接、下载资源,比如js、css以及图片等;3、界面的绘制;
第一个阶段,白屏,第二个阶段loading状态,第三个阶段展示;
针对第一个阶段优化:
1、APP打开先创建一个空的webview:第一次打开webview比第二次打开webview慢,因为webview打开之后会创建一些公用的服务,第二次再次打开不用再次创建
针对第二阶段优化:
1、DNS域名优化:webview的网络请求以及资源的链接的域名,和项目api所有域名一致,节省域名解析的解析的时间;
2、js、css以及图片等资源文件要压缩之后,再使用:减少资源下载时间;
3、部分资源可以存放在本地,或者通过热更的方式进行下载;
4、部分网络请求在webview创建的时候,就可以开始调用;
- 进度条优化,加载进度未80%时,隐藏进度条
- 标题优化,避免在标题栏暴露加载地址
- 使用缓存,提高加载速度
- 使用https和httpdns,降低运营商劫持率、减少网络延迟、减少请求数据流
- 使用独立进程,独享更大的内存空间,即使加载网络出错导致应用崩溃也不会影响到主进程
- 使用全局代理免流访问
优秀文章
如何设计一个优雅健壮的Android WebView?(上)
如何设计一个优雅健壮的Android WebView?(下)