【发布时间】:2011-08-14 10:03:00
【问题描述】:
我想不出一个好的标题,所以希望可以。
我正在做的是创建一个离线 HTML5 网络应用程序。 “出于某些原因”我不希望将某些文件放在缓存清单中,而是希望将内容放在 localStorage 中。
所有测试均在 Google Chrome for Mac/Mac OS 10.6.6 中完成
我有 4 个 .JSON 文件,它们的总大小正好是 3,120,792 字节。在第一次访问(在线)应用程序时,我将下拉此 JSON 内容并将其放在一个字符串变量中,例如 str。在存储 JSON 字符串之前,我将剥离所有 \n 和 \t ,并将 \" 替换为 ' ,以最小化字符串长度。
这里是字符串长度(Chrome 控制台中的 str.length):
original str : 3,117,764 (this is a concatenation of the contents of the 4 JSON files)
reformatted JSON: 2,732,249 (not too shabby - should save me a few bytes)
但是,现在当我尝试将此字符串存储在 localStorage 中时,我收到一个错误,指出我已超出缓存大小 (Error: QUOTA_EXCEEDED_ERR: DOM Exception 22)。但是此页面没有缓存任何其他内容(我已手动删除了所有 Google Chrome 缓存文件)。
为什么会这样?
存储在缓存中时字符串的大小是多少?
如何最小化这个大小以充分利用 localStorage?
编辑添加:
我尝试只将字符串的 1,000,000 个字符保存到 localStorage (localStorage.setItem('x',str.substr(1,1000000))。当我检查 Chrome 缓存文件夹中的 localStorage 文件大小时,它是 2MB。这是一个 sqlite 数据库。看起来浏览器正在使用实际的 localStorage 数据库大小,而不是存储在其中的数据的大小。这当然很糟糕,但可能是标准行为。我猜你可以在 localStorage 中存储的最长字符串大约是 2,500,000 个字符?
【问题讨论】:
-
diveintohtml5.org/storage.html#limitations 说你应该有 5mb,其他 stackoverflow 问题证实了这一点。编写一个循环、存储 1 个字符、将其拉出、存储 2 个字符等,直到达到限制怎么样?
-
谢谢,布鲁斯。我知道 5mb 的限制,但我很困惑,因为我只提供 localStorage 3mb。我没有考虑到 sqlite 的“开销”。...顺便说一句,你的想法很有趣,我想我会尝试一下,只要看看它有多慢 :) j/k :)跨度>
标签: javascript caching local-storage