12

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

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

然后,我使用 javascript Date 对象和事件处理程序(将 get 和 set 绑定到 HTML 中的按钮并单击 =P)非正式地定时执行 setItem 和 getItem

性能非常糟糕,请求需要 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 vs Webkit 问题。我知道可以通过深入研究这些代码库来找到答案,但我绝对想知道是否有其他人可以解释有关在这两个引擎上实现 localStorage 的相关细节,以解释跨浏览器在效率和延迟方面的巨大差异?

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

谢谢!

4

1 回答 1

2

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

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

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

于 2011-05-11T19:51:43.197 回答