2

我们正在使用来自 angularjs 的本地存储模块。

https://github.com/grevory/angular-local-storage

现在任何人都可以建议我们如何在客户端设置缓存依赖项,以便当服务器中的数据更改时本地存储无效(强制从服务器重新获取数据)。

现在在测试环境中,每次发布时我们都必须要求测试人员清除浏览器缓存。不能在生产中使用这种方法。

感谢您的帮助。

4

1 回答 1

4

在您的应用程序中设置版本号,并在用户访问时将其存储在本地存储中。

初始化应用程序时,将本地存储版本与App.version.

如果不同,请清除本地存储并重新渲染、重新加载、重新初始化或您需要为您的应用执行的任何操作。

要处理用户在您实施此行为之前使用您的应用程序的情况,只需确保它在开始时无法在本地存储中找到版本密钥时也清除本地存储。


只是一些与评论有关的进一步说明。

由于发生了不同的事情,我过去在本地存储方面遇到过问题。第 3 部分超出了问题的范围,但为了完整性值得一提。

  1. 新版本:应用程序源代码已更改,其存储的数据结构不同。例如,现在可能是 JSON.stringified。或者也许我们期待一个字符串,现在我们得到一个整数,这可能会破坏严格的类型检查。

    这是使用上述方法解决的。该应用程序已更改,因此该应用程序有一个新版本,并且它知道它不能信任从本地存储中检索到的不同版本的数据。

  2. 您描述的问题:服务器上的数据已更新,应用程序本地存储的副本已过期。

    我们如何告诉应用程序发生了变化?定期从服务器请求一些令牌,也许是时间戳,我们可以比较它以查看自上次访问数据以来是否发生了变化。这个问题讨论了许多不同的方法来做到这一点。

  3. JavaScript 本身发生了变化:我们有一个缩小的生产版本,现在有一个新版本,但用户仍然缓存了旧版本。当服务器期望与它现在从新构建接收的请求不同的请求时,这是一个问题。

    这里的简单解决方案是将某种版本号附加到资源 URL 的末尾,以便浏览器请求application.min.js?v=2而不是application.min.js?v=1.

于 2013-12-23T11:52:31.550 回答