HTML localStorage setItem 和 getItem 性能接近 5MB 限制?

标签 html webkit local-storage gecko

我正在构建一个使用 HTML localStorage 的小项目。虽然我离 localStorage 的 5MB 限制还差得很远,但我还是决定进行压力测试。

本质上,我将数据对象加载到单个 localStorage 对象中,直到它略低于该限制并且必须请求设置和获取各种项目。

然后我非正式地为 setItem 和 getItem 的执行计时 using the javascript Date object和事件处理程序(绑定(bind) get 和 set 到 HTML 中的按钮,然后单击 =P)

性能非常糟糕,请求耗时 600 毫秒到 5,000 毫秒,最糟糕的情况下内存使用量接近 200mb。这是在 MacOSX 上使用单个扩展程序 (Google Speed Tracer) 的 Google Chrome。

在 Safari 中,它基本上总是 >4,000 毫秒。

Firefox 是一个惊喜,几乎没有超过 150 毫秒的东西。

这些基本上都是在空闲状态下完成的——没有 YouTube (Flash) 妨碍,没有很多标签(只有 Gmail),除了后台进程 + 浏览器之外没有打​​开任何应用程序。一旦出现内存密集型任务,localStorage 也会按比例减慢速度。 FWIW,我运行的是 2008 年末的 Mac -> 2.0Ghz Duo Core 和 2GB DDR3 RAM。

===

所以问题:

  1. 有没有人针对 localStorage get 和 set 针对各种不同的键和值大小以及在不同的浏览器上进行过某种基准测试?
  2. 我假设 Firefox 与其他浏览器之间在延迟和内存使用方面的巨大差异是 Gecko 与 Webkit 的问题。我知道可以通过深入研究这些代码库找到答案,但我绝对想知道是否还有其他人可以解释有关在这两个引擎上实现 localStorage 的相关细节,以解释不同浏览器在效率和延迟方面的巨大差异?

不幸的是,我怀疑我们是否能够解决它,但至少可以了解浏览器在当前状态下的局限性。

谢谢!

最佳答案

浏览器和版本成为这里的主要问题。问题是,虽然有所谓的“基于 Webkit”的浏览器,但它们也添加了自己的补丁。有时它们会进入主要的 Webkit 存储库,有时则不会。关于版本,浏览器总是在移动目标,因此如果您使用测试版或夜间构建,这个基准可能会完全不同。

然后是整体用例。如果您的用例不是常态,问题就不会那么明显,也不太可能被注意到和解决。即使有补丁,浏览器供应商也有很多问题需要解决,因此它有可能被设置为另一个构建(同样,夜间构建可能会产生不同的结果)。

老实说,最好的做法是在适当的浏览器邮件列表/论坛上讨论这些结果(如果尚未解决)。人们将更有可能进行测试并查看结果是否匹配。

关于HTML localStorage setItem 和 getItem 性能接近 5MB 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5644461/

相关文章:

javascript - 如何编辑本地存储值 react ?

html - 无法停止自动播放 slider 中的 youtube 嵌入式视频

javascript - 如何使用 angularJS 显示从 json 获取的完整路径 url 的图像?

css - Webkit 绝对定位按钮一直延伸

javascript - 为什么 Internet Explorer 会在存储数据的窗口上触发窗口 "storage"事件?

javascript - 本地存储-Jquery

javascript - 为什么我不能用 jQuery 删除这些 div?

javascript - 以密码格式屏蔽信用卡号码的某些数字

cocoa - 为什么我的 WebView 不显示我指定的 URL?

ipad - 清除您在 iPad 上 "Add to your Home screen"的网站的应用程序缓存