我已经做了一些环顾四周,发现WebSQL现在似乎有一些不稳定的未来。
一方面,它显然被广泛地视为一种解决方案,因为事实上每个实际的实现只使用SQLite3,因为规范本身大量借用了SQLite3的设计语义,而且对于<非常棘手em> not 专门使用SQLite3。
另一方面,截至2017年2月,所有主流浏览器似乎都支持它(http://caniuse.com/#search=websql) - Chrome已经使用了很长时间,它在IE11,Edge 14,Firefox 50中引入,移动支持似乎也呈现出积极的趋势(现在只有一个说明说它在某些三星上出于某种原因不起作用)。
IndexedDB背后的理论确实有意义:它是一个全新的标准,不依赖于任何现有的库,供应商可以设计自己的实现,创建竞争,并避免供应商/库锁定。但是,我已经陷入了IndexedDB最负面的一个方面:由于实现开销,它的抽象设计似乎具有绝对灾难性的性能。
http://scaljeri.github.io/indexeddb-vs-websql/v2.0.0/index.html是一键式IndexedDB-vs-WebSQL枪战。我把它设置为10000个项目(一个相当适中的数字)并尝试使用我的ThinkPad T43--一个2GB内存的单核2GHz Pentium M。
首先,除了Chromium之外什么都没有运行,大多数标签都被暂停,剩下的标签没有使用任何CPU:
对于IndexedDB上的整个“插入”时间,该选项卡使用100%CPU,系统通常无法使用。 (我本可以浏览一下 - 屏幕重绘真的很慢 - 但我不是为了获得准确的基准测试。)
当我有很多其他事情发生时,我也碰巧使用了标签,系统碰巧被交换死亡(在这台特定的机器上发生了很多事情):
然而,在整个过程中,WebSQL的性能令人难以置信。插入一堆行的三秒钟,即使在系统交换很多(到慢速HDD)时,系统I / O也会受到很大影响。 (注意:我了解SQLite3强制刷新所有数据到磁盘以确保默认完整性,但我不确定Chrome的实现是否会禁用WebSQL的此选项。)
在https://nolanlawson.com/2015/09/29/indexeddb-websql-localstorage-what-blocks-the-dom/(自2015年9月起)完成的基准测试似乎与我在此提出的内容基本一致;它表明,在2013 Macbook Air上,IndexedDB的性能要比WebSQL差得多。
考虑到这些因素,我有两个问题。
什么是WebSQL的实际未来作为Web标准? SQLite3无处不在(它是ANSI C),WebSQL似乎得到广泛支持(?)。
我的问题最初是专门询问有关Chrome扩展支持的内容(请参阅下一点),但现在我想一想,如果我想要替代localStorage(及其5MB限制),我会想要使用WebSQL作为我的主要解决方案,使用IndexedDB或localStorage作为很少(如果曾经)使用的后备。我今后采用这种方法取得成功的机会是什么?
是否有任何浏览器供应商可能很快就会放弃WebSQL支持(针对网站和/或扩展程序)?
我正处于Chrome扩展程序的设计阶段,需要存储大量可能的信息 - 它将管理历史记录/书签/等,这些数据只会增长而且不会缩小。我打算在我的所有计算机上使用这个扩展,包括我在上面显示的基准测试中的T43。
此时,对我来说,它是WebSQL还是什么都没有;我不同意IndexedDB。如果WebSQL看起来它会消失,我将在Go或类似的地方制作一个小型应用程序服务器并简单地与之交谈。
在类似的说明中,如果WebSQL有一天随机“离开”Chrome,即使Web支持消失,对它的扩展支持是否会继续?