美文网首页
应用缓存

应用缓存

作者: 萘小蒽 | 来源:发表于2019-04-23 22:04 被阅读0次

h5的应用缓存简称为Appcache,是专门为开发离线应用而设计的。Appcache就是从浏览器的缓存中分出来的一块缓存区。要想在这个缓存区保持数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源。

描述文件示例:

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js

NETWORK:
login.asp

FALLBACK:
/html5/ /404.html
  • CACHE MANIFEST(必须的)后面表示缓存文件,#后面是注释。
  • NETWORK表示每次进入页面都需要加载的文件(不会被缓存)。
  • FALLBACK如果无法建立网络连接,则用 "404.html" 替代 /html5/目录中的所有文件。
  • 缓存文件路径,需要填写相对路径。

要将秒速文件与页面关联起来,可以在<html>中的manifest属性中指定这个文件的了路径,例如:

<html manifest="/offline.appcache" ></html>
  • 以上代码告诉页面,/offline.appcache中包含这描述文件。
  • 这个和文件的MIME类型必须是text/cache-manifest

更新机制

有三种方式更新manifest缓存:

  1. 用户清空浏览器缓存;
  2. manifest文件被修改,哪怕是注释(所以可以通过修改注释来更新文件
  3. 由程序来更新

相应jsAPI

应用缓存的意图是确保离线时候资源可用,但也有相应的JS Api,applicationCache对象让你知道他都在做什么。
applicationCache对象有一个status常量属性,表示应用缓存的如下状态:

  • 0 :无缓存,没有与页面相关应用缓存。
  • 1 :闲置,应用缓存未得到更新。
  • 2 :检测中,正在下载描述文件并检查更新。
  • 3 :下载中,正在下载描述中指定的资源。
  • 4 :更新完成,已更新资源,且所有资源都下载完毕,可以通过swapCache()来使用了。
  • 5 :废弃,应用缓存的描述文件已经不存在了,因此页面无法再访问应用缓存。

应用缓存还有很多相关的事件,表示其状态的改变,如下:

  • checking: 在浏览器为应用缓存查找更新时触发。
  • error : 在检查更新或下载资源期间发生错误时触发。
  • noupdate : 在检查描述文件发现文件无变化时触发。
  • downloading : 在开始下载应用缓存资源时触发。
  • progress : 在文件下载应用缓存的过程中持续不断地触发。
  • updateready : 在开始下载应用缓存下载完毕且可以通过swapCache()使用时资触发。
  • cached : 在应用缓存完整可用时触发。

update()

一般来讲,这些事件会随着页面加载按上述顺序依次触发。不过,调用update方法也可以手工干预,让应用缓存为检查更新而触发上述事件。

applicationCache.update(); 

update()一经调用,应用缓存会去检查描述文件是否更新(触发checking事件),然后就想页面刚刚加载一样,继续执行后续操作。
如果触发了cached事件,说明应用准备就绪,不会在发生其他操作了。

如果触发了updateready事件,说明新版本的缓存已经可用,而这时候你需要调用swapCache()来启用新应用缓存。

window.addEventListener('load', function(e) {
    window.applicationCache.addEventListener('updateready', function(e) {
        if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
        //UPDATEREADY=4
        // Swap it in and reload the page to get the new hotness.
            window.applicationCache.swapCache();
            if (confirm('A new version of this site is available. Load it?')) {
                window.location.reload();
            }
        } else {
            // Manifest didn't changed. Nothing new to server.
        }
    }, false);
}, false);

注意事项

  1. 站点离线存储的容量限制是5M
  2. 如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用老的缓存
  3. 引用manifest的html必须与manifest文件同源,在同一个域下
  4. 在manifest中使用的相对路径,相对参照物为manifest文件
  5. CACHE MANIFEST字符串应在第一行,且必不可少
  6. 系统会自动缓存引用清单文件的 HTML 文件
  7. manifest文件中CACHE则与NETWORK,FALLBACK的位置顺序没有关系,如果是隐式声明需要在最前面
  8. FALLBACK中的资源必须和manifest文件同源
  9. 当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源。
  10. 站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问
  11. 当manifest文件发生改变时,资源请求本身也会触发更新
applicationCache对象

相关文章

  • 应用缓存

    应用缓存 应用缓存使用应用缓存的两个步骤: 1.创建应用缓存的文件 � 2.在html中引入应用缓存...

  • HTML5应用缓存

    什么是应用缓存 优势 使用 操作 如何启用应用缓存 在 缓存文件名.appcache 文件中 特殊应用 如果缓存...

  • uni-app 获取应用缓存大小并清除缓存

    计算应用已使用的缓存数据大小 清除应用的缓存数据

  • 09.HTML5应用缓存与web workers

    1.HTML5应用缓存 web应用可以进行缓存,并可在没有因特网连接时进行访问。 1.1 应用缓存的优势: 离线浏...

  • iOS--计算缓存、清除缓存

    几乎每个应用都有清除缓存的功能,一个应用的使用难免会产生缓存,如文件缓存、图片缓存,我们大部分应用使用的SDWeb...

  • 计算并清除应用缓存

    几乎每个应用都有清除缓存的功能,一个应用的使用难免会产生缓存,如文件缓存、图片缓存,我们大部分应用使用的SDWeb...

  • 缓存 manifest

    manifest 应用缓存 .appcachecache manifest缓存;network不缓存;fallba...

  • 浏览器缓存机制2-应用缓存

    浏览器缓存机制2-应用缓存 在公司项目中,一些移动版的WEB页面恰好用到了应用缓存,故顺便写篇文章来总结下应用缓存...

  • HTML5 应用程序缓存

    HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。 应用程序缓存为...

  • 谈谈H5应用程序缓存(Application Cache)

    什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用...

网友评论

      本文标题:应用缓存

      本文链接:https://www.haomeiwen.com/subject/otjkgqtx.html