html5的离线web应用的浏览器和服务器交互的过程要是没有缓存就需要每次交互都要实时接口调用,增加网络开销。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、雅安服务器托管、营销软件、网站建设、集安网站维护、网站推广。
一、离线存储的作用
1、用户可离线访问应用,这对于无法随时保持联网状态的移动终端用户来说尤其重要
2、用户访问本地的缓存文件,通常意味着更快的访问速度
3、仅仅加载被修改过的资源,避免同一资源对服务器多次的请求,大大降低了对服务器的访问压力
二、实现离线存储
1、在html标签里通过manifest属性引用一个cache.manifest文件,该文件里声明了浏览器需缓存的所有资源文件,如下所示:
!DOCTYPE html
html lang='cn' manifest='cache.manifest'
head
meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
title离线缓存示例页面/title
!-- CSS文件引用 --
/head
body
!-- 各种标签 --
/body
!-- 各种脚本文件 --
/html
2、关于cache.manifest的定义
CACHE MANIFEST
# 注释:需要缓存的文件,无论在线与否,均从缓存里读取
chched.js
cached.css
# 注释:不缓存的文件,无论缓存中存在与否,均从新获取
NETWORK:
uncached.js
uncached.css
# 注释:获取不到资源时的备选路径,如index.html访问失败,则返回404页面
FALLBACK:
index.html 404.html
本地存储-谈到存储,一般说的是数据data,不管这个应用是在线还是离线。
离线应用-这个对应的是在线,也就是,没有网的情况下,也可以使用。
后者需要把代码、程序以及资源都放到本地,如果想要使用数据,则利用本地存储。
原理:HTML5的离线存储是基于一个新建的.appcache文件的,通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。
方法:
1.在index.html里加上html manifest="test.manifest"
2.manifest清单格式如下:
CACHE MANIFEST
#上面一句必须
#v1.0.0
#需要缓存的文件
CACHE:
a.js
b.css
#不需要缓存的文件
NETWORK:
*
#无法访问页面
FALLBACK:
404.html
3.manifest文件的mime-type必须是 text/cache-manifest类型。
这个不算是 新增吧。
随着现代浏览器的推动,Flash放弃对移动端的支持,HTML5无疑成为当前Web前端炙手可热的话题。各大游戏开发商、App开发商纷纷投入人力进行研究和技术储备。相信不久的将来,HTML5会迎来一个快速发展和普及的春天。那么,HTML5这个新一代的标准,又给我们带来哪些缓存机制呢?
HTML5 之离线应用Manifest
我们知道,使用传统的技术,就算是对站点的资源都实施了比较好的缓存策略,但是在断网的情况下,是无法访问的,因为入口的HTML页面我们一般运维的考虑,不会对其进行缓存。HTML5的Cache Mainifest离线应用特性就能够帮助我们构建离线也能使用的站点,所有的资源都使用浏览器本地缓存,当然前提是要求在联网的情形下使用过一次站点。
如何实现离线访问特性
实现的步骤非常简单,主要3个步骤:
1)在服务器上添加MIME TYPE支,让服务器能够识别manifest后缀的文件
AddType text/cache-manifest manifest
2)创建一个后缀名为.manifest的文件,把需要缓存的文件按格式写在里面,并用注释行标注版本
CACHE MANIFEST
# 直接缓存的文件
CACHE:
Path/to/cache.js
# version:2012-03-20
3)给 html 标签加 manifest 属性,并引用manifest文件
具体可以参考:HTML5 缓存: cache manifest
html manifest=”path/to/name-of.manifest”
离线应用访问及更新流程
第一次访问离线应用的入口页HTML(引用了manifest文件),正常发送请求,获取manifest文件并在本地缓存,陆续拉取manifest中的需要缓存的文件
再次访问时,无法在线离线与否,都会直接从缓存中获取入口页HTML和其他缓存的文件进行展示。如果此时在线,浏览器会发送请求到服务器请求manifest文件,并与第一次访问的副本进行比对,如果发现版本不一致,会陆续发送请求重新拉取入口文件HTML和需要缓存的文件并更新本地缓存副本
之后的访问重复第2步的行为
离线机制的缓存用途
从Manifest的机制来看,即使我们不是为了创建离线应用,也同样可以使用这种机制用于缓存文件,可以说是给Web缓存提供多一种可以选择的途径。
存在的问题:缓存文件更新控制不灵活
就目前HTML5提供的manifest机制来讲,一个页面只能引用一个manifest页面,而且一旦发现这个manifest改变了,就会把里面所有定义的缓存文件全部重新拉取一遍,不管实际上有没有更新,控制比较不灵活。针对这个问题,也有的同学提出了一些建议,比如把需要缓存的文件分模块切分到不同manifest中,并分开用HTML引用,再使用强大的iframe嵌入到入口页面,这样就当某一个模式需要有更新,不会导致其他模块的文件也重新拉取一遍。
HTML5 之本地存储localstorage
HTML5给我们提供本地存储localstorage特性,严格来讲,其实已经不算传统Web缓存的范畴。因为它存储的地方是跟Web缓存分开的,是浏览器重新开辟的一个地方。
localstorage的作用
本地存储localstorage的作用主要使Web页面能够通过浏览器提供的set/get接口,存储一些自定义的信息到本地硬盘,并且在单次访问或以后的访问过程中随时获取或修改。
Localstorage的使用
Localstorage提供了几个非常易用的Api,setItem/getItem/removeItem/clear,具体的可以参考:Html5 Step by Step(二) 本地存储
Localstorage的缓存用途
Localstorage设计的本意可能是用来存储一些用户操作的个性化设置的文本类型的信息和数据,当我们其实也可能拿来当Web缓存区使用,比如我们可以将Base64格式编码的图片信息,存在localstorage中,再次访问时,直接本地获取后,使用Css3的Data:image的方式直接展现出来。
存在的问题:大小限制
按照目前标准,目前浏览器只给每个独立的域名提供5m的存储空间,当存储超过5m,浏览器就会弹出警告框。
可以说,HTML5的Manifest和localstorage是给我们在考虑Web缓存的时候提供了多一种思路,当你开发的应用只面对现代浏览器的时候,不妨可以考虑一下
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl( )方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。
uses-permission android:name="android.permission.INTERNET"/
在这篇文章中,我们将展示如何创建乖巧离线的网页和应用程序使用下面的HTML5功能:
AppCache本地存储文件资源,离线访问它们作为URL
索引型数据库存储结构化数据在本地,你可以访问和查询它
DOM存储在本地存储少量的文字信息,
离线事件来检测,如果你€ 重新连接到网络
例:随时随地访问数据的离线支持
让我们€™的说,你去购物,从您 最喜爱的食品网站 的配方的打印输出,但是当你€™重新在市场上,你塔卡纳€™吨找到一些关键的成分。
试想一下,当你在家中使用移动PC浏览 食谱网站 ,部分网站会自动下载离线使用。这可以让你把你的手机PC到店,访问该网站,并在市场寻找一个新的配方。 最好的部分 是,你可以做到这一点, 而 被连接到网络。作为一个消费者,您的网站感激,因为它只是工作时,你需要它。
离线的'蛋糕'这个词使用的食谱网站的搜索结果。
作为一个开发者,你可以使这些类型的场景相结合的离线技术: AppCache ,索引型数据库 , DOM存储 , WebSockets的 (或 XHR )。 在探索个人的技术,让我们的探讨的好处。
Metro风格的应用程序和网站,离线技术让你来处理连接故障。想象一下,您的用户填写一个表格,他失去网络连接。您的网站或Metro风格的应用程序应该怎么做呢?连接自由发展的心态可以让您的应用程序是否连接到网络或不正确地独立工作。你的应用程序将正常工作。
在更复杂的情况下,Web站点和应用程序允许用户创建新的内容,并存储新的数据,即使应用程序是完全脱机。试想一下,无缝地工作在脱机状态下,如Outlook今天的Outlook Web Access(OWA)的Hotmail或GMail。
离线技术也可以通过本地缓存的资源服务,预缓存将来信息和转移从云(或网络)到客户端设备的处理能力,提高整体性能。信息越多,你€™重新能够缓存在本地,在本地搜索,并计算在本地服务器和用户的体验将更快,需要更少的资源热转印机 。
有一个Metro风格的应用程序离线工作的期望高于网站的脱机工作。因为他们使用从商店的自我包含的程序包部署,用户希望他们有某种类型的离线功能(如游戏,书籍,食谱等)。即使这些应用程序是无法创建或访问新的内容,以前的内容应该是可见的(例如联系人,会议,饲料,杂志等)。
本地缓存文件资源使用AppCache
AppCache使您能够创建长寿命的本地缓存下载的文件资源,资源可以访问而离线或使用的同时在线,以提高性能。试想一下,一个三岁的孩子使用一台笔记本电脑,下载一个交互式的Web的游戏(KidsBook)从您的家庭网络。如果应用程序的资源存储在本地,孩子可以继续在车上玩游戏,那里没有网络连接。
如果KidsBook使用AppCache,本场比赛将有缓存必要的资源(的JavaScript,HTML,CSS,音频,视频等)时,先下载后从网络上断开时,播放的游戏。这可以让孩子保持愉悦,即使设备本身没有网络连接。
AppCache创作流程。
要看到如何启用互动网页游戏脱机工作,检查出 KidsBook的 IE Test Drive网站 上的例子。
AppCache使用一个manifest文件,以缓存的内容从网站上指定资源的URI。幕后发生后,浏览器显示网页,它允许在清单文件中定义的资源被下载的缓存。这保证了资源下载到本地机器上,作为一个单位在一个事务中,创建一个本地的缓存。如果一个单一的资源下载失败,没有创建高速缓存。要更新存储在缓存中的内容,在您的服务器更新清单文件。当用户下次访问该网站时,浏览器比较明显的服务器上的文件的缓存副本。如果缓存的舱单副本是不同的服务器副本,新版本更新清单文件中定义的内容高速缓存的使用。
AppCache还允许Internet Explorer和Metro风格的应用程序在脱机状态下使用传统的URL的访问缓存的资源。这可以让你在浏览器窗口中键入一个URL,并没有任何网络连接的情况下访问此信息。此外,脱机页可以解决的URI使用本地缓存的信息。代码示例来看看在 HTML5应用程序缓存(“œAppCacheâ) 部分中的 IE10开发人员指南 。
总体而言,AppCache提供了一定的优势HTTP的缓存。HTTP缓存没有吨保证缓存的资源之后将TIF(临时Internet文件)将被清除。此外,HTTP缓存没有€™吨正确地解决在脱机状态下的URL。然而,HTTP缓存可用于优化AppCache的行为,通过指定的缓存资源的生命周期。如果从网站上下载或复制的资源从缓存的本地高速缓存中创建一个新的版本时,这将决定。
Metro风格的应用可以受益于AppCache通过在本地缓存的Web资源的访问的页框,它允许脱机访问的内容。
高速缓存大型本地使用索引型数据库的结构化数据
索引型数据库 是一个本地JavaScript对象存储在本地机器上的数据库,允许快速索引和搜索的对象。前面介绍的 食谱网站, 包括16食谱从父站点中提取的数据库。想象一下,用一个RSS feed,一个WebSocket或XHR连接的,定期更新这个数据库。这将使您的用户能够访问到最新的食谱,即使他们有没有网络连接。
索引型数据库,您可以直接操作和索引的JavaScript对象。使用索引型数据库搜索本地信息的优点是它不会强迫你总是在云中搜索,降低了计算成本。这是假设你€™重新能够维持,是缓存在本地系统中的数据的相关性。