JavaScript变量在哪里缓存?有没有办法更有效地手动缓存?

时间:2013-12-15 03:45:22

标签: javascript caching

现在在我继续之前,这更像是我的好奇心。我喜欢修补,即使它不是网络标准中“最聪明”的东西,做实验也很有趣。

现在我正试图看看我是否可以通过mongodb的网络套接字在base64中提供图像(我知道这很疯狂)。总体而言,获取图像的速度要快得多,但是浏览器永远不会缓存它,因为它不是静态资源。

我正在制作的应用程序不需要处理重新加载,如果有刷新,我可以重新下载内容。

所以它让我想知道JavaScript保存变量的位置,我会假设在内存中,但如果是这样的话,内存中的20+ base64图像会超出顶部以迫使客户端处理。它在磁盘中吗?我不知道在哪里可以得到答案,这就是我在这里的原因。有点怀疑它在磁盘中,但确保浏览器不会过度使用内存是有意义的。

还有应用程序缓存,这可能非常有用,但前提是我可以在其中存储字符串。

localStorage是完美的,但10mb的限制几乎消除了它。

总的来说,我想看看是否有一种很好的方法可以从JavaScript安全地缓存手动创建的静态资源。

这个问题被标记为不清楚,上述意见总结了它。我希望这可以帮助一些人,如果不是这里,它会被改写。

浏览器根据http请求自然缓存,有没有办法在客户端计算机上安全地缓存像base64图像这样的长字符串,即使它意味着最新的“不稳定”html5 / javascript方法。

希望为那些困惑的人清除它。

3 个答案:

答案 0 :(得分:1)

正如我在重新打开问题之前在评论中指出的那样,我会建议使用idb.filesystem.js,这样做的好处是在重新加载后你仍然可以缓存文件。所以你需要构建一些E-TAG / last修改过的系统。这里唯一的缺点是你需要indexedDB支持slightly limited(特别是IE9缺失)。

或者,您也可以“信任”浏览器以进行每个会话的缓存。现代浏览器应该做一个合理的工作,但是每当有人打开相关应用程序时你就必须重新检索它。

而且要明确一点,使用localStorage并不是一个好主意,也不应该用于此类行为。另请注意,localStorage会在您的网站打开时将所有变量加载到内存中,这也是存储空间受限的原因。

答案 1 :(得分:0)

也许你可以在会话存储中存储一个blob网址,但是我不确定在文件卸载时或会话结束时是否销毁了一个blob网址(W3C标准与之间似乎存在差异)浏览器真正做了什么)。

答案 2 :(得分:0)

  

所以它让我想知道JavaScript保存变量的位置,我会假设在内存中,但如果是这样的话,内存中的20+ base64图像会超出顶部以迫使客户端处理。它在磁盘中吗?我不知道在哪里可以得到答案,这就是我在这里的原因。有点怀疑它在磁盘中,但确保浏览器不会过度使用内存是有意义的。

请记住,大多数现代的面向消费者的操作系统使用某种形式的虚拟内存,如swap partitionpage file,以便在内存不足时存储内容。如果事情不适合物理内存,它们就会被拖到磁盘上。

换句话说,如果您只需要这些“缓存”图像在一个页面视图的持续时间内持续存在,您几乎可以将它们留在JavaScript变量中而不用担心它。