我们正处于开发应用程序的早期阶段,因此我们会定期发布应用程序更新以修复错误或添加新功能。但是,我们的用户经常在发布后不小心运行应用程序的缓存版本而不是最新版本。我们的用户不是技术人员,我们无法通过清除他们的缓存来完成所有这些操作。此外,我们不想设置无缓存,因为我们的应用程序相当大。从我在其他SO帖子上看到的,以编程方式清除缓存不是一种选择。任何实际的解决方案?
答案 0 :(得分:4)
一个技巧是在URL中放置一个不同的参数。这应该强制浏览器下载新版本。
例如:
<script src="main.js?version=1">
并且:
<script src="main.js?version=1.1">
等等。或者甚至更长的随机字符串,如GUID,不应该重复。
我自己并不是这种方法的忠实粉丝,但它既快捷又简单。
如果您完全可以访问服务器在这些文件上设置的到期日,并且您知道它总是会发生变化,那么您可以告诉浏览器不要将其缓存版本存储很长时间。
例如:
ExpiresByType text/javascript "access plus 1 day"
将此文件放在具有正确权限的服务器上的.htaccess文档中会告诉浏览器只能在24小时内存储任何JS的缓存版本。
答案 1 :(得分:2)
取决于您的平台。一般来说,一个有效的策略是重写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]
。查询字符串没有意义;它只作为浏览器的缓存破坏者。
您可以使用您想要的任何值而不是哈希值,例如版本(在另一个答案中建议),但我更喜欢哈希,因为它可以独立于构建标签完成,可以使用简单的工具在适当的位置完成hotfixing / monkey修补服务器,可以继续从浏览器缓存中提取未更改的文件。
根据您的平台,有多种方法可以使用现有工具完成此任务。它通常是在构建过程中作为捆绑/缩小任务的一部分完成的。