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

    通过离线存储。我们可以通过把需要离线存储在本地的文件列在一个manifest配置文件中,这样即使在离线的情况下,用户也可以正常使用这些文件。

    首先需要在页面头部加入一个manifest的属性:

    <!DOCTYPE HTML>
    <html manifest = "cache.manifest">
    ...
    </html>

    cache.manifest文件的书写方式,像下面这样:

    CACHE MANIFEST
    #v0.11
    
    CACHE:
    
    js/app.js
    css/style.css
    
    NETWORK:
    resourse/logo.png
    
    FALLBACK:
    / /offline.html

    离线存储的manifest一般由三个部分组成:

    CACHE:表示需要离线存储的资源列表,由于包含manifest文件的页面将被自动离线存储,所以不需要把页面自身也列出来。
    NETWORK:表示在它下面列出来的资源只有在在线的情况下才能访问,他们不会被离线存储,所以在离线情况下无法使用这些资源。不过,如果在CACHE和NETWORK中有一个相同的资源,那么这个资源还是会被离线存储,也就是说CACHE的优先级更高。
    FALLBACK:表示如果访问第一个资源失败,那么就使用第二个资源来替换他,比如上面这个文件表示的就是如果访问根目录下任何一个资源失败了,那么就去访问offline.html。

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

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

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

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

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

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

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

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

    对于HTML5中离线存储对象,window.applicationCache有几个事件:

    oncached:当离线资源存储完成之后触发这个事件,这个是文档的说法,我在Chrome上面测试的时候并没有触发这个事件;
    onchecking:当浏览器对离线存储资源进行更新检查的时候会触发这个事件;
    ondownloading:当浏览器开始下载离线资源的时候会触发这个事件;
    onprogress:当浏览器在下载每一个资源的时候会触发这个事件,每下载一个资源就会触发一次;
    onupdateready:当浏览器对离线资源更新完成之后会触发这个事件;
    onnoupdate:当浏览器检查更新之后发现没有资源更新的时候触发这个事件;

    原文:https://www.cnblogs.com/shoestrong/p/6435169.html

  • 相关阅读:
    系统数据查询耗时优化解决方案
    Mybatis逆向工程
    微服务架构下的分布式数据管理
    分布式或微服务架构中的分布式锁应用
    word 常用宏代码
    office2003?2007共存?版本各自打开的解决方案
    word域3
    2014新版《安全生产法》测试题
    Excel与Word套打功能使用技巧及EXCEL数据处理成绩
    word域2
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/11609391.html
Copyright © 2011-2022 走看看