如何确保用户运行的是最新版本的应用程序,而不是缓存的版本

How to ensure that users are running most up-to-date version of an application instead of a cached version

本文关键字:应用程序 新版本 版本 缓存 最新版 何确保 确保 用户 运行      更新时间:2023-09-26

我们正处于开发应用程序的早期阶段,因此我们会定期发布应用程序的更新以修复错误或添加新功能。 但是,我们的用户经常意外运行应用程序的缓存版本,而不是发布后的最新版本。 我们的用户不是技术人员,我们无法通过清除缓存来逐步执行所有这些用户。 此外,我们不想设置无缓存,因为我们的应用程序相当大。 从我在其他SO帖子中看到的,以编程方式清除缓存不是一种选择。 有什么实际的解决方案吗?

一个技巧是在URL中放置一个不同的参数。这应该会强制浏览器下载新版本。

例如:

<script src="main.js?version=1">

和:

<script src="main.js?version=1.1">

等等。甚至是更长的随机字符串,如 GUID,不应重复。

我自己不是这种方法的忠实粉丝,但它快速、简单且常见。

如果您对服务器在此类文件上设置的到期时间具有完全访问权限,并且您知道它总是会发生变化,则可以告诉浏览器不要将其缓存版本存储很长时间。

例如:

ExpiresByType text/javascript           "access plus 1 day"

将其放在具有正确权限的服务器上的.htaccess文档中将告诉浏览器仅存储任何JS的缓存版本24小时。

取决于您的平台。一般来说,一个有效的策略是重写 HTML 页面中包含的任何脚本中使用的 URL,以包含被引用文件的哈希,并将所述哈希作为查询字符串附加。这可以作为生成任务完成。

因此,在您的项目中,您可能有一个包含以下内容的 HTML 文件:

<script type="text/javascript" src="js/myscript.js"></script>

您的构建后任务可能会扫描此 HTML 并解析引用的js/myscript.js,创建其内容的哈希,并将其重写为 js/myscript.js?v=[hash of js/myscript.js] 。查询字符串毫无意义;它仅充当浏览器的缓存破坏程序。

您可以使用任何您想要的值而不是哈希,例如版本(在另一个答案中建议(,但我更喜欢哈希,因为它可以独立于构建标签完成,可以在修补程序/猴子修补服务器时使用简单的工具就地完成,并且未更改的文件可以继续从浏览器缓存中提取。

根据您的平台,有多种方法可以使用现有工具完成此任务。它通常作为构建过程中捆绑/缩小任务的一部分完成。