如何仅在数据更改时取消缓存数据

How to go about uncaching data only when the data changes?

本文关键字:数据 取消 缓存 何仅      更新时间:2024-01-23

我有一个SCORM(eLearning)web应用程序(javascript/html),它通过ajax请求从xml文件加载内容。这些xml文件是从drupal构建的CMS(内容管理系统)生成的,因此内容每隔一段时间就会发生变化。

由于内容(文本、图像)很少更改,我希望大部分时间都将数据缓存在用户浏览器中,但在内容更新时则不然。目前,我有一个cachebuster字符串,当任何内容更新时,它会被更新。当加载这些文件时,我会在url中使用该字符串(例如,路径/to/content.xml?uncache=RANDOMSTRING)。

然而,现在我遇到了一个问题,Firefox在客户端服务器上陷入重定向循环(因为cachebuster字符串?)。所以我做了一些搜索,发现这不是取消缓存数据的最佳方法。

有人在这个舞台上有经验吗?我想听听你对此事的看法。。

编辑(更多信息):除了受限于应用程序数据的SCORM API之外,Web应用程序无法与主机服务器通信。它可能无法与第三方服务器通信,因为它也可能在内部网中。基本上,主机服务器加载索引文件,然后我的应用程序完成它的任务。它加载一个"结构文件",其中包含有关应用程序的信息,并具有更新的cachebuster字符串(本质上,这是dferraro下面提到的版本字符串)。

您可以在客户端上跟踪"版本号"或令牌。。然后有一个定时器,每隔一段时间就会触发一次,以获取最新的"版本号"。如果发生更改,则重新刷新所有数据。这将是一种"轮询"方法,很可能是满足您需求的最佳解决方案。

如果您的需求需要比轮询方法更强大的解决方案,您可以采取"推送"方法。根据你的堆栈,你可以使用一些更智能的技术让你的服务器自动通知你的客户端代码更新。这方面的例子包括PokeIn、SignalR甚至Service Broker。