我的应用包括照片处理/编辑部分。
在其中,我允许用户在每次修改时操纵图像并保存图像的“撤消”版本。此“撤消状态”作为base64图像数据存储在javascript对象中。
这样可以在以后检索以前的版本。它工作得非常好,但我担心如此多的图像直接存储在内存中。
我不需要在用户访问之间保持这些撤消状态,只有在用户实际操作图像时才需要存储。
indexedDB是存储这些多个图像的更好选择吗?如果是这样的话? indexedDB在哪里存储它的数据,它是直接在浏览器内存中?如果是这样,以我目前的方式直接存储在javascript对象中会不会有什么不同?
总而言之,我将同一图像的多个版本存储为base64数据,目前直接存储在javscript对象中以供以后访问。有没有更好的方法来临时存储这个数据客户端?
答案 0 :(得分:2)
这有点晚了,但这是我在遇到同样情况后才发现的。 IndexedDB最适合您在某些时候可能需要查询的大量(r)数据。 IndexedDB还允许比localstorage提供的“safezone”5MB更多。 (当然,有一些浏览器问题,要查看哪些浏览器支持什么,请按照下面的jstore链接。)
数据文件在哪里?据我所知,任何本地存储内容都存在于Web浏览器的临时目录中,或者取决于您的操作系统,存在于某些本地App Data目录中。我还没有测试过,但是因为本地存储将类似于cookie - 从某种意义上说它们都是“Web浏览器的一部分” - 这才有意义。 (此外,在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存储数据存储在配置文件夹中的webappsstore.sqlite文件中(还有chromeappsstore.sqlite文件用于存储浏览器自己的数据,特别是在开始时) page - about:home,但可能是其他带有“about:”URL的内部页面。“
为了真正理解在localstorage或IndexedDB中存储图像时会发生什么,我谦虚地建议查看这些链接并按照这些文章中的其他链接进行操作,尤其是Mozilla中的链接。