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

    web 离线程序,也是离线缓存,重点就是缓存文件,在用户离线的时候不至于只看到一个白屏。开始!

    先让服务器支持缓存,这里只说Apache网络服务器mac版的配置。

    在 应用程序/xampp/xamppfiles/etc下的mime.types添加这一行(应该是最后一行):

    test/cache-manifest manifest

    别忘了重启Apache。

    先看这个HTML文件

    <!DOCTYPE html>
    <html manifest="./main.manifest">
    <head>
        <mata charset="utf-8">
        <title>form test</title>
    </head>
    <body>
    <p>V1.0</p>
    </body>
    </html>

    注意到 manifest="./main.manifest" 这段代码了吧,浏览器会根据main.manifest这个文件的内容去缓存文件,

    现在看看 main.manifest文件

    CACHE MANIFEST #开头必须写这一行,告诉浏览器这是缓存文件设置
    # 下面这一行虽然是注释,但是决定了浏览器是否更新缓存
    # version 1.0
    
    CACHE:
    # 这后面是要缓存的文件
    demo1.html
    hello.js
    
    NETWORK:
    # 这后面是不要缓存的文件
    notOffline.php
    *
    # * 的含义是除了要缓存的全部不缓存
    
    FALLBACK:
    # 在线使用第一个文件,不在线使用第二个文件
    online.js offline.js

    注意,首页也就是上面写的那个html文件会被默认缓存。

    如果不写CACHE、NETWORK或者FALLBACK,默认为CACHE,而且这三个顺序不一,也可以在后面追加,因为识别范围是从这个关键字到下个关键字之间。

    这时候访问浏览器,页面完美展现。然后去修改掉那个html文件

    <!DOCTYPE html>
    <html manifest="./main.manifest">
    <head>
        <mata charset="utf-8">
        <title>form test</title>
    </head>
    <body>
    <p>V1.0</p>
    <p>这里被修改了!</p>
    </body>
    </html>

    刷新页面,发现并没有变化,因为浏览器还在使用缓存文件,那怎么刷新呢,只需要修改main.manifest文件中的 version 1.0  -> version 1.1,这个版本号随意修改,要让浏览器知道版本号变化了,然后刷新页面,还没变化,在刷新,好了,变了!

    分析下过程。

    一、第一次访问。

    1、浏览器请求demo.com。

    2、服务器返回index.html。

    3、浏览器请求页面上的其他资源,包括main.manifest文件。

    4、服务器返回请求的资源。

    5、浏览器根据main.manifest文件请求要缓存的文件。

    6、服务器返回资源。

    7、浏览器更新本地缓存,触发一个事件,通知本地缓存被更新。

    二、缓存未更新的访问过程

    1、浏览器请求demo.com。

    2、浏览器发现index.html被缓存,使用缓存的index.html。

    3、浏览器使用其他index.html要使用且已经被缓存的文件。

    4、浏览器请求main.manifest文件。

    5、服务器返回304,告知浏览器manifest没有发生变化。

    三、缓存被更新的访问过程

    1、浏览器请求demo.com。

    2、浏览器发现index.html被缓存,使用缓存的index.html。

    3、浏览器使用其他index.html要使用且已经被缓存的文件。

    4、浏览器请求main.manifest文件。

    5、服务器返回更新过的main.manifest文件。

    6、浏览器处理main.manifest文件,发现已被更新,请求要缓存的文件,包括index.html。

    7、服务器返回文件。

    8、浏览器更新本地缓存,触发一个事件,告知本地缓存被更新。

    (这里注意,缓存被更新,但是已经展现出来的页面并不会使用新资源,必须刷新页面后才可以,这就是为什么上面出现第一次刷新后页面不更新的情况)

    触发的那个事件是这个事件:

    applicationCache.addEventListener('updateready', function(){
        alert("OK");
    }, true);
  • 相关阅读:
    飞思卡尔单片机CAN模块的物理特性的示波器观察
    飞思卡尔CAN模块关于ID和mask的使用
    基本数据库语句
    深入分析Spring 与 Spring MVC容器
    Linux常用命令大全
    datagrid行内编辑时为datetimebox
    SVN上拖下来的项目,缺少build path怎么办?
    sql中的in与not in,exists与not exists的区别
    Spring中@Component的作用
    浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
  • 原文地址:https://www.cnblogs.com/kiscall/p/5010802.html
Copyright © 2011-2022 走看看