4

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

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

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

4

2 回答 2

24

我做了这个小测试 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');

法郎

  • 会话:830 毫秒
  • 内存:92 毫秒
  • 本地:1156 毫秒

铬合金

  • 会话:2852 毫秒
  • 内存:147 毫秒
  • 本地:2893 毫秒

IE

  • 会话:977 毫秒
  • 内存:81 毫秒
  • 本地:15062 毫秒

Safari(不同设备)

  • 会话:380 毫秒
  • 内存:21 毫秒
  • 本地:248 毫秒

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

于 2014-10-08T20:02:43.437 回答
2

取自 html5 规范:

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

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

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

于 2011-12-06T18:33:05.200 回答