王立平--WebView的缓存机制

WebView的缓存可以分为页面缓存和数据缓存。

1.   页面缓存是指加载一个网页时的html、JS、CSS等页面或者资源数据。这些缓存资源是由于浏览器的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。

他们的索引存放在/data/data/package_name/databases下。他们的文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。文件夹的名字在2.x和4.x上有所不同,但都文件夹名字中都包含webviewcache。

2. 
数据缓存分为两种:AppCache和DOM Storage(Web Storage)。他们是因为页面开发者的直接行为而产生。所有的缓存数据都由开发者直接完全地掌控。

AppCache使我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。尤其在涉及到应用于网站的多个页面上的CSS和JavaScript文件的时候非常有用。其大小目前通常是5M。

在Android上需要手动开启(setAppCacheEnabled),并设置路径(setAppCachePath)和容量(setAppCacheMaxSize)

Android中Webkit使用一个db文件来保存AppCache数据(my_path/ApplicationCache.db)

如果需要存储一些简单的用key/value对即可解决的数据,DOM Storage是非常完美的方案。根据作用范围的不同,有Session Storage和Local Storage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动删除,否则数据永远不会过期)。

在Android中可以手动开启DOM Storage(setDomStorageEnabled),设置存储路径(setDatabasePath)

Android中Webkit会为DOM Storage产生两个文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)

在Android中清除缓存时,如果需要清除Local Storage的话,仅仅删除Local Storage的本地存储文件是不够的,内存里面有缓存数据。如果再次进入页面,Local Storage中的缓存数据同样存在。需要杀死程序运行的当前进程再重新启动才可以。

  1. WebSettings  webseting  =  m_webview .getSettings();
  2. webseting.setDomStorageEnabled(true);
  3. webseting.setAppCacheMaxSize(1024*1024*8);//设置缓冲大小,我设的是8M
  4. String  appCacheDir  =  this.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
  5. webseting.setAppCachePath(appCacheDir);
  6. webseting.setAllowFileAccess(true);
  7. webseting.setAppCacheEnabled(true);
  8. webseting.setCacheMode(WebSettings.LOAD_DEFAULT);

webview可以设置一个WebChromeClient对象,在其onReachedMaxAppCacheSize函数对扩充缓冲做出响应。

时间: 2024-10-18 13:21:22

王立平--WebView的缓存机制的相关文章

手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.

【Android Studio】深入探究webView的缓存机制

最近一直都在搞webview,搞过Android的人可能会知道,webView本身自带了缓存机制,company的需求是不用webView 的缓存机制,写自己的缓存机制,哇哈哈,有挑战性咯.写这篇博客主要是记录一下我的学习过程.写的不好,勿喷. 首先我们要搞明白webView的缓存机制是什么? webView中有两种缓存: 一是网页数据缓存(即浏览网页中的资源),而是H5缓存(即appCache). webView的缓存目录: /data/data/package_name/cache/ web

H5 缓存机制解析

线上项目需要更新一个有问题的资源(可能是图片,js,css,json数据等),这个资源已经发布了很长一段时间,为什么页面在浏览器里打开还是没有看到更新? 有些web开发经验的同学应该马上会想到,可能是资源发布出了岔子导致没有实际发布成功,更大的可能是老的资源被缓存了.说到web缓存,首先我们要弄清它是什么.Web缓存可以理解为Web资源在Web服务器和客户端(浏览器)的副本,其作用体现在减少网络带宽消耗.降低服务器压力和减少网络延迟,加快页面打开速度等方面(笔者在香港求学期间看到港台地区将cac

H5缓存机制学习记录

参考文章:http://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=404724239&idx=1&sn=e0a2887f9ff6293f0f550fa4e44057a0&scene=1&srcid=0331jLkF55dKeJO00POMiXLZ 1.浏览器缓存机制 2.Dom Storage(local storage 和 session storage) 3.Web SQL Database,不推荐使用. 根据官

设计一个移动应用的本地缓存机制

在手机应用程序开发中,为了降低与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存.这篇文章将设计一个本地缓存的机制. 功能需求 这个缓存机制满足以下这些功能. 1.能够将数据缓存到本地磁盘. 2.能够推断一个资源是否已经被缓存.假设已经被缓存.在请求同样的资源.先到本地磁盘搜索. 3.能够推断文件缓存什么时候过期.这里为了简单起见这里,我们在请求url资源的时候.给每次请求的文件设定一个过期的时间. 4.能够实现:假设文件已经被

H5缓存机制浅析-移动端Web加载性能优化【干货】

转载:H5缓存机制浅析-移动端Web加载性能优化[干货] 作者:贺辉超,腾讯游戏平台与社区产品部 高级工程师 目录 1 H5缓存机制介绍 2 H5缓存机制原理分析 2.1 浏览器缓存机制 2.2 Dom Storgage(Web Storage)存储机制 2.3 Web SQL Database存储机制 2.4 Application Cache(AppCache)机制 2.5 Indexed Database (IndexedDB) 2.6 File System API 3 移动端Web加载

本地缓存机制之二

4.下面我们设计缓存项下载成功和失败的两个委托方法: @protocol CacheItemDelegate <NSObject> //下载成功执行该方法 - (void) cacheItemDelegateSucceeded :(CacheItem *)paramSender withRemoteURL:(NSURL *)paramRemoteURL withAboutToBeReleasedData:(NSData *)paramAboutToBeReleasedData; //下载失败执

H5 缓存机制浅析 移动端 Web 加载性能优化

1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5 引入的离线存储,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. H5 应用程序缓存为应用带来三个优势: 离线浏览 用户可在应用离线时使用它们 速度 已缓存资源加载得更快 减少服务器负载 浏览器将只从服务器下载更新过或更改过的资源. 根据标准,到目前为止,H5 一共有6种缓存机制,有些是之前已有,有些是 H5 才新加入的. 浏览

SDWebImage的缓存机制

SDWebImage缓存机制 存 取 删 路径 1.1 存 是在storeImage这个方法里: 将图片储存到内存和硬盘上 -(void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk { if (!image || !key) { return; } // if m