IndexedDB是一个 正在制定中的用于浏览器中大数据量的结构化数据存贮和针对这种数据的高效能索引查询的web标准。 Mozilla已经向w3组织提交了收集到的大量的针对这个规范的重 要反馈资料。 而且我们计划在Firefox 4中实现这个规范。 我们告诉杰出的web开发者们,我们要制定一个优秀的web上的结构化数据存储API。
与此同时,有几种版本的Safari, Chrome, 和 Opera 支持一种叫做Web SQL Database的技术,这种技术是使用SQL语 句作为字符串类型的参数传入到JavaScript API里,我们认为,开发人员的美学立场是一个重要的考虑因素,因此对于客户端 的 web应用程序来说,这是一种极丑陋的解决方案。 我们把开发人员的反馈意见给了IndexedDB规范说明书的编辑, 我们还跟 微软讨论过,他们同意我们的看法,认为IndexedDB 对于web是一个不错的选择。 随着Chrome 浏览器团队即将实现这个规范, 我们有必要在这里解释一下我们的设计决策,以及为什么我们认为对于web来说,IndexedDB是一个比Web SQL Database更好的解决方案。
运行在IE 8+, Safari 4+, Chrome 4+, Opera 10.5+ 和 Firefox 2+ 上的Web应用程序已经能够利用localStorage和sessionStorage通过简单的JavaScript API存储key-value形式的数据。 这种已经被广泛实现的Web存储标准 (包括localStorage 和 sessionStorage)只是适用于小数据量的数据,而对于大数据量的结 构化数据的存储就力不从心了。 虽然很多服务器端的数据库都使用SQL来编程操作结 构化数据、有针对性的查询数据,但在客户端,在JavaScript API里使用SQL,存在着很大的争议。
SQL? 什么SQL?
很多的web开发人员都非常熟悉SQL, 因 为他们既跟客户端的代码打交道(例如JavaScript,,CSS以及标记语言),同时也跟服务器端代码大交道(例如PHP和数据库操作)。 然而,尽管受人喜欢的SQL广泛使用,我们却没有一个统一的SQL规范来定义这种技术。 特别的,SQLite虽然支持大部分的SQL-92标 准,但也有不少明显的缺失,而WebDatabase API就是以它为基础的。 SQLite它自己并不是一种规范 — 它是一种开发完成的技术! 而最好的用来说明SQLite支持哪些SQL子集的定义文档就是这个SQLite使用手册。 为了能使Web SQL Database向真正正确的方向发展,我们必须首先为web应用程序定义一个有意义的SQL子集。 当JavaScript本身已经有了很多的优秀解决方案的同时,我们为什么要定义出另外一种语言呢?
SQLite的长处和短处
我们认为SQLite是一种非常有用的技术,它已经成为Firefox有效的扩展组件和受信任的软件。 可我们不认为它是一个合适的对外公开用来生成web内容的API的基础程序, 完全不适合,因为我们没有一个可信任的、广泛接受的标准来正确的规范SQL子集。 除此之外,我们不希望以后会由于SQLite的变动而影响到整个web, 也不认为把各大浏览器(以及web标准)都约束到SQLite上是一种明智的做法。 IndexedDB不存在这些问题;甚至我们可以把对IndexedDB底层的实现基于SQLite之上, 我们通过发布一些不依赖于SQLite语法语义的API将开发人员和SQLite隔离开。
美学和Web开发者
去年,我们在Mozilla校园里举办了一次峰会,主要讨论web上的存储。 我们邀请web开发人员告诉我们他们的理想的web上的结构化数据存储API的样子。 很多人表示有保留的接受以SQLite为基础的API,因为他们在一些浏览器里都使用过Web SQL Database,他们认为有些东西“有”总比“没有”强、比还只是一些概念的东西强。 当然,所有的声音都热情的希望一种更好的设计方案,期望一种更易处理的更简单的模式。 我们看着程序员们在白板上绘制一个简单的BTree API,将他们遇到的应用程序上对数据存储的要求添加到上面,这激励着我们去重视他们的意见。 我们达成一致,认为使用字符串表示SQL语句缺乏作为“web原生”的JavaScript API的优雅,应该寻找一种替换设计。我们和微软一起征求关于IndexedDB议案的回馈,有幸成为为这个标准努力的活跃分子。
在另外一篇文章里,我们将 IndexedDB和Web SQL Database进行了对比,注意到前者提供了一种比后者跟简单的语法。 IndexedDB给第三方开发者开发JavaScript代码库提供了完全的空间,让他们可以通过BTree API完全驾驭下层基础, 我们非常期待像BrowserCouch这 样的构建于IndexedDB之上的具有首创精神的成果出现。 坚定无畏的开发人员们实际上可以在IndexedDB上开发出一个SQL API。 我们特别的期望看到一种基于IndexedDB的Web SQL Database API实现, 我们认为这在技术上是能做到的。在浏览器里使用SQL-based API基本上不是一种合适的入手途径,但在IndexedDB上的SQL-based APIs还是有它的空间的。
我们希望继续和web开发人员们探讨web上的数据存储,这能帮助我们整理关于产品功能和未来web标准的思路。 我们期待着下一代的web应用程序能够在索引过的数据上执行高性能的查询操作,期望web应用能在“airplane模式”下更健壮的运行。
文/外刊IT评论