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

HTML localStorage setItem和getItem性能接近5MB限制?,html,webkit,local-storage,gecko,Html,Webkit,Local Storage,Gecko,我正在构建一个利用HTML本地存储的小项目。虽然我的本地存储容量远没有达到5MB的限制,但我还是决定做一个压力测试 基本上,我将数据对象加载到单个localStorage对象中,直到它略低于该限制,并且必须请求设置和获取各种项目 然后,我非正式地对setItem和getItem以及事件处理程序的执行进行计时(将get和set绑定到HTML中的按钮,然后单击=p) 性能非常糟糕,请求时间在600ms到5000ms之间,在最糟糕的情况下,内存使用率接近200mb。这是在MacOSX上的Google

我正在构建一个利用HTML本地存储的小项目。虽然我的本地存储容量远没有达到5MB的限制,但我还是决定做一个压力测试

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

然后,我非正式地对setItem和getItem以及事件处理程序的执行进行计时(将get和set绑定到HTML中的按钮,然后单击=p)

性能非常糟糕,请求时间在600ms到5000ms之间,在最糟糕的情况下,内存使用率接近200mb。这是在MacOSX上的Google Chrome中使用的一个扩展名(Google Speed Tracer)

在Safari中,基本上总是>4000ms

Firefox是一个惊喜,在150毫秒以上几乎什么都没有

这些基本上都是在空闲状态下完成的——没有YouTube(Flash)阻挡,没有很多标签(只有Gmail),除了后台进程+浏览器外,没有其他打开的应用程序。一旦出现内存密集型任务,本地存储的速度也会相应降低。FWIW,我正在运行一个2008年末的Mac->2.0Ghz双核,带有2GB DDR3 RAM

===

因此,问题是:

  • 是否有人针对不同的键和值大小以及在不同的浏览器上的localStorage get和set进行过类似的基准测试
  • 我假设Firefox和其他浏览器在延迟和内存使用方面的巨大差异是Gecko vs Webkit的问题。我知道答案可以通过深入研究这些代码库来找到,但我肯定想知道是否有其他人可以解释这两个引擎上本地存储实现的相关细节,以解释不同浏览器在效率和延迟方面的巨大差异
  • 不幸的是,我怀疑我们是否能够解决这个问题,但我们至少可以更深入地了解浏览器在当前状态下的局限性


    谢谢

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

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


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

    您是否介意显示您使用的代码?在我的负载测试中,我得到了比这高得多的速度,但我从未测量过DB的基本大小。