JS高程:读书摘要(十九)离线应用与客户端存储

2019-03-28  本文已影响0人  Upcccz

开发离线Web应用需要几个步骤。首先是确保应用知道设备是否能上网,以便下一步执行正确的操作。然后,应用还必须能访问一定的资源(图像、JavaScriptCSS 等),只有这样才能正常工作。最后,必须有一块本地空间用于保存数据,无论能否上网都不妨碍读写。HTML5 及其相关的API 让开发离线应用成为现实。

一、离线检测

二、应用缓存

HTML5 的应用缓存(application cache),或者简称为appcache,是专门为开发离线Web应用而设计的。Appcache就是从浏览器的缓存中分出来的一块缓存区。要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源。下面是一个简单的描述文件示例。

CACHE MANIFEST
#Comment
file.js
file.css

要将描述文件与页面关联起来,可以在<html>中的manifest属性中指定这个文件的路径,例如:

<html manifest="/offline.manifest">
// offline.manifest 中包含着描述文件
applicationCache 对象

status 属性,属性的值是常量,表示应用缓存的如下当前状态。

事件

一般来讲,这些事件会随着页面加载按上述顺序依次触发。不过,通过调用update()方法也可以手工干预,让应用缓存为检查更新而触发上述事件。

update()一经调用,应用缓存就会去检查描述文件是否更新(触发checking事件),然后就像页面刚刚加载一样,继续执行后续操作。如果触发了cached 事件,就说明应用缓存已经准备就绪,不会再发生其他操作了。如果触发了updateready 事件,则说明新版本的应用缓存已经可用,而此时你需要调用swapCache()来启用新应用缓存。

三、数据存储

3.1 cookie

Cookie 用于存储 web 页面的用户信息。该标准要求服务器对任意HTTP 请求发送Set-Cookie HTTP头作为响应的一部分,其中包含会话信息。例如,这种服务器响应的头可能如下:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value

浏览器会存储这样的会话信息,并在这之后,通过为每个请求添加Cookie HTTP头将信息发送回服务器。

GET /index.html HTTP/1.1
Cookie: name=value
限制
组成

一个cookie由名称、值、域、路径、失效时间、安全标志几块信息组成。

Set-Cookie: name=value; domain=.wrox.com; path=/; secure

尤其要注意,域、路径、失效时间和secure 标志都是服务器给浏览器的指示,以指定何时应该发送cookie。这些参数并不会作为发送到服务器的cookie信息的一部分,只有名值对儿才会被发送。

JavaScript 中的cookie

返回当前页面可用的(根据cookie的域、路径、失效时间和安全设置)所有cookie的字符串,一系列由分号隔开的名值对儿。设置document.cookie并不会覆盖cookie,除非设置的cookie的名称已经存在。

每次设置cookie时最好使用encodeURIComponent()进行编码。删除即设置"expires=" + (new Date(0)).toGMTString();

3.2 Web Storage
window.sessionStorage & window.localStorage

Storage 类型提供最大的存储空间(因浏览器而异)来存储名值对儿,有如下方法。

可以通过点语法或者方括号语法访问属性,例如sessionStorage.userName,但是建议使用方法。

还可以通过结合length属性和key()方法来迭代或者使用for-in,如下所示。

for (var i=0, len = sessionStorage.length; i < len; i++){
    var key = sessionStorage.key(i);
    var value = sessionStorage.getItem(key);
    alert(key + "=" + value);
}

for (var key in sessionStorage){
    var value = sessionStorage.getItem(key);
    alert(key + "=" + value);
}

sessionStorage

会在浏览器关闭后消失,限制大小为2.5M(IE8+Opera5M),存储在sessionStorage中的数据可以跨越页面刷新而存在,同时如果浏览器支持,浏览器崩溃并重启之后依然可用。

localStorage

localStorage属于永久存储,限制大小为5M(chromeSafari2.5M),要访问同一个localStorage对象,页面必须来自同一个域名(子域名无效),使用同一种协议,在同一个端口上。

storage 事件

Storage对象进行任何修改,都会在文档上触发storage事件,这个事件的event对象有以下属性。

有的浏览器并不支持该事件。

3.3 IndexedDB

通俗地说,IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近NoSQL 数据库。

用于将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。

阮一峰-IndexedDB

上一篇下一篇

猜你喜欢

热点阅读