作家
登录

WebView 缓存原理分析和应用

作者: 来源: 2017-05-17 12:05:40 阅读 我要评论

  • 要更新缓存的文件,须要更新包含它的 manifest 文件,那怕只加一个空格。常用的办法,是修改 manifest 文件注释中的版本号。如:# 2012-02-21 v1.0.0
  • 被缓存的文件,浏览器是先应用,再经由过程检查 manifest 文件是否有更新来更新缓存文件。如许缓存文件可能用的不是最新的版本。
  • 在更新缓存过程中,如不雅有一个文件更新掉败,则全部更新会掉败。
  • manifest 和引用它的HTML要在雷同 HOST。
  • manifest 文件中的文件列表,如不雅是相对路径,则是相对 manifest 文件的相对路径。
  • manifest 也有可能更新掉足,导致缓存文件更新掉败。
  • 没有缓存的资本在已经缓存的 HTML 中不克不及加载,即使有收集。例如:[url=]http://appcache-demo.s3-website-us-east-1.amazonaws.com/without-network/[/url]
  • manifest 文件本身不克不及被缓存,且 manifest 文件的更新应用的是浏览器缓存机制。所以 manifest 文件的 Cache-Control 缓存时光不克不及设置太长。

2.WebView若何设置才能支撑AppCache

WebView默认是没有开启AppCache支撑的,须要添加下面这几行代率攀来设置:

  1. WebSettings webSettings = webView.getSettings(); 
  2. webSettings.setAppCacheEnabled(true); 
  3. String cachePath = getApplicationContext().getCacheDir().getPath(); // 把内部私有缓存目次'/data/data/包名/cache/'作为WebView的AppCache的存储路径 
  4. webSettings.setAppCachePath(cachePath); 
  5. webSettings.setAppCacheMaxSize(5 * 1024 * 1024); 

留意:WebSettings的setAppCacheEnabled和setAppCachePath都必须要调用才行。

3.存储AppCache的路径

写Web页面代码时,指定manifest属性即可让页面应用App Cache。平日html页面代码会这么写:

按照Android SDK的API解释,setAppCachePath是可以用来设置AppCache路径的,然则我实际测试发明,不管你怎么设置这个路径,设置到应用本身的内部司有目次照样外部SD卡,都无法生效。AppCache缓存文件最终都邑存到/data/data/包名/app_webview/cache/Application Cache这个文件夹下面,在膳绫擎的Android 4.4和5.1体系目次截图可以看获得,然则如不雅你不调用setAppCachePath办法,WebView将不会产生这个目次。这里有点让我认为奇怪,我猜测可能大年夜某一个体系版本开端,为了缓存文件的完全性和安然性推敲,SDK实现的时刻就吧AppCache缓存目次设置到了内部私有存储。

讲完了WebView自带的缓存,下面讲一下H5琅绫擎的App Cache。这个Cache是由开辟Web页面的开辟者控制的,而不是由Native去控制的,然则Native琅绫擎的WebView也须要我们做一下设置才能支撑H5的┞封个特点。

雷同点

WebView自带的缓存和AppCache都是可以用来做文件级其余缓存的,根本上比较好地知足对于非覆盖式的js、css等文件更新。

不合点

  • WebView自带的缓存是是协定层实现的(浏览器内核标准实现,开辟者无法改变);而AppCache是应用层实现的。
  • WebView的缓存目次在不合体系上可能是不合的;而对于AppCache而言,AppCache的存储路径固然有办法设置,然则最终都存储到了一个固定的内部司有目次下。
  • WebView自带的缓存可以在缓存生效的时刻不消再发HTTP请求;而AppCache必定会发出一个manifest文件的请求。
  • WebView自带的缓存可以经由过程设置CacheMode来改变WebView的缓存机制;而AppCache的缓存策略是由manifest文件控制的,也就是说是由web页面开辟者控制的。

最后说一下,其实很多时刻,这两类缓存是合营在工作的,当manifest文件没有控制某些资本加载时,例如我膳绫擎写的xxx.appcache文件里,NETWORK section下面用的是*号,意思是所有不缓存的文件都要去收集加载。此时,这些资本就会走到WebView自带的缓存机制去,结合WebView的CacheMode,我们实际上对这些文件进行了一次WebView自带的缓存。搞清跋扈这两类缓存的道理有利于我们更好的设计本身的页面和App,尽可能削减收集请求,进步App运行效力。

五、总结

【编辑推荐】

  1. WebView想说爱你不轻易啊
  2. Android的滑动分析以及各类实现
  3. 如安在移动应用中有效地收集用户反馈
  4. 小法度榜样,巧应用:微信小法度榜样开辟拭魅战
  5. 一个简单实用的Android调试应用技能
【义务编辑:武晓燕 TEL:(010)68476606】

  推荐阅读

  谷歌嫌Android开源问题太多,打算开发第二个iOS

新体系Fuchsia界面UI据AndroidAuthority称,今朝谷歌全新的操作体系Fuchsia还处于研发阶段,Android和Chrome OS都是一种基于Linux的自由及开放源代码的操作体系,而Fuchsia体系的内核为M>>>详细阅读


本文标题:WebView 缓存原理分析和应用

地址:http://www.17bianji.com/lsqh/35265.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)