会话存储和性能

fre*_*hie 4 javascript session-storage

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

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

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

Jar*_*cek 19

我做了这个小测试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');
Run Code Online (Sandbox Code Playgroud)

FF

  • 会话:830毫秒
  • 记忆:92毫秒
  • 当地时间:1156毫秒

  • 会话:2852毫秒
  • 记忆:147毫秒
  • 当地时间:2893毫秒

IE

  • 会话:977毫秒
  • 记忆:81毫秒
  • 当地时间:15062毫秒

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


Ric*_*lly 3

摘自 html5 规范:

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

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

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

  • @frenchie,不,我不是。浏览器在关闭时*可能*会清除会话存储,但是由于浏览器也可能支持恢复会话,因此“因为用户代理可能支持在重新启动后恢复会话”这一行非常相关。 (2认同)