客户端持久性(存储)
Posted
技术标签:
【中文标题】客户端持久性(存储)【英文标题】:Client Side Persistence (Storage) 【发布时间】:2010-11-30 10:49:27 【问题描述】:在我的演示中,我想避免使用传统数据库并将所有数据存储在客户端,例如通过表单提交的信息。
对此我有什么选择。我听说过 Gears,但没有任何实际经验。
除了字符串之外,我还可以存储二进制信息吗?一个图像?
【问题讨论】:
【参考方案1】:您可以查看YUI's StorageUtility。它可以在备用基础上使用 html 5、Google Gears 或 SWF。
【讨论】:
哇,它使用 SWF?太糟糕了。这就是让我只想根据每个请求关闭闪存存储的事情。完全滥用,而且偷偷摸摸。我感到不安的是,像 Yahoo 这样的品牌和开源软件会诉诸垃圾邮件广告软件众所周知的那种东西。 @apphacker:仅仅因为垃圾邮件发送者将某项技术用于邪恶目的并不意味着该技术的所有使用在某种程度上都是邪恶的。出于正当理由使用它没有任何问题。或者我们应该禁止 HTTP 重定向,因为垃圾邮件发送者使用它们将人们发送到邪恶的网站? @apphacker 我看不出重点。那么你讨厌 HTML 5 还是 Google Gears? @AndyLi 我讨厌用户清除缓存时闪存没有被删除。【参考方案2】:恐怕你的选择有点有限。
Cookies 根据您是否愿意只使用某些浏览器,您可以实现browser based storage【讨论】:
【参考方案3】:Cookie 是跨浏览器最受支持的方式。我开源了一个小型库,用于通过本机 javascript 对象通过 Cookie 获取和保存数据。
http://code.google.com/p/mapbug/source/browse/trunk/app/scripts/cookies.js
欢迎您复制并按您认为合适的方式使用。如果您按原样使用它,您还需要此 javascript 命名空间隔离代码:
http://code.google.com/p/mapbug/source/browse/trunk/app/scripts/namespace.js
如果您有大量数据,则必须将其分布在许多不同的 cookie 中。您通常可以依靠每个 cookie 最多保存 4K 的数据。
【讨论】:
【参考方案4】:正如 Andy 所说,YUI StorageUtility 是一个很好的抽象。 Dojo 有一个类似的抽象dojox.storage,它也适用于一些较旧的浏览器。如果您的数据量小于 100 KB,那么您可以轻松地使用 Flash。仔细考虑使用 HTTP cookie,因为它们不仅大小有限,而且通过网络发送,这可能是可取的,也可能是不可取的。
【讨论】:
【参考方案5】:我有一个非常简单的演示,用于测试 HTML5 的 webstorage / localstorage。
http://www.codebase.es/test/webstorage.html
你可以存储任何你想要的东西,而不仅仅是字符串。要存储图像,请将图像复制到画布中并使用 toDataURL() 方法保存数据。
但不要指望它可以在 IE 上运行...
【讨论】:
以上是关于客户端持久性(存储)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Actor 中持久化消息并在失败后回复(JVM 崩溃)?