1

我的应用程序包括照片处理/编辑器部分。

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

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

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

indexedDB 会是存储这些多张图像的更好选择吗?如果是,为什么?indexedDB 将其数据存储在哪里,是直接在浏览器内存中吗?如果是这样,以我目前的方式直接存储在 javascript 对象中会有什么不同吗?

总而言之,我将同一图像的多个版本存储为 base64 数据,目前直接在 javscript 对象中供以后访问。有没有更好的方法来临时存储这个数据客户端?

4

1 回答 1

2

有点晚了,但这是我在遇到同样情况后才发现的。IndexedDB 最适合您在某些时候可能需要查询的大量数据。IndexedDB 还允许超过 localstorage 提供的“安全区”5MB。(当然也有一些浏览器的问题,要查看哪个浏览器支持什么,请点击下面的jstore链接。)

数据文件在哪里?据我了解,任何本地存储内容都存在于 Web 浏览器的临时目录中,或者取决于您的操作系统,存在于某个本地 App Data 目录中。我还没有测试过,但由于本地存储类似于 cookie——从某种意义上说,两者都是“网络浏览器的一部分”——这是有道理的。(此外,在 Firefox 中,您可以使用 Firebug 直接检查本地存储的内容。)

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

这是一个网站,它解释了有关 localstorage 和 IndexedDB 的更多信息。该站点还包含 jstore.js,这是一个插件,用于将数据存储在各种浏览器的正确位置:

http://www.jstorage.info/

除此之外,还有一篇有趣的文章,名为“Storing images and files in 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 存储数据存储在配置文件文件夹中的 webappsstore.sqlite 文件中(还有 chromeappsstore.sqlite 文件用于存储浏览器自己的数据,尤其是起始页 - 关于:home,但可能用于其他带有“关于:”URL 的内部页面)。

要真正了解将图像存储在 localstorage 或 IndexedDB 中会发生什么,我谦虚地建议查看这些链接并关注这些文章中的其他链接,尤其是来自 Mozilla 的文章。

于 2012-12-18T17:05:39.033 回答