文档章节

如何让Android WebView访问更快

yale8848
 yale8848
发布于 2017/09/27 16:31
字数 863
阅读 1.3W
收藏 4

「深度学习福利」大神带你进阶工程师,立即查看>>>

为了让WebView访问快,一般都是用缓存技术,关于缓存这里有一篇文章讲的很详细 Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案,请务必看看

其实http协议有自身的缓存机制,android这边通过简单配置就可以实现,缓存一般说的都是对web静态资源缓存,如html,js,css,png,jpg,gif等;

缓存配置主要是web前端和后台设置,

缓存配置主要是web前端和后台设置,

缓存配置主要是web前端和后台设置,

重要的话需要说3遍,如果前端和后台没有配置缓存的话,一般http服务器有默认的配置,如Etag,Last-Modified字段,但是默认没有配置Cache-Control,或者Expires字段,那还是要和服务器通信的

Android WebView自身缓存

Android WebView自身缓存,也就是http协议缓存,这里有个很大缺陷是缓存空间大小不能修改,缓存大小默认是剩余空间的1/8,个人觉得不够灵活,所以这块需要改进

Android WebView缓存改进

通过拦截所有静态资源请求,然后对其改进,通过覆盖WebViewClient下面的方法:

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url){
    
        return null;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)//21后调用
@Override
 public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request){
        return null;
}

然后拦截所有的静态资源,把静态资源放到本地磁盘,这样就可以自己控制缓存了,对于缓存分为两种模式

  • 普通模式

    普通模式就是http协议的缓存默认,通过header里的缓存字段,先判断本地有没有,是否过期,没有过期从本地拿,过期了然后去服务器比较,比较完从服务器或着本地拿数据。如果web前端和后台没有设置缓存字段,还会有请求发生;

  • 强制模式

    强制模式是忽略缓存字段,强制缓存静态资源,如js,css等。如果静态资源要更新,那就让其修改静态资源链接,如加md5值,加版本等,一般打包工具都有这个功能。这块对于html文件需要走普通模式,因为有些html文件名称不会改变,如index.html

基本流程图

输入图片说明

代码实现

我把这种实现封装成库,CacheWebView ,方便使用,欢迎大家拍砖;

两个步骤就可以使用:

  • 引入库
compile 'ren.yale.android:cachewebviewlib:2.0.5'
  • 将 WebView 改为ren.yale.android.cachewebviewlib.CacheWebView

完毕,其他都不用修改。CacheWebView默认会有内部cache 100M的空间,同时缓存模式是http默认的模式

其他,为了让访问加速也可以通过其它方式

  • 第三方浏览器内核,如腾讯X5 腾讯浏览服务

    优点:内核级加速,比系统自带的浏览器内核快

    缺点:完全依赖第三方浏览器,灵活性差些

  • VasSonic

    优点:并发,缓存和局部更新,速度很快

    缺点:配置比较复杂,需要服务器大量修改

yale8848
粉丝 14
博文 106
码字总数 24916
作品 0
西安
程序员
私信 提问
加载中
此博客有 2 条评论,请先登录后再查看。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
670
1
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.4K
16
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
6.9K
8
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

如何在Git历史记录中grep(搜索)已提交的代码 - How to grep (search) committed code in the Git history

问题: I have deleted a file or some code in a file sometime in the past. 我过去某个时候已经删除了文件或文件中的某些代码。 Can I grep in the content (not in the commit messages)......

技术盛宴
35分钟前
9
0
二进制安装安装mysql 8.0.20

MySQL最新版本8.0.20正式发布。与之前8.0的系列版本一样,这次的发行版除了包含缺陷修复,也同样包括新功能。下面快速浏览一下。关键字:hash join、InnoDB双写缓冲、二进制日志事务压缩。 ...

程序员面试吧
39分钟前
18
0
关于python3.8+ pyside2 pyinstaller打包的一些坑

环境: python 3.8 pyinstaller 3.6 pyside2 5.14 打包过程中出现错误(1):   7607 WARNING: lib not found: pywintypes38.dll dependency of c:\users\have_\appdata\local\programs\pyth......

齐勇cn
40分钟前
11
0
备战秋招!静电的UI设计教室全能课程开始招生~系统进阶!提升核心竞争力

。 本文分享自微信公众号 - 静Design(JingDesign91)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

静电1983
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部