1、如何提高WebView加载速度
美团技术分享
WebView启动过程大概分为以下几个阶段: App中打开WebView的第一步并不是建立连接,而是启动浏览器内核。
优化手段围绕着以下两个点进行:
-
预加载WebView。 -
加载WebView的同时,请求H5页面数据。
常见的方法是全局WebView,在客户端刚启动时,就初始化一个全局的WebView待用,并隐藏;这种方法可以比较有效的减少WebView在App中的首次打开时间。当用户访问页面时,不需要初始化WebView的时间。
当然这也带来了一些问题,包括:
- 额外的内存消耗。
- 页面间跳转需要清空上一个页面的痕迹,更容易内存泄露。
- 客户端代理页面请求WebView初始化完成后向客户端请求数据
- 在客户端初始化WebView的同时,直接由native开始网络请求数据;
- 当页面初始化完成后,向native获取其代理请求的数据。
- asset存放离线包。
除此之外还有一些其他的优化手段:
- DNS和链接慢:
- 想办法复用客户端使用的域名和链接,可以让客户端复用使用的域名与链接。
- DNS采用和客户端API相同的域名
- DNS会在系统级别进行缓存,对于WebView的地址,如果使用的域名与native的API相同,则可以直接使用缓存的DNS而不用再发起请求图片。
- 脚本执行慢:可以把框架代码拆分出来,在请求页面之前就执行好。
- 后端处理慢:可以让服务器分trunk输出,在后端计算的同时前端也加载网络静态资源。
2、WebView与 js的交互
Android去调用JS的代码:
-
通过WebView的loadUrl() -
通过WebView的evaluateJavascript()
JS调用Android代码的方法:
-
通过WebView的addJavascriptInterface()进行对象映射 -
通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url -
Android通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt(方法回调分别拦截JS对话框(即上述三个方法),得到他们的消息内容,然后解析即可。
3、WebView的漏洞
Android WebView常见的安全漏洞和解决方案
4、JsBridge原理
JSBridge的原理
|