HTML5离线缓存(Application Cache)

HTML5离线缓存又名Application Cache,是从浏览器的缓存中分出来的一块缓存区,要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源。

Manifest 文件

manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。

manifest 文件可分为三个部分:

CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存

NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存

FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

相关JavaScript API

核心是applicationCache对象,有个status属性,表示应用缓存的当前状态:

0(UNCACHED) :  无缓存, 即没有与页面相关的应用缓存

1(IDLE) : 闲置,即应用缓存未得到更新

2 (CHECKING) : 检查中,即正在下载描述文件并检查更新

3 (DOWNLOADING) : 下载中,即应用缓存正在下载描述文件中指定的资源

4 (UPDATEREADY) : 更新完成,所有资源都已下载完毕

5 (IDLE) :  废弃,即应用缓存的描述文件已经不存在了,因此页面无法再访问应用缓存

相关的事件

表示应用缓存状态的改变:

checking : 在浏览器为应用缓存查找更新时触发

error : 在检查更新或下载资源期间发送错误时触发

noupdate : 在检查描述文件发现文件无变化时触发

downloading : 在开始下载应用缓存资源时触发

progress:在文件下载应用缓存的过程中持续不断地下载地触发

updateready : 在页面新的应用缓存下载完毕触发

cached : 在应用缓存完整可用时触发

浏览器支持

IE10+、Firefox3+、Safari4+、Opera10.6、Chrome、iOS3.2+、Android Webkit

注意事项

1. manifest文件需要配置正确的MIME-type,即 "text/cache-manifest",必须在web服务器上进行配置。

例如Tomcat,需要修改web.xml文件,添加如下:

<mime-mapping>
     <extension>manifest</extension>
     <mime-type>text/cache-manifest</mime-type>
</mime-mapping>

2. 更新完版本后,必须刷新一次才会启动新版本(会出现重刷一次页面的情况)。

所以页面需要加上这js,监听到版本更新后,刷新页面:

applicationCache.addEventListener('updateready', function(e) {

    if (applicationCache.status == applicationCache.UPDATEREADY) {

        applicationCache.swapCache(); //使用新版本资源
        window.location.reload(); //刷新页面
    }
}, false);

3. 浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。

4. 浏览器会自动缓存引用manifest文件的HTML文件,这就导致如果改了HTML内容,也需要更新版本才能做到更新。

5. 当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源,其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问。

6. 如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用老的缓存。

离线缓存优点

1. 减少服务器负载,提高资源加载速度

2. 离线浏览,用户可在应用离线时使用

离线缓存缺点

1. 更新完版本后,必须刷新一次才会启动新版本(会出现重刷一次页面的情况)

2. 进入离线存储的页面,如果不更新版本,是会将其当成静态页面不请求。

3. 无法进行灰度发布等策略。

PS:灰度发布,一部分使用旧版,一部分人用新版。

4. 无法增量更新。

PS:少量代码修改,全量更新。

离线缓存与传统浏览器缓存区别

1. 离线缓存是针对整个应用,浏览器缓存是单个文件

2. 离线缓存断网了还是可以打开页面,浏览器缓存不行

3. 离线缓存可以主动通知浏览器更新资源

离线缓存示例

manifest

CACHE MANIFEST
#v1.0.1

CACHE:
js/app.js
css/app.css

NETWORK:
*

FALLBACK:
404.html

demo.html

<!DOCTYPE html>
<html manifest="app.manifest">
<head>
<title>Demo</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css/app.css" />
<link rel="stylesheet" type="text/css" href="css/demo.css" />
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="js/demo.js"></script>
</head>
<script>
    applicationCache.addEventListener('updateready', function(e) {
        if (applicationCache.status == applicationCache.UPDATEREADY) {

            applicationCache.swapCache(); //使用新版本资源
            window.location.reload(); //刷新页面
        }
    }, false);
</script>
<body>
俯首江左有梅郎~
</body>
</html>

app.css

body {color: blue;} 

demo.css

body {font-size: 60px;} 

app.js

alert('我是app.js'); 

demo.js

alert('我是demo.js');

示例效果

本地直接打开没有效果的,离线缓存是无效的。

部署在Web服务器,第一次访问:

第二次访问:

 

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/5021992.html

转载:http://www.cnblogs.com/lovesong/p/5021992.html

时间: 2025-01-21 06:05:12

HTML5离线缓存(Application Cache)的相关文章

HTML5中应用程序离线缓存Application Cache实例教程

什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. Application Cache带来的三个优势是: ① 离线浏览 ② 提升页面载入速度 ③ 降低服务器压力 而且主要浏览器皆以支持Application Cache,就算不支持也不会对程序造成什么影响 离线存储技术 HTML5提出了两大离线存储技术:localstorage与Application

HTML5应用程序缓存Application Cache

HTML5应用程序缓存Application Cache 什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. Application Cache带来的三个优势是: ① 离线浏览 ② 提升页面载入速度 ③ 降低服务器压力 而且主要浏览器皆以支持Application Cache,就算不支持也不会对程序造成什么影响 离线存储技术 HTML5提出了两大离线存

HTML5应用程序缓存Application Cache详解

 什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. Application Cache带来的三个优势是: ① 离线浏览 ② 提升页面载入速度 ③ 降低服务器压力 而且主要浏览器皆以支持Application Cache,就算不支持也不会对程序造成什么影响 离线存储技术 HTML5提出了两大离线存储技术:localstorage与Application

如何在ASP.NET中生成HTML5离线Web应用

传统的Web应用程序有一个很大的症结是当用户的网络连接不好时,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能.离线功能使得Web应用程序类似于本机应用程序,当断开网络连接时可以继续浏览未浏览完成的内 容,离线功能的另一个好处是可以永久缓存静态的内容,而没有缓存过期的限制,这样很大程度上加速了网页的加载速度. 离线应用的创建 不同于传统的缓存机制,HTML5定义了一套独立的缓存机制,有一个单独的文件来记录要缓存的文件列表,这就意味着用户可以自己决定哪些文件需要缓 存.

移动web app开发-----application cache 离线缓存原理篇

                  上篇文章中写了appcache的manifest文件如何书写,appcache的类型和状态,下面我们通过这篇文章来学习下appcache的下载和更新机制. 浏览器自动更新 1.假如入我们要访问一个网站的主页,它的html标签有个manifest属性. 2.页面从服务器端返回,包括动态资源和静态资源,同时静态资源会采用浏览器常规的缓存方式缓存起来. 3.当浏览器解析页面时,发现他的html标签有一个manifest属性,浏览器会在后台把manifest文件中要c

移动web app开发-----application cache 离线缓存应用篇

在移动web app应用中,请求数非常昂贵,请求数过多不但耗电,耗流量,同时速度也非常的慢,为了减少请求,加快资源的加载速度,使用application cache,是一个比较不错的方案,下面通过三篇文章来全面的介绍application cache,第一篇为应用篇,第二篇为原理篇,第三篇为高级进阶篇.本篇内容主要包括三个方面 manifest文件书写 application cache类型 application cache状态       manifest文件书写 要想使用applicati

移动web app开发-----application cache 离线缓存(进阶)

     通过上面的两篇文章,application cache的应用和原理,我们应该能够全面了解application cache了.同时我们 也能够清楚application cache在设计上有哪些不尽仁义的地方.这篇文章我们主要来了解下application cache在各个浏览器的 支持情况和存储大小,以及有哪些坑爹的地方,以及如何解决这些坑爹的地方. app cache在存储大小的限制 safari桌面版没有限制[包括mac和windows] safari移动版有10M的限制 chr

Nginx服务器在使用HTML5 Manifest离线缓存时无法及时更新的问题

问题描述 使用HTML5Manifest离线缓存机制,在服务器端都配置了mine,但是:在apache服务器上,可以正确表现离线缓存的能力:更新manifest文件后浏览器自动更新线上最新的网页和资源:同样的web网站代码,在nginx服务器上却无法更新网页资源,调试发现浏览器请求的.manifest文件也始终是旧的.猜想可能是nginx服务器配置有问题,但是不知哪个配置会造成这个问题?

HTML5离线存储 初探

本文主要内容归纳如下: 一.离线存储的作用:二.如何实现离线存储:三.applicationCache对象,及属性.事件.接口 四.访问缓存应用,相应触发事件,及其对应状态:五.如何更新离线缓存 六.demo演示:update后是否调用swapCache的区别:七.写在后面   一.离线存储的作用 1.用户可离线访问你的应用,这对于无法随时保持联网状态的移动终端用户来说尤其重要 2.用户访问本地的缓存文件,通常意味着更快的访问速度 3.仅仅加载被修改过的资源,避免同一资源对服务器多次的请求,大大