本节书摘来自异步社区《Web性能实践日志》一书中的第2章,第2.1节,作者【加拿大】Stoyan Stefanov,更多章节内容可以访问云栖社区“异步社区”公众号查看
第2章 localStorage读取性能
Web性能实践日志
作者:Nicholas Zakas
在Web开发人员使用的工具中,Web Storage(http://dev.w3.org/html5/webstorage/)迅速成为了HTML5新增的最受欢迎的功能。具体来说,localStorage提供了快速简单的客户端数据存储功能,可以跨多个会话存储数据,这使得localStorage在世界各地Web开发人员中被广为应用。通过使用简单的键值接口,我们看到很多网站以各种独特而有趣的方式应用localStorage这一技术。
Disqus(http://www.disqus.com/),是一个非常流行的反馈管理系统。它使用localStorage来实时保存您正在输入的评论。因此,即使有可怕的意外发生,你也可以重启浏览器,从出现问题之前的地方继续。
谷歌(http://www.google.com/)和Bing(http://www.bing.com/)用localStorage存储JavaScript和CSS,来改善他们的移动网站性能。
在我了解的案例中,Google/Bing的这种方式似乎越来越受人们的欢迎。部分原因是由于HTML5 application cache使用困难,部分原因是该技术得到了Steve Souders和其他人的青睐。事实上,随着我越来越多地和人们提及localStorage以及用它来存储UI相关信息是多么的有用,我发现更多人开始尝试这种技术。
我发现一个令人费解的现象,人们在使用localstorage时有一个内定不成文的假设:从localStorage读取数据开销不大。我曾经从其他开发者那里听到传言说遇到异常的性能问题,所以我设计了一个实验来量化localStorage的性能特点,以确定用它读取数据的实际成本。
2.1 基准测试
不久前,我创建并共享了一个简单的基准测试,来测量从localStorage取值和从一个对象属性取值的性能。有人基于这个测试做了改良,并开发了更可靠的版本(http://jsperf.com/localstorage-vs-objects/10)。最终结果是:每个浏览器中,从localStorage读取数据比从对象属性中读取相同数据慢几个数量级。到底有多慢呢?请看图2-1所示(数字越高越好)。
看了这个图后,你可能会感到困惑,因为它似乎没有展示出从localStorage中读取数据的结果。事实上它被展现出来了,你看不到它的原因是这一数字实在太小,在图示比例上甚至不可见。除了Safari 5可以显示实际的localStorage的读取数据结果,所有其他浏览器的巨大差异使得你根本不可能在这张图上看到实际数据。当我调整y轴的值后,你才可以看到不同浏览器中的测量结果。
通过改变y轴的比例,现在你可以看到从local Storage和从对象属性读取数据的真实对比(见图2-2)。可以看出,结果仍然如此,几乎到了滑稽的程度,这是为什么呢?