HTML 5中几种用于在客户端本地存储数据的API之间的比较

标签: html 客户端 数据 | 发表时间:2013-05-02 22:03 | 作者:llingma2010
出处:http://blog.csdn.net

更多HTML 5文章请查阅 HTML 6在线网站http://www.html5online.com.cn

本文概述
        本文将HTML 5中几种用于在客户端本地保存数据的API进行比较,这些API包括Web Storage API,Web SQL Database API,Indexed Database API与FileSystem API。这几种API的作用均为将数据保存在客户端本地。在一个现代Web应用程序中,有两个原因需要将数据保存在客户端本地:(1)为了使Web应用程序可以离线访问;(2)为了提高应用程序的性能。
        首先,我们介绍这些API之间的一些共同之处。
共同特性
存储数据在客户端本地
        首先,这几个API的作用均为在客户端本地存储一些数据。在有些API中,你也可以执行数据的搜索操作与批量追加及批量更新操作。
单源绑定
        在使用这几个API时,本地数据均被绑定到单个源中。例如,在http://abc.example.com站点中保存的数据将只允许被http://abc.example.com站点访问,不允许被http://def.example.com站点与http://abc.example.com:8081站点所访问。
磁盘限额
        可以想象,如果任何站点都被允许在客户端本地保存几个或几十个G的数据,对客户端本地的磁盘来说将是一场灾难。因此,浏览器将对客户端存储区的可存储容量强加一个限制。当应用程序所保存的数据容量超过该限制时,浏览器将向用户显示一个提示框,询问用户是否增加容量限制。你可能会认为浏览器应该对WebStorage、Web SQL数据库、indexedDB数据库等存储区统一指定一个容量限制,但实际上,各主流浏览器均对各存储区单独指定不同的容量限制。例如,http://abc.example.com站点被允许在WebStorage中存储5MB数据,在Web SQL数据库中存储25MB数据,不允许在indexedDB数据库中存储任何数据。另外,可以在应用程序的某个界面中显示用户在各存储区中允许保存多大容量的数据,已经保存多大容量的数据。用户也可以在该界面中修改各存储区的容量限制。
事务
        在Web SQL数据库与indexedDB数据库中,均支持事务的使用。该事务的作用与服务器端使用的各种关系型数据库中的事务的作用相同,都是为了确保数据的完整性与准确性。
同步与异步模式
        除了WebStorage API之外,其他几种本地存储API均支持同步模式与异步模式。同步模式是阻塞型的,当执行JavaScript脚本代码中在客户端本地保存数据的语句时,在数据被存储完成之前,下一句语句将不会被执行。而异步模式将首先为数据存储操作新建一个线程,然后立即执行下一句语句。当数据存储操作结束时可以通过回调函数通知应用程序数据存储操作已完成,并且执行之后的后续处理(必须事先定义回调函数,并且在回调函数中指定数据存储操作结束后所需执行的处理)。
        在数据存储量不大,所需时间不长的场合中,可以使用同步模式,因为使用该模式时编程方法比较简单。但是在存储量较大或所需时间较长的场合中,如果使用同步模式,数据存储操作将会阻塞主线程,阻塞用户在界面上所执行的操作。这意味着用户的鼠标操作或键盘操作将在短时间内得不到用户界面的任何反应。所以在这种场合下,应该使用异步模式,或者,可以通过Web Workers API将数据存储操作放在一个后台线程中单独执行(在后台线程中只能使用同步模式)。
几种API之间的比较
WebStorage
        在HTML 5中,WebStorage在大多数时候是指一种被称为localStorage的对象。你可以通过locaStorage.foo="bar"语句将数据长期保存在localStorage(可以被理解为客户端本地的一个存储区)中,当浏览器被关闭后再被打开时,可以通过访问localStorage.foo属性值获取之前被保存在localStorage中的数据。在HTML 5中的WebStorage API中,可以使用两种用于存储数据的对象,一种为localStorage对象,另一种为sessionStorage对象,当使用sessionStorage对象时,当浏览器被关闭后,就不能再获取被保存在sessionStorage存储区中的数据。
        WebStorage的优点与缺陷如下所示:
优点:
被所有主流浏览器支持,被iOS操作系统与Android操作系统支持。
属于一种简单API,容易学习。
属于同步API,编程方法简单。
被保存的数据可以立即被其他浏览器标签窗口所访问。
缺陷:
因为WebStorage API属于一种同步API,所以在保存大数据量或保存对象时的性能不高。
因为缺乏索引,所以在针对大数据量或对象进行搜索时的性能不高。
因为目前主流浏览器均只支持在WebStorage中存储字符串数据,所以当保存对象时必须先将其转换为JSON字符串后进行保存,当获取对象时必须先将取出的字符串后将其还原为对象,所以导致针对对象进行存取操作时的性能不高。
Web SQL数据库
        Web SQL数据库是一种基本拥有服务器端关系型SQL数据库的大部分功能的客户端本地据库。该数据库支持索引的使用,因此在搜索数据时拥有更高的性能,支持事务的使用,因此可以更好地确保数据的完整性与准确性。
Web SQL数据库的优点与缺陷如下所示:
优点:
被Chrome浏览器、Safari浏览器与Opera浏览器支持,被iOS操作系统与Android操作系统支持。
属于可使用异步模式与在后台线程中使用同步模式的API,保存数据时不会阻塞用户在界面上的任何操作。
支持索引的使用,搜索数据时拥有较高的性能。
支持事务的使用,可以更好地确保数据的完整性与准确性。
使用严密的数据结构,易于维护数据的完整性与准确性。
缺陷:
在IE浏览器与Firefox浏览器中不被支持。
要求在学习前首先掌握关系型数据库的有关知识与SQL语句的使用方法。
在使用前首先需要定义数据表结构,缺乏灵活性。
IndexedDB数据库
        因为Web Storage与Web SQL数据库各自都拥有一些优点与缺陷,所以在HTM 5中新增IndexedDB数据库,目的是结合两者的长处,克服两者的缺陷。
        IndexedDB数据库可以被理解为一个对象仓库的集合,你可以将对象存储在该数据库中的某一个对象仓库中。对象仓库有些类似于关系型数据库中的数据表,但是对象仓库中被存储的均为对象,所以不受数据结构的限制,不需要预先定义对象仓库的结构。可以在应用程序中使用任意数量的IndexedDB数据库,在每一个数据库中定义任意数量的对象仓库。但是与Web Storage不同的是,IndexedDB数据库拥有一些性能上的优势,你可以在对象仓库中通过创建索引来提高搜索数据时的性能,也可以通过事务的使用来确保数据的完整性与准确性。
优点:
属于可使用异步模式与在后台线程中使用同步模式的API,保存数据时不会阻塞用户在界面上的操作。
支持索引的使用,搜索数据时拥有较高的性能。
 支持事务的使用,可以更好地确保数据的完整性与准确性。
使用灵活的数据结构,不需要预先定义对象仓库的结构。
易于学习,不需要预先掌握其他数据库的有关知识。
目前为止被Chrome浏览器、Firefox浏览器与IE10浏览器所支持。
缺陷:
学习难度比Web Storage API与Web SQL数据库API更高一些。
因为使用灵活的数据结构,所以需要开发者在存储数据时确保数据的准确性与连续性。
文件系统
        前面所述的几个API均适用于在客户端本地保存文本数据或对象,但是当需要在客户端本地保存文件或原始二进制数据流时,我们需要使用HTML 5中新增的FileSystem API。该API为我们提供一个完整的具有阶层目录结构的文件系统,可用于将文件保存在客户端本地。另外,该API可结合HTM 5中的File Reader API与File Writer API一起使用。在HTML 5中,可通过File Reader API读取文件中的内容,通过File Writer API向文件中写入内容。
优点:
可用于在客户端本地存储大数据量文本文件与图像文件、音频文件、视频文件与PDF文件等二进制文件。
属于可使用异步模式与在后台线程中使用同步模式的API,保存数据时不会阻塞用户在界面上的操作,同时拥有较高的性能。
缺陷:
目前为止只受到Chrome浏览器的支持。
不支持索引与事务的使用。

作者:llingma2010 发表于2013-5-2 22:03:58 原文链接
阅读:84 评论:0 查看评论

相关 [html 客户端 数据] 推荐:

HTML 5中几种用于在客户端本地存储数据的API之间的比较

- - CSDN博客Web前端推荐文章
更多HTML 5文章请查阅 HTML 6在线网站http://www.html5online.com.cn.         本文将HTML 5中几种用于在客户端本地保存数据的API进行比较,这些API包括Web Storage API,Web SQL Database API,Indexed Database API与FileSystem API.

基于HTML模板和JSON数据的JavaScript交互

- - 张鑫旭-鑫空间-鑫生活
本文地址: http://www.zhangxinxu.com/wordpress/?p=2649. 一、小妹妹不要怕,哥哥很温柔的. 写文章之前,我总要去网上搜索相关资料,避免内容重复,顺便学习. 同样的,在这个风和日丽,阳光明媚的周三上午,我兴致勃勃地打开百度,搜索:“JS 模板 数据”,然后…….

java实现JT809协议数据对接客户端

- - Java - 编程语言 - ITeye博客
最近使用JT809协议进行数据对接,遇到了不少问题,度娘谷歌都不好使,找不到很好的客户端实现代码的例子,只能苦逼的自己闷头弄,现在特意写篇帖子,希望能帮助一些人. 背景:跟某公司做数据对接,将本公司的一些信息推送到接收端. 要求:建立tcp链接,使用接收端提供的用户名密码等信息 先登录,登录成功后推送数据,数据采用JT809标准协议.

简单几步实现用Web客户端来管理SqlServer2008数据库

- yasy - 博客园-首页原创精华区
上面说的是以前的做法,但自从换到Mac下用虚拟机来开发后对虚拟机的文件使用就比较敏感了,不想再安装超过百M的Sql Server Management Studio Express了,想使用Web版本的管理器了,毕竟Web版本的管理器才几M,也能完成我平常所做的操作. 下面是我安装Web版本的管理器步骤,有类似需求的朋友参考一下吧.

HTML 安全列表

- 火锅土豆 - 酷壳 - CoolShell.cn
下面这个网站罗列了,几乎所有的关于HTML 5 在各种主流浏览器上的安全问题,这些安全问题很有可能将会是黑客攻击你的网上的敲门砖,他们几乎都和Javascript都有关系,你就要好好注意了. IE6,7,8,9,和Opera 8.x, 9.x, 10.x 都支持这样的语法. 这个问题会存在于所有的Firefox版本中,可以让用户进行XSS(跨站脚本)攻击.

HTML学习笔记

- - CSDN博客推荐文章
超文本标记语言( 英文:HyperText Markup Language,HTML)是为“ 网页创建和其它可在 网页浏览器中看到的信息”设计的一种 标记语言. HTML被用来结构化信息——例如标题、段落和列表等等  点击打开链接. w3schools  点击打开链接 {语法大全,超赞.

html嵌套规则

- - Web前端 - ITeye博客
转载: http://www.studyofnet.com/news/412.html. 一、HTML 标签包括 块级元素(block)、内嵌元素(inline). 一般用来搭建网站架构、布局、承载内容……它包括以下这些标签:. 一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等,下面这些标签都属于内嵌元素:.

Html 转换成PDF

- - 编程语言 - ITeye博客
最近在搞一个关于html转换为pdf的需求,网上找了很多,但是如果批量处理就会出现问题,最后找到了PD4ML,解决了我的问题. String urlstring = "file:///D:/债权转让及受让协议--魏然2014-08-16.html";. 需要在src目录下创建fonts文件夹,并且在文件夹中建立pd4fonts.properties ,配置文件中的内容如下.

HTML+CSS小结 - jessies

- - 博客园_首页
   结构   HTML        .    样式   CSS      .    行为   JavaScript(交互行为).    .    网页标题.    标题.

HTML head 头标签

- - IT技术博客大学习
HTML head 头部分的标签、元素有很多,涉及到浏览器对网页的渲染,SEO 等等,而各个浏览器内核以及各个国内浏览器厂商都有些自己的标签元素,这就造成了很多差异性. 移动互联网时代,head 头部结构,移动端的 meta 元素,显得更为重要. 了解每个标签的意义,写出满足自己需求的 head 头标签,是本文的目的.