我有一个MVC.NET应用程序,它使用Knockout.js(+ knockout.mapping)来处理一些级联下拉菜单。这些数据来自对外部服务的WebAPI调用。碰巧这个服务需要一个2小时后到期的身份验证令牌,所以我让MVC应用程序将来自服务的数据放在System.Web.Caching.Cache中并从那里返回它,除非令牌已经过期它将抓住它它再次来自服务。 这工作正常。 但是,当我需要将其转换为View时,我目前正在使用以下方法,即具有ViewModel的属性,我将该服务/缓存数据分配给,然后在视图中执行此操作:
var model = new ViewModel(@Html.Raw(Json.Encode(Model.ReferenceData)))
ko.applyBindings(model);
其中Model.ReferenceData
是来自服务的数据。
再次,这工作正常,但......事情就是这样,页面然后在每个请求上都将所有Json数据转储到其中。
我想为ReferenceData使用外部JS文件,因为至少它可以被浏览器缓存并减少未来请求中页面的重量。
但是,我认为生成JS文件的开销并不小,而且 - 我真正需要的是生成一个指向该文件的链接,其变化方式与内置MVC捆绑的js文件的工作方式大致相同 - 生成带有查询字符串的链接。
我的问题是:有一种简单的方法吗?
当我第一次填充缓存时,我确实可以生成一个js文件并从View中引用它,但正如我所说的那样,每次刷新时都要更改它的链接 - 或者至少确定数据是否在它已经改变并且只有那时才更新它。问题所在。
对此的任何见解都会有很大的帮助
由于
纳特
答案 0 :(得分:0)
重新生成文件时,请更新文件中的版本以及静态变量。来自客户端的下一个请求使用新密钥获取新版本。
现在,如果要更新新版本的客户端,则必须使用双向协议,如Web套接字或长轮询。