JavaScript 客户端存储

  1. 客户端存储遵循“同源策略”,因此不同站点的页面是无法互相读取对方存储的数据,而同一站点的不同页面之间是可以相互共享存储数据的;

  2. 客户端存储包括以下几种形式:

    1. Web存储:Web存储最初作为HTML5的一部分被定义成API形式,但是后来被剥离出来最为独立的一份标准了。该标准目前还在草案阶段,但其中的一部分内容已经被包括IE8在内的所有主流浏览器(可交互地)实现了。Web存储标准所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际上是持久化关联数组,是名值对的映射表,“名”和“值”都是字符串。Web存储易于使用、支持大容量(但非无限量)数据存储同时兼容当前所有主流浏览器,但是不兼容早起浏览器。
    2. cookie:cookie是一种早期的客户端存储机制,起初是针对服务器端脚本设计使用的。尽管在客户端提供了非常繁琐的Javascript API来操作cookie,但他们难用至极,而且只适合存储少量文本数据。不仅如此,任何以cookie形式存储的数据,不论服务器端是否需要,每一次HTTP请求都会把这些数据传输到服务器端。所有新旧浏览器都支持它,但是,随着Web Storage的普及,cookie最终会回归到最初的形态:作为一种被服务器端脚本使用的客户端存储机制。
    3. IE User Data:微软在IE5及之后的IE浏览器中实现了它专属的客户端存储机制——“userData”。userData可以实现一定量的字符串数据存储,对于IE8以前的浏览器中,可以将其用做是Web存储的替代方案 。
    4. 离线Web应用:HTML5标准中定义了一组“离线Web应用”API,用以缓存Web页面以及相关资源(脚本、CSS文件、图像等)。它实现的是将Web应用整体存储在客户端,而不仅仅是存储数据。它能够让Web应用“安装”在OI客户端,这样一来,哪怕网络不可用的时候Web应用依然是可用的。
    5. Web数据库:为了能够让开发者像使用数据库那样操作大量数据,很多主流的浏览器纷纷在其中开始集成客户端数据库的功能。Safari、Chrome和Opera都内置了SQL数据库的客户端API。遗憾的是,这类API的标准化工作以失败告终,并且Firefox和IE看样子也都不打算实现这种API。目前还有一种正在标准化的数据库API,称为”索引数据库API“(Indexed Database API)。调用该API返回的是一个不包含查询语言的简单数据库对象。这两种客户端数据库API都是异步的,都使用了事件处理机制(类似DOM事件机制),这样的方式多多少少会显得有些复杂。
    6. 文件系统API:现在主流浏览器都支持一个文件对象,用以选择的文件通过XMLHttpRequest上传到服务器。与之相关的规范(草案阶段)定义了一组API,用于操作一个私有的本地文件系统。在该系统中可以进行对文件的读写操作,这些内容正在紧锣密鼓标准化当中。随着这些API被广泛地实现和支持,Web应用可以使用类似基于文件的存储机制,这对于大部分程序员来说再熟悉不过了。

摘自《Javascript权威指南 第6版》

猜你喜欢

转载自www.cnblogs.com/xingxuesheng/p/9378419.html