我的应用程序使用客户端数据库存储,使用 webSQL 为用户存储信息。我听说浏览器开始远离 webSQL。目前只有 chrome、safari 和 Opera 支持它。因为 IE 和 Firefox 不支持 webSQL,所以如果用户使用这些浏览器,我将使用 cookie 来存储信息。然而,cookies 不是很安全,而且很难存储大量数据。那么我的问题是,现在有没有更好的选择类似于所有浏览器都支持的 javascript API?谢谢。
2 回答
我认为 IndexedDB 对您来说是一个选择,它是一个基于对象的数据存储。Chrome 目前支持,Firefox 和 IE 10 将来也会支持。
查看以下演示文稿以更好地理解 http://html5-demos.appspot.com/static/html5storage/index.html#slide1
根据我的经验,我建议使用包装库来降低未来浏览器更改的风险。下面给出了几个流行的库
- Remy Sharp的存储 polyfill
- Amplify.js通过 appendTo HTML5 API 与 HTML4 浏览器(包括 IE6)的后备
- RealStorage HTML5 API 是整个 API 的子集
- YUI 团队的YUI3 CacheOffline
- Persistence.js 异步 Javascript 对象数据库映射器
- YDN-DB易于使用的 IndexedDB、WebSql 和 localStorage 数据库包装器构建在闭包库之上。
我迟到了几年,但考虑到自从提出这个问题以来客户端浏览器领域的发展,我想我会加两分钱。
在提出这个问题时,IndexedDB 是唯一的替代 WebSQL,尽管当时对它的支持参差不齐。虽然今天前者仍然适用,但后者不适用:现在,所有主要浏览器供应商都有 IndexedDB 的实现。
考虑到 IndexedDB 是目前唯一保留在 W3C 标准轨道上的数据库,就本地客户端数据库而言,它几乎是唯一的选择。
但在您深入研究 IndexedDB 之前,您应该了解几件事。首先是它是一个非关系型文档存储,因此本身不支持 SQL。第二个是它的API……至少可以说是笨拙的。
鉴于这些情况,我建议您查看BakedGoods。例如,有了它,在 IndexedDB 数据库中放置一个或多个数据项非常简单:
bakedGoods.set({
data: [{key: "key1", value: "value1"}, {key: "key2", value: "value2"}],
storageTypes: ["indexedDB"],
function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
当然,如果您是某种受虐狂,您可以忽略我的建议并处理原始 API。但不要说我没有警告你!
为了完全透明,BakedGoods 真正由您维护 :) 。