6

我的问题与使用 localStorage 的性能挫折和可能的解决方法有关。据我了解(我对此不太确定),一旦在页面上看到对 localStorage 的引用(编译时间?),它就会阻塞线程并从磁盘读取数据以填充 localStorage 内存以供参考. 或者,如果域过去存储过数据,它可能会在磁盘上查找数据,因此它知道本地存储已经在那里使用。

在任何一种情况下,由于 localstorage api 是同步的,它会阻止线程从磁盘读取,让我们等待数据被读取,然后页面才能执行其他任何操作。假设我们在页面中插入一个 iframe,该页面以不同的域作为其源动态加载。如果我们使用这个 iframe 来通过 postMessage 进行所有本地存储的读取和写入,如本文所述,那么线程不是只有在加载 iframe 时才被阻塞吗?这是否为我们提供了使用本地存储的异步方法?还是我完全不在了?

4

1 回答 1

2

由于每个窗口和 iframe 在单独的浏览器执行上下文中运行(即它们都同时执行)——那么是的,这应该会让你通过 postMessage 异步 localStorage。显然,从不同域加载 iframe 与从同一域加载可能会对系统的安全性产生影响。虽然 postMessage 确实可以跨域工作,但我宁愿从我完全信任的域(即我自己的域)加载这个 iframe。

于 2012-09-18T06:52:40.240 回答