2009-09-19 89 views
0

我试图确保我的ASP.NET MVC网站的访问者始终拥有最新的CSS和Javascript(而不是某些较旧的缓存版本)。确保客户端更新CSS/JavaScript

我试图通过在应用程序域启动时生成种子值来实现此目的,并自动将它附加到CSS和Javascript URL(所以现在而不是/Content/All.js,链接是/Content/All.js ?549238等)。

不幸的是我只是通过萤火发现通过调试,这造成现在一个完整的下载请求时间(新的“种子”的反应是在所有不再缓存,但我只是想先检查下载'更新'版本,但随后再次缓存/只检查是否有差异)。

我该如何实现我的目标,有没有更好的方法来做到这一点?我需要客户端总是请求最新的版本,但如果没有发生变化,然后缓存。

编辑:这似乎与我的页面通过SSL提供的事实有关。 I asked a follow up question here关于使用SSL启用客户端缓存。

回答

0

我认为你生成的种子值是一个随机数。将其替换为版本号,以便仅在应用程序的版本号更改时重新下载。

/Content/All.js?appVer1.5

,当你修改应用程序,你可以更改为类似

/Content/All.js?appVer1.6

+0

这不是随机的。正如我所说的,当应用程序域正在初始化时,它只会以静态方式生成一次。在w3wp进程的整个生命周期内,不能写入或更改超过一次。 – Alex 2009-09-19 07:28:46

+0

即使它没有真正回答我的问题......尽管是该领域的最佳/第一。 – Alex 2009-09-19 10:28:01

1

把版本号中的网址:foo.css?rev=348

- 编辑

你也可以使用你的构建工具(我实际上是用我写的一个自定义的东西来做到这一点)实现这个很平凡。

- 编辑

而且如果你的船浮筒,这是也是如此。

0
  1. 使用文件内容的校验和作为数字,如All-a2a69e19d8628b65cb935708d64d7337.js。这种方式只在脚本内容发生变化时才会改变。

  2. 创建一些负责生成JavaScript文件链接和/或<script>标记的机制。

这样,在你的ASP.NET页面中,有这样的事:

<asp:ScriptTag source="All.js"/> 

它得到替换为:

<script src="/All-a2a69e19d8628b65cb935708d64d7337.js" type="text/javascript"></script> 
+0

这有点可笑。为什么不使用最后修改日期,如果你打算这样做呢? – 2009-09-19 07:42:25

+0

因为,为了识别文件中的变化,文件的修改时间比其内容更不准确? – 2009-09-19 07:50:22

+0

我不认为在这种情况下准确性是一件大事。 – rahul 2009-09-19 07:54:00