美文网首页
Html5应用程序缓存

Html5应用程序缓存

作者: 就当我扯淡 | 来源:发表于2016-01-07 21:23 被阅读1073次

    起源

    html5之前的网页,都是无连接,必须联网才能访问,这其实也是web的特色,这其实对于PC是时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得降低,比如坐在火车上,过了一个隧道(15分钟),便无法访问网站,这对于web的伤害是很大的,比如对于 《ecmascript合集》这样的为阅读而生的页面。
    html5便引入了cache manifest 文件。那么什么是cache manifest呢,接下来会讲到。

    什么是应用程序缓存(Application Cache)?

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

    • 离线浏览 - 用户可在应用离线时使用它们
    • 速度 - 已缓存资源加载得更快
    • 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。

    支持版本

    主流浏览器皆支持,IE8 IE9除外。


    Html5缓存支持版本

    注意事项

    • MineType 文件需要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置
    • 单个文件大小,Application Cache的尺寸限制统一在5M,单个文件不要超出这个上限。
    • 浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。
    • 如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程都将失败,浏览器继续全部使用老的缓存。
    • 引用manifest的html必须与manifest文件同源,在同一个域下。
      FALLBACK中的资源必须和manifest文件同源。
    • 当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源。
    • 站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问。
    • 当manifest文件发生改变时,资源请求本身也会触发更新。

    Manifest 文件

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

    manifest 文件可分为三个部分:

    • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
    • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
    • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

    CACHE MANIFEST

    第一行,CACHE MANIFEST,是必需的:
    CACHE MANIFEST
    /theme.css/logo.gif/main.js
    上面的 manifest 文件列出了三个资源:一个 CSS 文件,一个 GIF 图像,以及一个 JavaScript 文件。当 manifest 文件加载后,浏览器会从网站的根目录下载这三个文件。然后,无论用户何时与因特网断开连接,这些资源依然是可用的。

    NETWORK

    下面的 NETWORK 小节规定文件 "login.asp" 永远不会被缓存,且离线时是不可用的:
    NETWORK:
    login.asp
    可以使用星号来指示所有其他资源/文件都需要因特网连接:
    NETWORK:*

    FALLBACK

    下面的 FALLBACK 小节规定如果无法建立因特网连接,则用 "offline.html" 替代 /html5/ 目录中的所有文件:
    FALLBACK:
    /html5/ /404.html
    注释:第一个 URI 是资源,第二个是替补。

    格式

    重要的提示:以 "#" 开头的是注释行,但也可满足其他用途。应用的缓存会在其 manifest 文件更改时被更新。如果您编辑了一幅图片,或者修改了一个 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。
    完整的 Manifest 文件
    <pre><code>
    CACHE MANIFEST
    # 2012-02-21 v1.0.0

    /theme.css

    /logo.gif

    /main.js

    NETWORK:

    login.asp

    FALLBACK:

    /html5/ /404.html

    </code></pre>

    更新

    一旦应用被缓存,它就会保持缓存直到发生下列情况:
    用户清空浏览器缓存
    manifest 文件被修改(参阅下面的提示)
    由程序来更新应用缓存

    更新机制的问题

    更新机制来说,首次更新manifest时,因为页面加载已经开始甚至已经完成,缓存更新尚未完成,浏览器仍然会使用过期的资源;浏览器是当Application Cache有更新时,该次不会使用新资源,第二次才会使用。这个时候update事件中执行window.reload事件。

    <pre>
    window.applicationCache.addEventListener("updateready", function(){
    window.location.reload();
    });
    </pre>

    由上例可以知道,缓存的不只是显示定义的文件,比如上例中的applicationcache/时便会默认保存index.html为映射的数据,并且包含demo.appcache文件,很多时候会遇到一次文件更新线上老是不更新,这个时候随便在manifest配置文件中做一点修改即可更新。

    手动更新缓存

    window.applicationCache.update();

    强制更新

    window.applicationCache.swapCache()

    VM8486:2 Uncaught DOMException: Failed to execute 'swapCache' on 'ApplicationCache': there is no newer application cache to swap to.(…)

    需要有可以更新到的版本

    更新缓存流程和事件

    更新缓存流程和事件

    参考资料

    相关文章

      网友评论

          本文标题:Html5应用程序缓存

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