html5离线储存,application cache,manifest使用体验

最近在APP里新增一个论坛模块,为了快速地完成,决定将整个论坛模块做成WEB APP,WEB APP最致命的就是用户体验问题,页面跳转和过多的请求,大大影响了加载速度和用户体验,这时候我想到了HTML5的离线储存。 经过简单的了解之后,觉得这个可以有,但很快我又就发现,HTML5离线储存并不适于这次的项目。 原因如下: 1、 一旦页面指定了manifest,那么这个页面就一定被储存下来。如果有一个动态页面,不想缓存页面的内容,只想缓存页面所引用的css,js,img,但抱歉,这个没有办法做到。我想是因为浏览器与服务器既定的交互逻辑导致必须要这样设计,否则我就很不理解设计者了。 2、page.html?id=1和page.html?id=2被存储成了两个html不同的页面,想想当用户浏览了1000个不同的贴子的时候,浏览器就下载储存了1000个没有意义的页面。 3、第一次访问page.html?id=1,缓存成功后。再访问 page.html?id=2,不会去读缓存,这是因为由于参数变了,被认为地址不一样,不算是第二次请求,所以请求page.html?id=2时依然会重新加载manifest指定的文件。 4、而我为了快速完成,进出层级时都做成了页面跳转,免不了传很多参数,而且每个贴子不一样的id,所以这种情况下离线缓存基本上没有意义,因为相当大部份请求都属于第一次访问。 5、再且,根据网上的资料,进行离线储存时会再次下载一次对应的数据,意思就是说,第一次访问时,使用了离线储存技术的页面加载时所消耗的时间比没有使用这个技术的页面要多,而且耗的流量更大。 因此,manifest极不适合含有动态参数页面跳转的情况下使用,最好是一个页面,然后完全的ajax请求。 另附带资料:http://www.cnblogs.com/svage/archive/2011/11/24/2261365.html html5离线应用application cache 一、应用场景 我们通常使用浏览器缓存在用户磁盘上存储web单页,在用户再次浏览的时候已节省带宽,但即便这样,依然无法在没有Internet的情况下访问 Web。为了让web应用程序在离线状态也能被访问。html5通过application cache API提供离线存储功能。前提是你需要访问的web页面至少被在线访问过一次。 离线本地存储和传统的浏览器缓存有什么不同呢? 1、浏览器缓存主要包含两类: a.缓存协商:Last-modified,Etag 浏览器向服务器询问页面是否被修改过,如果没有修改就返回304,浏览器直接浏览本地缓存文件。否则服务器返回新内容。 b.彻底缓存:cache-control,Expires 通过Expires设置缓存失效时间,在失效之前不需要再跟服务器请求交互。 2、离线存储为整个web提供服务,浏览器缓存只缓存单个页面; 3、离线存储可以指定需要缓存的文件和哪些文件只能在线浏览,浏览器缓存无法指定; 4、离线存储可以动态通知用户进行更新。 二、如何实现 离线存储是通过manifest文件来管理的,需要服务器端的支持,不同的服务器开启支持的方式也是不同的。 复制代码 CACHE MANIFEST//必须以这个开头 version 1.0 //最好定义版本,更新的时候只需修改版本号 CACHE: m.png test.js test.css NETWORK: * FALLBACK online.html offline.html 复制代码 CACHE指定需要缓存的文件;NETWORK指定只有通过联网才能浏览的文件,*代表除了在CACHE中的文件;FALLBACK每行分别指定在线和离线时使用的文件 要让manifest管理存储,还需要在html标签中定义manifest属性,如下: 复制代码 DOCTYPE HTML> <html lang="en" manifest=‘test.manifest‘> <head> <meta charset="UTF-8"> <title>title> head> <body> body> html> 复制代码 最后别忘了,这些应用需要服务器支持。 Apache服务器开启支持的方式是:在conf/mime.types中添加一段代码: test/cache-manifest manifest IIS服务器开启方式: 右键--HTTP---MIME映射下,单击文件类型---新建---扩展名输入manifest,类型中输入test/cache-manifest 三、通过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(){ //其他和离线存储有关的错误 } 复制代码 四、浏览器与服务器的交互 曾经有面试题是这样的:"描述在浏览器的地址栏中输入:http://www.baidu.com 后发生了什么?"。 1、服务端返回baidu页面资源,浏览器载入html 2、浏览器开始解析 3、发现link,发送请求载入css文件 4、浏览器渲染页面 5、发现图片,发送请求载入图片,并重新渲染 6、发送请求js文件,阻塞渲染。如果js对dom进行了操作,则会进行rerender 对于支持离线存储的页面,浏览器和服务器的交互又是如何呢? 首次载入页面: 1-6 : 同上 7:请求页面中需要缓存的页面和数据,就算在之前的步骤中已经请求过(这是个耗能的地方) 8:服务器返回所有请求文件,浏览器进行本地存储 再次载入页面: 1:发送请求 2:使用本地存储的离线文件 3:解析页面 4:请求服务端的manifest文件,判断是否有改变,返回304则表示没有改变进入步骤5,否则进入步骤6(jaykon:这里是不是错了?304时会进入6才对) 5:进入首次载入页面的7-8(jaykon:这里注意,就算此次请求manifest文件更新了,也只是在页面宣染完成后重新下载里面路径的文件,这些新文件要在下一次访问时才会体现出来,比如再次刷新时。) 6:使用本地存储,不重新请求

时间: 2024-12-16 15:59:27

html5离线储存,application cache,manifest使用体验的相关文章

转 html5离线储存,application cache,manifest使用体验

html5离线应用application cache 最近在APP里新增一个论坛模块,为了快速地完成,决定将整个论坛模块做成WEB APP,WEB APP最致命的就是用户体验问题,页面跳转和过多的请求,大大影响了加载速度和用户体验,这时候我想到了HTML5的离线储存. 经过简单的了解之后,觉得这个可以有,但很快我又就发现,HTML5离线储存并不适于这次的项目. 原因如下: 1.  一旦页面指定了manifest,那么这个页面就一定被储存下来.如果有一个动态页面,不想缓存页面的内容,只想缓存页面所

【转】html5离线储存,application cache,manifest使用体验

最近在APP里新增一个论坛模块,为了快速地完成,决定将整个论坛模块做成WEB APP,WEB APP最致命的就是用户体验问题,页面跳转和过多的请求,大大影响了加载速度和用户体验,这时候我想到了HTML5的离线储存. 经过简单的了解之后,觉得这个可以有,但很快我又就发现,HTML5离线储存并不适于这次的项目. 原因如下: 1. 一旦页面指定了manifest,那么这个页面就一定被储存下来.如果有一个动态页面,不想缓存页面的内容,只想缓存页面所引用的css,js,img,但抱歉,这个没有办法做到.我

[html5]app离线缓存(Application Cache)

故名思意,这个接口就是让网页或者文件在本地缓存下来,优点是可以提高网站的加载速度,同理如果缓存全部文件到本地则可以离线浏览网页. 我们可以把那些框架文件和哪些陈年不变的图片文件缓存到本地,提高网站二次浏览的加载速度. 1.首先创建一个名叫index.appcache(文件名可以自己定义)的文件,index.appcache文件内容: CACHE MANIFEST #version 0.1.0 CACHE: lib/framework7/css/framework7.ios.min.css lib

使用HTML5开发离线应用 - cache manifest(1)

HTML5 是目前正在讨论的新一代 HTML 标准,它代表了现在 Web 领域的最新发展方向.在 HTML5 标准中,加入了新的多样的内容描述标签,直接支持表单验证.视频音频标签.网页元素的拖拽.离线存储和工作线程等功能. 其中一个新特性就是对离线应用开发的支持. 在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能: 离线资源缓存:需要一种方式来指明应用程序离线工作时所需的资源文件.这样,浏览器才能在在线状态时,把这些文件缓存到本地. 此后,当用户离线访问应用程序时,这些

Webkit关于HTML 5的Application Cache实现之研究

因为工作关系,研究了一段时间的ApplicationCache.首先介绍一下与它相关的SQL DB Table的几个基本概念, CacheGroups : 就是一组资源,例如html, css, js, image,他们与一个cache的manifest关联,CacheGroups表包含的每个cache项有自己的ID以及相应的manifest的URL. CacheEntries, CacheResources : 这俩个表存储一些资源的元数据(metadta),例如HTTP header, mi

HTML5离线Web应用实战:五步创建成功

[IT168 技术]HTML5近十年来发展得如火如荼,在HTML 5平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化.HTML功能越来越丰富,支持图片上传拖拽.支持localstorage.支持web sql database.支持文件存储api等等.它任重而道远,致力于将Web带入一个更为成熟的应用平台.在所有炫酷特性中,最让我喜欢的是它具有离线缓存Web应用的功能. 开发离线Web 应用程序:三大核心功能 在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能:

HTML5离线缓存(Application Cache)

HTML5离线缓存又名Application Cache,是从浏览器的缓存中分出来的一块缓存区,要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源. Manifest 文件 manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容). manifest 文件可分为三个部分: CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存 NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓

使用HTML5开发离线应用 - cache manifest(4)

回页首 在线状态检测 如果 Web 应用程序仅仅是一些静态页面的组合,那么通过 cache manifest 缓存资源文件以后,就可以支持离线访问了.但是随着互联网的发展,特别是 Web2.0 概念流行以来,用户的提交的数据渐渐成为互联网的主流.那么在开发支持离线的 Web 应用时,就不能仅仅满足于静态页面的展现,还必需考虑如何让用户在离线状态下也可以操作数据.离线状态时,把数据存储在本地:在线以后,再把数据同步到服务器上.为了做到这一点,开发者首先必须知道浏览器是否在线.HTML5 提供了两种

使用HTML5开发离线应用 - cache manifest(5)

回页首 离线应用示例 最后,通过一个例子来说明使用 HTML5 开发离线应用的基本方法.这个例子会用到前面提到的离线资源缓存.在线状态检测和 DOM Storage 等功能.假设我们开发一个便签管理的 Web 应用程序,用户可以在其中添加和删除便签.它支持离线功能,允许用户在离线状态下添加.删除便签,并且当在线以后能够同步到服务器上. 应用程序页面 这个程序的界面很简单,如图 1 所示.用户点击“New Note”按钮可以在弹出框中创建新的便签,双击某便签就表示删除它. 图 1. 应用程序页面