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

时间:2011-04-13 04:38:10

标签: html webkit local-storage gecko

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

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

然后我定时执行setItem和getItem非正式using the javascript Date object和事件处理程序(绑定get并设置为HTML中的按钮,只需单击= P)

表现非常可怕,请求时间在600毫秒到5,000毫秒之间,并且在更严重的情况下,内存使用量接近200mb。这是谷歌Chrome浏览器中的一个扩展程序(Google Speed Tracer),位于MacOSX上。

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

Firefox令人惊讶,几乎没有超过150毫秒。

这些都是基本上处于空闲状态 - 没有YouTube(Flash)阻碍,没有多少标签(只有Gmail),除了后台进程+浏览器之外没有应用程序打开。一旦内存密集型任务弹出,localStorage也会按比例放缓。 FWIW,我正在运行2008年末的Mac - > 2.0Ghz Duo Core,配备2GB DDR3内存。

===

所以问题:

  1. 有没有人针对localStorage获取和设置各种不同的键和值大小,以及在不同的浏览器上进行基准测试?
  2. 我假设Firefox之间的延迟和内存使用量差异很大,其余的是Gecko vs Webkit问题。我知道通过深入研究这些代码库可以找到答案,但我肯定想知道是否有其他人可以在这两个引擎上解释有关localStorage实现的相关细节,以解释浏览器中效率和延迟的巨大差异?
  3. 不幸的是,我怀疑我们是否能够解决它,但是越接近它就能理解浏览器在当前状态下的局限性。

    谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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