C# 当客户端代码已经下载时,如何在SPA中“bust cache”?
我目前正在使用grunt将我的应用程序捆绑到一个版本化的负载中,该负载在下载之间破坏缓存。我现在要做的是当客户机已经下载了比特并且正在使用缓存的客户端代码时 我部署了1.0版 Bob下载v1.0 辛迪下载v1.0 我部署v1.1 Bob的缓存过期了,他下次访问我的站点时会得到v1.1 Cindy仍然有1.0版向1.2版服务器端代码发出AJAX请求 我想知道如何在6-hey上告诉Cindy的浏览器!你有旧代码!触发刷新 我的想法是——在每个请求的响应头中,包括响应来自的构建的日期和时间。但这意味着我需要在每个请求中访问DLL的属性。这可能吗 如果是这样,那么我可以将该日期/时间与客户机的UTC日期/时间进行比较,以确定是否需要刷新C# 当客户端代码已经下载时,如何在SPA中“bust cache”?,c#,asp.net-mvc,caching,single-page-application,durandal,C#,Asp.net Mvc,Caching,Single Page Application,Durandal,我目前正在使用grunt将我的应用程序捆绑到一个版本化的负载中,该负载在下载之间破坏缓存。我现在要做的是当客户机已经下载了比特并且正在使用缓存的客户端代码时 我部署了1.0版 Bob下载v1.0 辛迪下载v1.0 我部署v1.1 Bob的缓存过期了,他下次访问我的站点时会得到v1.1 Cindy仍然有1.0版向1.2版服务器端代码发出AJAX请求 我想知道如何在6-hey上告诉Cindy的浏览器!你有旧代码!触发刷新 我的想法是——在每个请求的响应头中,包括响应来自的构建的日期和时间。但这意味着
如果没有,正确的解决方案是什么?在require.js配置中,可以添加urlArgs属性:
require.config({
urlArgs: 'bust=@Revision@',
...
...
});
这将在请求的url末尾添加修订号
然后,您可以使用grunt任务将@Revision@替换为您的修订号。如果您正在使用teamcity for CI之类的工具,您也可以在那里使用,并将其替换为teamcity生成的实际版本号,您可以使用powershell执行此操作
请注意,在每次部署中,您都将强制客户机获取所有javascript文件,无论它们是否已更改。根据您的情况,这可能需要,也可能不需要。如果您希望更聪明一点,可以散列文件的内容并缓存这些服务器端,然后可以创建require.js path配置,将客户端名称映射到散列键。当文件内容更改时,散列将更改,从而强制仅为已更改的文件进行新下载
希望这有帮助