zoukankan      html  css  js  c++  java
  • 离线缓存manifest

    1、在html文件中的html标签中加入如下属性:

    <!doctype html>
    <html manifest="demo.manifest">
        <head></head>
        <body></body>
    </html>
    

    2、demo.manifest文件包含内容如下:

    CACHE MANIFEST
    #v1.0.0
    
    #需要缓存的文件
    CACHE:
    a.js
    b.css
    
    #不需要缓存的文件
    NETWORK:
    *
    
    #无法访问页面
    FALLBACK:
    404.html
    

    3、manifest文件的mime-type必须是 text/cache-manifest类型

       注意:

         1.对于每个index.html?id=1或index.html?id=2都会分别缓存index.html页面,可以通过chrome浏览器Resources/Application Cache观察

         2.如果想更新缓存内容,只要修改下manifest文件即可,如改版本号v1.0.1

    4、离线存储如果资源有更新,可以通过如下代码来监听,但第一次加载还会是原来的版本:

    window.applicationCache.addEventListener('updateready',function(e){
        if(window.applicationCache.status == window.applicationCache.UPDATEREADY){
            window.applicationCache.swapCache();
            
            if(confirm("loding new?")){
                window.location.reload()
            }
        }
    },false)   
    

      

    浏览器怎么解析manifest

    那么浏览器是怎么对离线的资源进行管理和加载的呢?这里需要分两种情况来讨论。

    • 在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根 据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然 后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的 资源并进行离线存储。

    • 离线的情况下,浏览器就直接使用离线存储的资源。

    这个过程中有几个问题需要注意。

    • 如果服务器对离线的资源进行了更新,那么必须更新manifest文件之后这些资源才能被浏览器重新下载,如果只是更新了资源而没有更新manifest文件的话,浏览器并不会重新下载资源,也就是说还是使用原来离线存储的资源。

    • 对于manifest文件进行缓存的时候需要十分小心,因为可能出现一种情况就是你对manifest文件进行了更新,但是http的缓存 规则告诉浏览器本地缓存的manifest文件还没过期,这个情况下浏览器还是使用原来的manifest文件,所以对于manifest文件最好不要设 置缓存。

    • 浏览器在下载manifest文件中的资源的时候,它会一次性下载所有资源,如果某个资源由于某种原因下载失败,那么这次的所有更新就算是失败的,浏览器还是会使用原来的资源。

    • 在更新了资源之后,新的资源需要到下次再打开app才会生效,如果需要资源马上就能生效,那么可以使用window.applicationCache.swapCache()方法来使之生效,出现这种现象的原因是浏览器会先使用离线资源加载页面,然后再去检查manifest是否有更新,所以需要到下次打开页面才能生效。

    author:Lik
    Endeavoring to powerless, struggling to move yourself.
  • 相关阅读:
    WCF 无法生成 client
    Powershell profile.ps1 cannot be loaded because its operation is blocked by software restriction policies
    信步拾遗之Windwos Live Writer插件
    Maven setting.xml文件详解(转)
    Maven pom.xml详解(转)
    信步漫谈之Maven—基础介绍
    信步漫谈之Nginx—负载均衡
    信步漫谈之Hibernate—基础介绍
    信步漫谈之Dom4j—基础介绍
    信步拾遗之CHM开源文档制作
  • 原文地址:https://www.cnblogs.com/likwin/p/7135215.html
Copyright © 2011-2022 走看看