H5离线缓存技术Application Cache

1、离线缓存技术:是浏览器本身的一种机制

HTML5引入Application Cache(应用程序缓存)技术,离线存储可以将站点的一些文件存储在本地,在没有网络的情况下可以访问到已缓存的对应的站点页面,这些文件包括html、js、css、img等文件;其实在有网络的时候,浏览器也会优先使用已离线存储的文件。而且做好相应资源的缓存可以带来更好的用户体验,当用户使用自己的流量上网时,本地缓存不仅可以提高用户访问速度,而且大大节约用户的使用流量。


2、离线本地存储和传统的浏览器缓存的区别

  浏览器缓存主要包含两类:

  • Last-modified,Etag

浏览器向服务器询问页面是否被修改过,如果没有修改就返回304,浏览器直接浏览本地缓存文件,否则服务器返回新内容

  

  • 彻底缓存:cache-control,Expires

通过Expires设置缓存失效时间,失效之前不再跟服务器请求交互

  • 离线存储为整个web提供服务,浏览器缓存只缓存单个页面
  • 离线存储可以指定需要缓存的文件和哪些文件只能在线浏览,浏览器缓存无法指定
  • 离线存储可以动态通知用户进行更新

3、Application Cache带来的三大优势:

  a、离线浏览

  b、提升页面载入速度

  c、降低服务器的压力


4、Application Cache包括:

  a、Manifest文件:是一个简单的文本文件,扩展名任意,定义需要缓存的文件和资源,当第一次打开时,浏览器会自动缓存相应的资源

  b、Application Cache文件

  c、特点:Manifest文件必须有变化才更新,一次必须更新manifest文件中的所有文件下次才能生效

  d、Manifest的特点:

     1>离线浏览:当网络断开时,可以继续访问你的页面

     2>访问速度快:将文件缓存到本地,不需要每次都从网络上请求

       3>稳定性:做了Manifest缓存,遇到突发网络故障或者服务器故障继续访问本地缓存


5、如何实现:

  a、离线存储是通过manifest文件来管理的,需要服务器端的支持,不同的服务器开启支持的方式也是不同的

CACHE MANIFEST//必须以这个开头,在第一行
version 1.0 //最好定义版本,更新的时候只需修改版本号
CACHE:
m.png
test.js
test.css
NETWORK:
*
FALLBACK
online.html offline.html

  b、CACHE指定需要缓存的文件 NETWORK指定只有通过联网才能浏览的文件,*代表除了在CACHE中的文件 FALLBACK每行分别指定在线和离线时使用的文件(可选)

  c、最后别忘了,这些应用需要服务器支持

Apache服务器开启支持的方式是:在conf/mime.types中添加一段代码:

test/cache-manifest manifest

  d、IIS服务器开启方式:

右键--HTTP---MIME映射下,单击文件类型---新建---扩展名输入manifest,类型中输入test/cache-manifest

  e、下面的例子中,如果无法建立因特网连接,则用 “404.html” 替代 /html5/ 目录中的所有文件。

  FALLBACK:
  /html5/ /404.html

  下面的例子中,当任何页面无法访问时跳转到 “404.html”页。

  FALLBACK:
  *.html /404.html

  f、添加 manifest  属性的页面会自动被浏览器缓存,不需要再CACHE节点中再次添加。

  


6、浏览器与服务器的交互

一般对于地址栏输入一个网址后发生:

  1)、服务端返回baidu页面资源,浏览器载入html

  2)、浏览器开始解析

  3)、发现link,发送请求载入css文件

  4)、浏览器渲染页面

  5)、发现图片,发送请求载入图片,并重新渲染

  6)、发送请求js文件,阻塞渲染。如果js对dom进行了操作,则会进行rerender

对于支持离线存储的页面,浏览器和服务器的交互又是如何呢?

首次载入页面:

  1)-6) : 同上

  7):请求页面中需要缓存的页面和数据,就算在之前的步骤中已经请求过(这是个耗能的地方)

  8):服务器返回所有请求文件,浏览器进行本地存储

再次载入页面:

  1):发送请求

  2):使用本地存储的离线文件

  3):解析页面

  4):请求服务端的manifest文件,判断是否有改变,返回304则表示没有改变进入步骤6,否则进入步骤5

  5):进入首次载入页面的7-8

  6):使用本地存储,不重新请求


7、如何更新缓存

如下三种方式,可以更新缓存:

  • 更新manifest文件
  • 通过javascript操作
  • 清除浏览器缓存

如何通过js动态控制更新?

applicationCache对象提供个了一些方法和事件,管理离线存储的交互过程 通过在firefox8.0的控制台中输入window.applicationCache可以看到这个对象的所有属性和事件方法

applicationCache.onchecking = function(){
//检查manifest文件是否存在
} applicationCache.ondownloading = function(){
//检查到有manifest或者manifest文件
//已更新就执行下载操作
//即使需要缓存的文件在请求时服务器已经返回过了
} applicationCache.onnoupdate = function(){
//返回304表示没有更新,通知浏览器直接使用本地文件
} applicationCache.onprogress = function(){
//下载的时候周期性的触发,可以通过它
//获取已经下载的文件个数
} applicationCache.oncached = function(){
//下载结束后触发,表示缓存成功
} application.onupdateready = function(){
//第二次载入,如果manifest被更新
//在下载结束时候触发
//不触发onchched
alert("本地缓存正在更新中。。。");
if(confirm("是否重新载入已更新文件")){
applicationCache.swapCache();
location.reload();
}
} applicationCache.onobsolete = function(){
//未找到文件,返回404或者401时候触发
} applicationCache.onerror = function(){
//其他和离线存储有关的错误
}

H5离线缓存技术Application Cache的更多相关文章

  1. HTML5离线缓存(Application Cache)

    HTML5离线缓存又名Application Cache,是从浏览器的缓存中分出来的一块缓存区,要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源. ...

  2. H5离线缓存技术

      HTML5提供了很多新的功能以及相应的接口,离线存储就是其中的一个,离线存储可以将站点的一些文件存储在本地,在没有网络的时候还是可以访问到以缓存的对应的站点页面,其中这些文件可以包括html,js ...

  3. h5离线缓存

    离线缓存:application cache 什么是离线缓存: 离线缓存可以将站点的一些文件缓存到本地,它是浏览器自己的一种机制,将需要的文件缓存下来,以便后期即使没链接网络,被缓存的页面也可以展示 ...

  4. HTML5-应用程序缓存(Application Cache)

    一.什么是应用程序缓存? HTML5 引入了应用程序缓存(Application Cache),这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 二.优势 离线浏览 - 用户可在应用 ...

  5. HTML 5 应用程序缓存(Application Cache)cache manifest 文件使用 html5 中创建manifest缓存以及更新方法 一个manifest文件会创建一份缓存,不同的manifest文件其缓存的内容是互不干扰的

    HTML5 离线缓存-manifest简介 HTML 5 应用程序缓存 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. 什么是应用程序缓存(A ...

  6. h5 离线缓存小demo

    传统的web应用是在线应用,这其实也是web的特色,对于PC时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得更低.比如:在火车上,穿山越岭进隧道,便无法访问w ...

  7. H5 离线缓存的用法

    H5离线缓存基础系列   1.什么是离线缓存 离线缓存:离线缓存可以将站点的一些文件缓存到本地,它是浏览器自己的一种机制,将需要的文件缓存下来,以便后期即使没有连接网络,被缓存的页面也可以展示. 2. ...

  8. HTML5 manifest离线缓存技术

    干什么用的? 离线缓存为的是第一次请求后,根据manifest文件进行本地缓存,并且在下一次请求后进行展示(若有缓存的话,无需再次进行请求而是直接调用缓存),最根本的感觉是它使得WEB从online可 ...

  9. HTML5新特性之离线缓存技术

    一.离线缓存的起因. HTML5之前的网页,都是无连接,必须联网才能访问,这其实也是web的特色,这其实对于PC是时代问题并不大,但到了移动互联网时代, 设备终端位置不再固定,依赖无线信号,网络的可靠 ...

随机推荐

  1. Qt532.线程(_beginthread)

    1.(20180928)环境:Win7x64.Qt5.3.2 MSVC2010 OpenGL.ms2010 2.测试代码: ZC:我记得 之前在 VC6.vs08 上,还要选择 使用的是哪种 运行时线 ...

  2. Qt532.【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt

    ZC:具体应该设置 什么参数,可以参看 自己转载的文章:"VC.[转]采用_beginthread__beginthreadex函数创建多线程 - CppSkill - 博客园.html&q ...

  3. 构造函数中用:base

    如果person中有自己写的构造函数 则Student类的构造方法必须要加:base继承这个构造方法!因为默认的Student:base(空)构造方法已经被干掉了 构造方法的调用//base里的参数, ...

  4. react点滴

    1.<SubSubComp {...this.props } /> 传递属性,{...props}的方式为组件传递了这两个属性,这就是JSX中的延展属性,"..."成为 ...

  5. 免费的剪贴板工具Ditto安装与使用

    下载地址:https://sourceforge.net/projects/ditto-cp 直接安装,选择好安装的位置,一直选择默认的选项就行

  6. (转)c#反射

    1. 什么是反射2. 命名空间与装配件的关系3. 运行期得到类型信息有什么用4. 如何使用反射获取类型5. 如何根据类型来动态创建对象6. 如何获取方法以及动态调用方法7. 动态创建委托 1.什么是反 ...

  7. (转)C# 构造函数与析构函数

    (1)构造函数<1>除非是static,否则编译器将会给每一个没有构造函数的类指定一个默认的构造函数<2>构造函数private时候,类不能被实例化<3>派生类可以 ...

  8. Learning by doing——百日“扇贝打卡” 历程&展望

    Java结课了.如果说这学期学习这门课后最明显的成果,那就是写了那么多的博客吧.而如果说本学期最有里程碑的事,那就是背了100多天单词,其中还获得了徽章! 这次想说说从中学以来一直喜欢的一门课--英语 ...

  9. 20165303 2017-2018-2 《Java程序设计》结对编程练习_四则运算

    需求分析 能生成简单四则运算题目并判断用户回答对错. 能正确统计回答正确的概率. 能正确处理混合四则运算的优先级的问题. 能正确输出负数等结果. 能处理简单的加,减,乘,除运算. 能正确的处理有括号的 ...

  10. WAV和PCM文件转换的程序

    using System;using System.IO;using System.Text;using System.Windows.Forms;using System.Runtime.Inter ...