我的意思是 一个key对应的value是一个json数组 每个json都有图片转成的data:img/png 这个图片转换后很大的 所以相应的这个key对用的value数据量很大 其实就是字符串很长 这样适合吗?谢谢。
localStorage是有容量限制的。
W3C HTML5 Web Storage :
User agents should limit the total amount of space allowed for storage areas, because hostile authors could otherwise use this feature to exhaust the user's available disk space.
不同浏览器的容量限制不同,各个浏览器的支持与限制可以参考这个网站。
个人觉得用localStorage来存储图片不是很合适。
为什么不用IndexedDB(WebSimpleDB/Indexed Database API)呢?
你这个情况有几点特别适合用Indexed Database API:
- 对于大多数浏览器implementation,IndexedDB给的quota似乎比localStorage高
- 你的是个json数组(一个对象),而IndexedDB是设计给结构化数据使用的,可以做在数组的某个字段上索引。而localStorage只适合存储字符串,不适合存储结构化的数据。这样你也不必把性能浪费在json.stringify上
- 支持localStorage的浏览器大多支持IndexedDB
- 不像WebSQL是要淘汰的技术,IndexedDB以后只会得到更广泛支持
- 你要存储图片。而IndexedDB的最新implementation是支持存储binary data的。这样的话图片就不必先base64转换成data URI,白白浪费多一半空间
当然缺点也是有的:IndexedDB使用起来复杂很多。可以参照 http://stackoverflow.com/questions/5924485/how-is-indexeddb-conceptually-different-from-html5-local-storage
如果想继续使用localStorage,答案是:
单条value没有长度限制,但是每个站点使用总量有限制(参照http://stackoverflow.com/questions/8345979/is-there-a-limit-to-the-key-length-for-localstorage)。
限制因浏览器而不同,常常会是2.5M(参照http://stackoverflow.com/questions/2989284/what-is-the-max-size-of-localstorage-values),或者可以自己测试(参照http://arty.name/localstorage.html)。
如果是Chrome插件的话,可以在manifest里开启unlimitedStorage,享用更大的quota。