【问题标题】:cache json until a miss then refresh it?缓存json直到错过然后刷新它?
【发布时间】:2017-08-17 11:15:13
【问题描述】:

对于我的网站,我喜欢缓存一些数据(它可以达到 1MB 甚至更多)。我想缓存 json 直到 1)这是一两天前 2)搜索失败,我想更新它(但如果它

我该怎么做?我正在考虑做$.get('/my.json?ts=TIME'),但我不知道这是它自己的文件还是覆盖/更新/my.json

【问题讨论】:

  • 对于客户端缓存,您可能需要localstorageindexeddb 之类的东西。我自己都没有用过太多,所以我会给更了解它的人留下一个更好的答案。
  • @TheJim01 我想这是一个选择,但可能有点矫枉过正。他们也可能有几个 KB 的限制,所以我可能无法使用它
  • localstoragesessionstorage 实际上有 10MB 的组合空间限制。 indexeddb 因浏览器而异,但在最低端,您在桌面上看到 10MB,在移动端看到 5MB。即使有这些“限制”,它也可以请求允许使用更多,在某些情况下最多可以使用一半的硬盘。换句话说:除非您的数据在数兆字节范围内,否则不要担心。

标签: javascript json http caching


【解决方案1】:

就像 TheJim01 所说,您可以使用 localstorage 或 indexeddb。我认为大多数浏览器都允许在 localstorage 或 indexeddb 中存储 1MB 的数据,但我对那里的人了解不多。不过,快速谷歌搜索似乎支持这一点。

如果你想依赖浏览器缓存,我会提出这样的方法:

  1. 服务器端设置Cache-Control: max-age=86400。这将确保它不会被缓存超过 1 天。
  2. 在 localStorage 中保留一个随机密钥。每次您需要清除缓存时,您只需更改此随机密钥。在您的 $.get() 通话中使用它。

客户端看起来像这样::

var randomKey = localStorage.getItem('cacheKey');

if (!randomKey || forceUpdateCache) {
    randomKey = '' + Math.random();
    localStorage.setItem('cacheKey', randomKey);
}

$.get('/my.json?v=' + randomKey);

希望对您有所帮助。

编辑:如果您上次更新 lastUpdated localStorage 密钥。

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多