2

T4MVC 有一个设置 AddTimestampToStaticLinks 它添加到 url 文件的最后更改时间:

/内容/nerd.jpg?2009-09-04T12:25:48

在开发过程中非常方便,因为经常更改的文件不会被浏览器缓存。但是我应该保留它以进行生产吗?它有多慢?我什至不确定它是如何工作的。谁能将“/Content/nerd.jpg?2009-09-04T12:25:48”转换为“/Content/nerd.jpg”?一些 IIS 模块?

4

1 回答 1

2

我应该保留它用于生产吗?

是的。它为您的用户提供与您在开发中获得的相同的好处。

它有多慢?我什至不确定它是如何工作的。

我没有时间安排,但就您的目的而言,它的速度可能可以忽略不计。它检查实际文件的最后修改日期,生成滴答计数差异的哈希,并使用字符串连接将其附加到 url。您可以检查自己,因为 t4 模板只是文本文件。在我拥有的版本中,它的代码如下所示:

static DateTime CenturyBegin=new DateTime(2001,1,1);
public static string TimestampString(string virtualPath) {
    if (!HostingEnvironment.IsHosted) return string.Empty;
    string filePath = HostingEnvironment.MapPath(virtualPath);
    return Convert.ToString((System.IO.File.GetLastWriteTimeUtc(filePath).Ticks-CenturyBegin.Ticks)/1000000000,16);            
}

如果它对您的目的不够快,您可以修改将时间戳附加到对您来说足够快的方法。不太精确但速度更快的方法就像程序集内部版本号或您在构建过程中手动更改的东西。坚持使用默认值将使只有已修改的文件才会被缓存无效。

谁能将“/Content/nerd.jpg?2009-09-04T12:25:48”转换为“/Content/nerd.jpg”?

使用 HTTP,您可以将查询字符串附加到任何请求。大多数服务器实现只是简单地忽略静态文件的查询字符串,但是它们将不同的查询字符串视为单独的请求,因此一旦进行更新就会得到更新。

即使您不更改文件,您也可以通过简单地将 url + 查询字符串更改为客户端没有缓存的内容来强制浏览器重新加载内容。

于 2011-08-20T12:02:44.843 回答