Moosphan/Android-Daily-Interview

2019-08-16:谈谈如何对WebView进行优化?

Moosphan opened this issue · 11 comments

2019-08-16:谈谈如何对WebView进行优化?

我先来,最简单的,设置先加载文字,然后在加载图片,会快一点😂,然后就是体验问题了,你可以自定义一些loading让加载的时候好看一点。

这是美图webview优化我感觉这是个方法
https://mp.weixin.qq.com/s/-WceVvEKp8bKtIJQsD3Srw

太高深的我不懂,但我晓得webview木有加载超时的回调监听,需要自己开定时器哦。

这是美图的WebView我优化感觉这的英文个方法
https://mp.weixin.qq.com/s/-WceVvEKp8bKtIJQsD3Srw

可以试下以上的方法进行优化:

  1. 单/多进程化:webView在独立的进程里面,那么WebView的进程崩溃不会影响到主进程运行;同时WebView的安 全漏洞也很难影响到主进程;如果是多进程的话,可以使用WebView的容器池,有二次秒开的作用;不过缺点就是需要你做好和WebView的跨进程通讯了

  2. 网络优化:我们可以让WebView的host和客户端的host保持一致,那么就达到复用DNS缓存的效果;如果客户端有针对网络请求进行了优化,那么可以让WebView的全部网络请求托管给客户端

  3. 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?(下)