如何将“缓存依赖性”设置为本地存储

时间:2013-12-23 11:47:26

标签: angularjs local-storage web-storage

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

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

现在任何人都可以建议我们如何在客户端设置缓存依赖关系,这样当服务器中的数据发生变化时,本地存储就会失效(强制从服务器重新获取数据)。

目前在测试环境中,我们不得不要求测试人员在每次发布时清除浏览器缓存。不能在生产中采用这种方法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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

初始化应用时,请将本地存储版本与App.version进行比较。

如果不同,请清除本地存储空间并重新渲染,重新加载,重新初始化或为应用程序执行任何操作。

要处理用户在实施此行为之前使用过您的应用的情况,只需确保它在本地存储中找不到本地存储时也会清除本地存储。


与评论有关的其他几点说明。

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

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

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

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

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

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

    此处的简单解决方案是在资源网址末尾添加某种版本号,以便浏览器请求application.min.js?v=2而不是application.min.js?v=1