博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

html5---离线应用程序

Posted on 2013-05-18 14:50  Amy-lover  阅读(225)  评论(0编辑  收藏  举报

一、问题的引出

当用户没有与Internet连接,用户就不能利用web应用程序

二、解决方案

为了让web应用程序在离线状态也能正常工作,引入了本地缓存机制

三、原理

为了让web应用程序在离线状态也能正常工作,必须将web应用程序锁需要的资源文件放在本地缓存中,当用户离线的时候,利用本地缓存中的资源来使web应用程序正常工作

四、本地缓存与网页缓存的区别

  本地缓存 网页缓存
服务对象不同 针对整个web应用程序 针对单个网页
缓存内容不同 只缓存指定的资源 任何网页都有页面缓存
安全性 可靠的,因为可以控制缓存的内容 不可靠的,不知道到底缓存了哪些资源

五、浏览器与服务器的交互过程

  假设网址为http://amylover网站,index.html为首页

  1 浏览器请求访问http://amylover

  2 服务器返回index.html网页

  3 浏览器解析index.html网页,请求该页面中的所有资源,包括html文件,图像文件、css文件,js文件以及mnifest文件(该文件里面指定了哪些资源需要本地缓存)

  4 服务器返回3中请求的资源

  5 浏览器处理manifest文件,请求manifest文件中要求的需要本地缓存的文件资源,即使这些资源已经被请求过了

  6 浏览器返回所有5中请求的资源

  7 浏览器对本地缓存进行更新,触发本地缓存准备被更新的事件,将6中返回的资源存放于本地缓存中

  如果在上述过程进行完毕,浏览器再次打开http://amylover,而且manifest文件没有被修改,交互过程如下

  1 浏览器再次请求http://amylover

  2 浏览器发现该页面被本地缓存,于是使用本地缓存中的index.html页面

  3 浏览器解析index.html页面,使用所有本地缓存中的资源

  4 浏览器向服务器请求manifest文件

  5 服务器返回更新过manifest文件

  6 浏览器处理5中返回的manifest文件,如果发现该文件被更新,请求该文件中所有需要本地缓存的资源

  7 浏览器返回6中请求的资源

  8 浏览器利用7中返回的资源对本地缓存进行更新,并触发本地缓存准备被更新的事件

六、manifest文件:

  6.1 本地缓存是通过每个页面的manifest文件进行管理,

  6.2 manifest文件是一个简单的文本文件,以清单的形式列举了哪些资源需要缓存,哪些资源不需要缓存,以及资源的访问路径

  6.3 可以为每个页面都指定一个manifest文件,也可以为整个web应用程序指定一个总的manifest文件

  6.4 第一行必须是CACHE MANIFEST,将本文件的作用告诉浏览器

  6.5 需要对服务器进行配置,让服务器支持text/cache-manifest类型,例如appache服务器的{apache_home}/conf/mime.types文件的最后一行加上text/cache-manifest manifest

  6.6 manifest文件中注释使用#

  6.7 在列举资源时,将资源分为三类,分别是CACHE、NETWORK和FALLBACK

  6.8 CACHE是指需要本地缓存的资源、NETWORK是显式指定不需要本地缓存的资源、FALLBACK指定两个资源,第一个是指在线使用,第二个是指当用户离线时使用的备用资源

  6.9 为了让浏览器正常阅读manifest文件,需要在页面的html标签的manifest属性中指定manifest文件的url地址

<html manifest="index.manifest">

七、applicationCache对象

  7.1 该对象代表本地缓存

  7.2 交互过程中的applicationCache对象

    1 浏览器请求访问http://amylover

    2 服务器返回index.html页面

    3 浏览器发现了html的manifest属性时,触发checking事件,检查manifest文件是否存在,不存在触发error事件,表示manifest文件不存在

    4 浏览器解析index.html,并请求该页面的所有资源

    5 服务器返回4中请求的所有资源

    6 浏览器处理manifest文件,并请求该文件要求本地缓存的所有资源,即使5中已经返回这些资源

    7 服务器返回6中请求的资源

    8 浏览器触发applicationCache对象的downloading事件,开始下载7中返回的资源,在下载的过程中周期触发applicationCache对象的progress事件,获取多少文件本下载,还有多少在下载队列中

    9 下载完毕触发applicationCache对象的cached事件,表示首次缓存成功

    10 如果再次访问http://amylover,1-5一致,执行步骤5之后,浏览器检查manifest文件是否本更新,如果没有触发applicationCache对象的noupdate事件,不再执行后续操作

    如果manifest文件被更新执行后续操作,但是不再执行步骤9中的cache事件,而是触发updateready事件

  7.3 更新

    可以用applicationCache对象来通知用户本地缓存被更新,也允许用户手动进行本地缓存的更新

    7.3.1 applicationCache对象的undateready事件是指当更新过的manifest文件所需要的资源下载完毕后,本地缓存准备被更新时触发,如果本地缓存很大,那么本地缓存的更新将是一个    很漫长的过程,并且在更新过程中还会把浏览器锁住,在这种情况下,最后给用户一个提示,告诉用户正在进行本地缓存的更新

applicationCache.onUpdateReady=function(){
    alert("本地缓存正在被更新");
};

 

    7.3.2 swapCache()方法

    如果不调用该方法,本地缓存会在下一次打开本页面的时候被更新,而使用该方法,本地缓存会立即更新,但是注意虽然使用swapCache方法对本地缓存进行了更新,但是本页面的图像和脚    本文件等并没有被更新,只有在刷新页面或者重新打开时才会更新

applicationCache.onUpdateReady=function(){
    alert("本地缓存正在被更新");
   applicationCache.swapCache();
   alert("本地更新完毕,请刷新您的页面获取最新的版本"); };