【问题标题】:HTML localStorage setItem and getItem performance near 5MB limit?HTML localStorage setItem 和 getItem 性能接近 5MB 限制?
【发布时间】:2011-04-13 04:38:10
【问题描述】:

我正在构建一个使用 HTML localStorage 的小项目。虽然我还没有接近 localStorage 的 5MB 限制,但我还是决定进行压力测试。

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

然后我非正式地定时执行 setItem 和 getItem using the javascript Date object 和事件处理程序(将 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 的相关细节,以解释跨浏览器的效率和延迟的巨大差异?

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

谢谢!

【问题讨论】:

  • 您介意展示您使用的代码吗?在我的负载测试中,我获得了比这更高的速度,但我从未测量过数据库的底层大小。

标签: html webkit local-storage gecko


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多