本节书摘来自异步社区《web性能实践日志》一书中的第2章,第2.4节,作者【加拿大】stoyan stefanov,更多章节内容可以访问云栖社区“异步社区”公众号查看
这篇文章一经发表就引发了大量围绕localstorage性能的讨论。讨论最开始出现在mozilla 的chris heilmann的博客文章中,题为“localstorage没有简单的解决方案”。在文章中,chris认为localstorage作为一个整体存在性能问题。在很多博文讨论(其中也包括我的)之后,我最终能够联系上firefox负责实现localstorage的工程师jonas sicking。事实上,localstorage所存在的性能问题并不只是比从对象读取数据花费时间长一些那么简单。问题的关键是,localstorage是一个同步api,这本身就使浏览器实现这个api时捉襟见肘。所有的localstorage数据都存储在磁盘文件上。这意味着,为了让您可以用javascript访问这些数据,浏览器必须先将该文件读取到内存中。当读取操作发生时性能问题便产生了。当第一次访问localstorage就可能产生性能问题,但在随后的读取操作中浏览器有可能会冻结。在处理少量数据时,这可能不是一个大问题,但如果你已经达到5 mb限制时,就会有明显的影响。firefox采纳的另一种解决方案,是在加载页面的同时读取localstorage数据。这将确保之后对localstorage的访问最快,并有可预测性。这种方法的缺点是对页面加载时间造成不利影响。到我写这篇文章之时,这一问题仍然没有被解决。有人呼吁用一个全新的api来代替localstorage,其他的人则试图修复现有api的问题。不管发生什么情况,不久的将来仍会有客户端数据存储领域的更多研究。不管发生什么情况,最近一段时间内,我们仍然需要在客户端数据存储方面做更多的研究。