我正在创建一个我认为必须拥有客户端数据库的网站。另一种选择是在服务器上粘贴所有,但代价是增加了复杂性并降低了可扩展性。我有什么选择?我必须构建一个插件吗?我必须等到每个人都符合HTML5标准吗?
更新为什么我真的需要这个,有很多评论。这是我的想法。告诉我,如果我很傻:
答案 0 :(得分:27)
答案 1 :(得分:5)
我回答这个问题已经晚了大约5年,但考虑到现有的一些答案中存在错误和过时的数据,以及原始问题中未解决的问题,我认为我会投入两美分。 / p>
首先,与其他人在此处暗示的相反,localStorage不是数据库。它是(或应该被视为)一个持久的,基于字符串的键值存储......
......这可能完全可以满足您的需求(并将我带到第二点)。
如果对上述所有问题的回答都是“否”,请使用localStorage,避免出现WebSQL和IndexedDB API的问题。好吧,也许只是后者头痛,因为前has been deprecated。
您可能还需要查看其他几个客户端存储工具(本机和非本机),其中一些已被弃用*但仍看到某些浏览器的支持:
如果您想利用这些设施中的任何一个,请查看BakedGoods,而不必编写低级存储操作代码。有了它,例如,将数据放在其中一个(或多个)中就像这样简单:
bakedGoods.set({
data: [{key: "key1", value: "val1"}, {key: "key2", value: "val2"}],
storageTypes: ["silverlight", "fileSystem", "localStorage"],
options: optionsObj,
complete: function(byStorageTypeStoredKeysObj, byStorageTypeErrorObj){}
});
哦,为了完全透明,BakedGoods由这个人维护在这里:)。
答案 2 :(得分:4)
如果您觉得需要它,请将其用于支持它的客户端,并为不支持它的客户端实施服务器端回退。
另一种方法是,您可以使用Flash和本地共享对象,它可以存储比cookie更多的信息,可以在所有浏览器中使用Flash(几乎所有浏览器),并存储类型化数据。您不必在Flash中执行整个应用程序,您只需编写一个小实用程序来读取/写入LSO数据。这可以使用没有任何框架的直接ActionScript项目来完成,并且会给你一个5-15kb的小swf。
您主要需要两个API。 SharedObject.getLocal()
可以访问LSO并读取/写入数据,ExternalInterface.addCallback
可以用来注册AS3方法作为回调来调用读/写LSO方法。
<强>共享对象强>
<强> ExternalInterface的强>
这些链接适用于Flex引用,但为此您只需创建一个不需要Flex框架的ActionScript项目,因此可以大大减少swf大小。有许多好的IDE,包括像FlashDevelop这样的免费开源。
<强>的FlashDevelop 强>
答案 3 :(得分:3)
我遇到了一个JavaScript数据库http://www.taffydb.com/,我自己也在试用它,希望这有帮助。
答案 4 :(得分:3)
如果您在客户端上寻找NoSQL风格的数据库,可以查看http://www.forerunnerdb.com。它支持与MongoDB相同的查询语言,并且如果您希望DOM自动反映数据更改,则它具有数据绑定模块。
它也是开源的,不断更新新功能,并且它周围的社区正在快速增长。
免责声明,我是该项目的首席开发人员。
答案 5 :(得分:2)
答案 6 :(得分:1)
查看HTML5本地存储:
http://people.w3.org/mike/localstorage.html
您可能还会发现这有用: HTML5 database storage (SQL lite) - few questions
当Windows 98首次出现时,我们中有很多人仍然坚持使用MS-DOS 6.22。当然,新的操作系统上有很酷的功能,无法在MS-DOS中运行。
有一段时间必须留下一些东西来为创新腾出空间。如果您的应用程序非常具有创新性并且将提供使用最新和最好的技术的酷炫新功能,那么一些旧的浏览器自然需要被抛在后面。
您拥有的优势在于,与升级操作系统不同,从IE7升级到Chrome 8或Firefox 3.6对于应用的普通用户来说是一个更容易实现的目标,特别是如果您提供链接和升级说明。 / p>
答案 7 :(得分:1)
我会尝试Mozilla的localForage。 https://mozilla.github.io/localForage/