会话存储和性能

时间:2011-12-06 18:24:09

标签: javascript session-storage

我有一个包含与用户UI相关的数据的对象。目前,数据以json的形式出现,我运行JSON.parse来评估对象并相应地生成一些HTML。

我正在考虑将json字符串存储在本地会话存储(而不是本地存储)中,并在每次需要使用新HTML更新UI时调用它。这样,如果用户在同一浏览器中打开另一个页面,则所有页面的所有HTML都将是相同的。

现在,对象存储在内存中,用户在UI上的操作与对象修改之间的交互运行得很快。如果我将其序列化并存储在会话存储中,浏览器会将数据存储在RAM中还是存储在硬盘驱动器上并使页面变慢?

2 个答案:

答案 0 :(得分:17)

我做了这个小测试FF 32,Chrome 37,IE 11.只是为了好玩。

console.clear();
var s = new Date();
for(var i=0; i < 100000; i++)
{
  sessionStorage.item = i.toString();
}
var e = new Date();
console.log("session: " + (e - s) + " ms");

s = new Date();
var mem;
for(var i=0; i < 100000; i++)
{
  mem = i.toString();
}
e = new Date();
console.log("mem: " + (e - s) + " ms");

s = new Date();
for(var i=0; i < 100000; i++)
{
  localStorage.item = i.toString();
}
e = new Date();
console.log("local: " + (e - s) + " ms");
console.log('Done');

FF

  • session:830 ms
  • mem:92 ms
  • local:1156 ms

  • session:2852 ms
  • mem:147 ms
  • local:2893 ms

IE

  • session:977 ms
  • mem:81 ms
  • local:15062 ms

完成测试后,浏览器的窗口冻结了几秒钟,CPU +磁盘活动增加(由localStorage引起)。

答案 1 :(得分:2)

取自html5规范:

  

浏览上下文的生命周期可能与实际用户代理进程本身的生命周期无关,因为用户代理可能支持在重新启动后恢复会话。

这意味着浏览器可以将此信息存储到磁盘。

性能将取决于特定于浏览器和特定于操作系统的实现。但是,获取此信息不太可能成为瓶颈。