怎么使用上面的HTML5功能创建离线的网页和应用程序
用户希望他们的网站和应用程序的工作,即使在网络不可用。随着越来越多地存储在云中的数据,开发者想使流体的经验,使对数据的访问时,有没有连接设备时,断开网络连接或当他们遇到死角覆盖。
在这篇文章中,我们将展示如何创建乖巧离线的网页和应用程序使用下面的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,音频,视频等)时,先下载后从网络上断开时,播放的游戏。这可以让孩子保持愉悦,即使设备本身没有网络连接。
要看到如何启用互动网页游戏脱机工作,检查出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对象。使用索引型数据库搜索本地信息的优点是它不会强迫你总是在云中搜索,降低了计算成本。这是假设你€™重新能够维持,是缓存在本地系统中的数据的相关性。
索引型数据库是一种技术,创造了约ISAM数据库的概念。像许多Web平台技术,它的目的是提供一个低级别的API,可以使用不同的库最重要的是建立在抽象。下表比较了的IndexedDB发展的概念类似的概念很好理解的关系模型。
概念 | 关系数据库 | 索引型数据库 |
数据库 | 数据库 | 数据库 |
表 | 表包含的列和行 | objectStore包含的JavaScript对象和键 |
查询机制,加入和过滤器 | SQL | 光标的API,主要范围的API和应用程序代码 |
交易类型和锁 | READ_WRITE交易,锁定可能发生在数据库,表或行 | 锁定可能发生在数据库上VERSION_CHANGE交易,READ_ONLY READ_WRITE交易的objectStores上。有没有对象级锁定。 |
事务提交 | 交易创作是明确的。默认是回滚,除非我调用commit。 | 交易创作是明确的。默认是承诺,除非我调用abort或有没有被捕获的异常。 |
物业查找 | SQL | 索引是需要直接查询对象的属性 |
记录/数据 | 正常形式和单值属性 | 去正规的形式,可以多值属性 |
当使用索引型数据库中,您将创建 包含对象存储的数据库 (联系人,电子邮件,会议等)。这些对象存储包含您的应用程序所需要的JavaScript对象(联系人“名,姓,地址等)。每个JavaScript对象有一个唯一的标识符,可以通过一个的keyPath。此外,对象存储性能,可用于查询的数据集将包含索引(封电子邮件“的主题,日期等)。过滤器将使用索引或对象存储通过KeyRanges组织或降低的结果。
下面的代码片断演示了如何阅读一本书,记录从“œLibrary数据库:
var oRequestDB = window.indexedDB.open("Library");
oRequestDB.onsuccess = function (event) {
db1 = oRequestDB.result;
if (db1.version == 1) {
txn = db1.transaction(["Books"], IDBTransaction.READ_ONLY);
var objStoreReq = txn.objectStore("Books");
var request = objStoreReq.get("Book0");
request.onsuccess = processGet;
}
};
访问对象存储中的信息读或写的背景下的交易。有三种类型 的交易:
- VERSION_CHANGE–创建或更新对象存储和索引。由于VERSION_CHANGE交易锁定完整的数据库,并防止并发操作,建议不要使用它们来读取和写入到数据库中的记录。
- READ_WRITE“”允许添加的记录包含在对象存储,读取,修改,和删除。
- READ_ONLY“”允许包含在对象存储中的记录被读取。
异步API所提供的索引型数据库的模型利用许多Web的API,如XHR 请求 /响应模型的支持。请求提交给当地IndexedDB过程和结果的处理由客户机€™的调用onSuccess或onerror的事件处理程序。此外,有没有明确的机制,以提交事务。事务提交时,有没有在服务器上挂起的请求并没有搁置的结果在客户端上。此外,它是由你的应用程序来处理异常和错误事件。在许多情况下,如果不处理异常或错误事件,该交易被中止。
总之,索引型数据库是一个优化的机制,通过索引查询数据对象。它提供的API来访问大量的相关数据,通过游标和使用KeyRange对象来过滤数据的网站。我们相信开发人员会按照这种模式是有一个“master”数据库的所有用户记录生活中的云和本地的IndexedDB数据库的一个子集的记录,以便快速搜索和离线数据访问。
小文本数据存储在本地,与DOM存储和离线/在线活动
网站可以使用DOM存储和连接的事件来处理少量的文本数据和检测连通性差。想象一下,一个游戏,使用这些技术来跟踪用户在脱机状态下的得分。试想一下,如果你得到了很高的分数,有没有网络连接时,会发生什么事。Web页面挂起或崩溃?
因为这个数据是文本的性质,它不吨需要一个很大的空间,你可以使用DOM存储 在本地存储信息,而无需网络连接,并在以后的时间,当网络可用时,把它上传。DOM存储比cookie支持更多的数据并没有€™吨需要的数据编码。此外,DOM存储不发送数据到服务器上的每个请求,并可以限定域或会话访问。
使用这种技术很简单,为访问windows.localStorage的对象。在这个对象,你可以检查或添加名称/值对的形式的属性。下面的代码片断演示了如何使用本地存储来存储在本地的场均得分:
<script type="text/javascript"> var lStorage; function init() { if (window.localStorage) { lStorage = window.localStorage; if (typeof lStorage.score == 'undefined') lStorage.score = 0; document.getElementById('score').innerHTML = lStorage.score; } } function save() { if (lStorage) { lStorage.score = getGameScore(); } } </script> ... <body onload="init();"> <p> Your last score was: <span id="score">last score insert in init()</span> </p> </body>
此外,离线 / 在线活动将帮助你探测的时候,你可以通过网络访问,所以你可以把数据到你的服务器。例如,您可以检测到你的在线和更新数据库的内容在服务器上使用的WebSockets或XHR。
这是简单的检查的navigator.onLine属性的状态。下面的代码显示如何注册在线和离线活动:
function reportConnectionEvent(e) {
if (!e) e = window.event;
if ('online' == e.type) {
alert('The browser is ONLINE.');
}
else if ('offline' == e.type) {
alert('The browser is OFFLINE.');
}
}
window.onload = function () {
status = navigator.onLine; //http://www.software8.co
document.body.ononline = reportConnectionEvent;
document.body.onoffline = reportConnectionEvent;
}
在Metro风格的应用程序,我们™提供了一个额外的的API,Windows.ApplicationData,允许你在本地存储更多的数据类型,使他们能够在多台机器上漫游。
关键的一点是要设计你的应用程序或网站与您的连接可能会消失的想法,在任何时候,你需要能够顺利地处理这种情况。实现数据模式,将信息存储在本地,然后再发送到云,可以让你处理问题的网络连接。
更新本地数据使用WebSockets和XHR
在某些情况下,您的客户数据 将继续住在云计算中,可以很容易地从任何设备访问。因此,您需要确保缓存的数据仍然是相关的,当前的,最新的。为了做到这一点,您需要创建渠道,云和您的应用程序之间的数据同步。你可以杠杆作用的的WebSockets及XHR来促进这种同步。这要求您将您的数据打包成转让的格式(如XML或JSON),使用XHR或WebSockets的这些资源转移到客户端,然后使用XML或JSON解析器将存储在索引型数据库数据库创建JavaScript对象。这也可以用于上传DOM存储到服务器中存储的信息。
结论
网络连接并不总是可靠的,但是,你的应用程序需要。使用这些脱机技术预见到网络的不足,使你的应用程序,甚至在许多消费场景和情况。此外,还可以利用一个巨大的机会,区别您的网站和Metro风格的应用程序,让他们正常工作脱机。这将增加它们的用法和创建一个更大的机会为您提供服务。充分利用各种离线技术规定(AppCache,索引型数据库,DOM存储,和其他人)来缓存尽可能多的信息可以在本地。
内容源:站长中心 www.software8.co