如何确保用户运行的是最新版本的应用程序,而不是缓存的版本
How to ensure that users are running most up-to-date version of an application instead of a cached version
我们正处于开发应用程序的早期阶段,因此我们会定期发布应用程序的更新以修复错误或添加新功能。 但是,我们的用户经常意外运行应用程序的缓存版本,而不是发布后的最新版本。 我们的用户不是技术人员,我们无法通过清除缓存来逐步执行所有这些用户。 此外,我们不想设置无缓存,因为我们的应用程序相当大。 从我在其他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]
。查询字符串毫无意义;它仅充当浏览器的缓存破坏程序。
您可以使用任何您想要的值而不是哈希,例如版本(在另一个答案中建议(,但我更喜欢哈希,因为它可以独立于构建标签完成,可以在修补程序/猴子修补服务器时使用简单的工具就地完成,并且未更改的文件可以继续从浏览器缓存中提取。
根据您的平台,有多种方法可以使用现有工具完成此任务。它通常作为构建过程中捆绑/缩小任务的一部分完成。
- 在web应用程序中的新搜索中重新加载搜索结果(不带jQuery)
- PhpWindows 8.1版本上的Javascript web应用程序
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 如何在ChromeOS上从Chrome应用程序配对新的蓝牙设备
- 如何为略有不同的不同版本的web应用程序构建代码
- 应用程序版本插件问题
- Phonegap应用程序数据库版本在更新后保留
- 当我们打开ADF应用程序的同一网页的不同版本时,如何让浏览器请求java脚本
- 在通过phonegap 2.9.0制作的应用程序中,在较低版本的android(如2.3.5)中面临问题
- 扩展成员应用程序,包括新的路线,现在没有任何渲染
- Phonegap内部版本:应用程序无法在iOS上运行
- 获取模板是用我的Node.JS应用程序的新版本Handlebars错误预编译的
- 此api版本不支持onedrive文件选择器aadsts70001应用程序
- 如何在应用程序中读取应用程序的版本
- 如何在JMVC/Can.js中处理应用程序的版本控制
- Git:如何在目录结构方面分离后端Rest Api和前端应用程序的版本控制
- 安卓系统-要求服务器提供新版本的应用程序
- 在HTTP请求期间识别客户端web应用程序的版本
- 单页应用程序的版本控制和路由
- 如何在同一设备上使用Cordova获得其他安装的应用程序的版本