2012-08-10 114 views
1

我的应用程序包含一个照片处理/编辑器部分。用于临时存储base64图像数据的IndexedDB或javascript对象存储?

其中我允许用户在每次修改时操作图像并保存图像的“撤消”版本。这个'撤消状态'作为base64图像数据存储在javascript对象中。

这样以前的版本可以稍后检索。它工作得很好,但是我担心如此直接在内存中存储这么多的图像。

我不需要在用户访问之间保持这些撤消状态,只有在用户实际操作图像时才需要存储。

indexedDB是一个更好的选择来存储这些多个图像?如果是这样,为什indexedDB在哪里存储数据,它直接在浏览器内存中?如果是这样,以我现在的方式直接存储在JavaScript对象中会有什么不同?总之,我将相同图像的多个版本存储为base64数据,目前直接存储在javscript对象中供以后访问。有没有更好的方式临时存储这个数据客户端?

回答

1

这有点迟,但这是我刚刚遇到相同的情况后才发现的。 IndexedDB最适合于您可能需要在某个时候查询的大量(r)数据。 IndexedDB还允许使用localstorage提供的5MB以上的“safezone”。 (当然,有一些浏览器问题,并且要查看哪个浏览器支持什么,请按照下面的jstore链接。)

数据文件在哪里?据我所知,任何本地存储内容都存在于Web浏览器的临时目录中,或者取决于您的操作系统,在某些本地App Data目录中。我还没有测试过,但由于本地存储类似于cookie,因此两者都是“网页浏览器的一部分” - 这是有道理的。 (另外,在Firefox中你可以用Firebug直接检查本地存储的内容。)

因此,基于我的快速研究(意思是它并不全面),我发现localstorage和IndexedDB都不存储数据在记忆中。请纠正我,如果我错了!

这里是一个网站,介绍更多关于localstorage和IndexedDB的信息。该网站还设有jstore.js,插件采取各种浏览器中合适的位置存储数据的护理:

http://www.jstorage.info/ 

除此之外,还有一个有趣的文章,称在IndexedDB的“存储图像和文件“在:

https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/ 

有一个在在Mozilla网站一些好的信息:

https://developer.mozilla.org/en-US/docs/DOM/Storage#Storage_location_and_clearing_the_data 

至于Firefox和Chrome,它指出:”在Firefox中的DOM存储数据存储在profile文件夹中的webappsstore.sqlite文件中(还有chromeappsstore.sqlite文件用于存储浏览器自己的数据,特别是对于起始页 - about:home,但可能用于具有“about:”URL的其他内部页面)。 “

要真正理解将图像存储在localstorage或IndexedDB中会发生什么情况,我虚心推荐检查这些链接并遵循这些文章中的其他链接,尤其是Mozilla中的链接。

+0

大王牌答案。非常感谢。迟到总比不到好! – gordyr 2012-12-18 18:25:42