19

如果您查看 Stackoverflow.com 的源代码,您会看到对他们的 css 文件的引用是:

<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />

这是如何完成的,以便他们可以通过查询字符串传递版本并提供正确的 CSS 文件?

4

4 回答 4

5

这篇文章(PHP/.htaccess 示例)解释了它背后的想法。基本上,您可以将上次修改文件的时间戳附加到文件名,但仍提供原始文件。这样每次保存新版本的 CSS 文件时,文件名都会改变,这将迫使浏览器下载新版本。这适用于多种文件,包括 CSS 和 JS 文件。(使用文件名的替代方法是使用查询字符串。)

一个 ASP.NET 示例是这样的:

public static string GetBreaker(string fileName)
{
    string cacheBreaker = null;
    try
    {
        if (fileName.StartsWith("~"))
        {
            fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName.Remove(0));
        }
        cacheBreaker = File.GetLastWriteTime(fileName).ToFileTime().ToString();
    }
    catch { }

    return string.IsNullOrEmpty(cacheBreaker) ? string.Empty : string.Format("?cachebreaker={0}", cacheBreaker);
}

您以这种方式在 MasterPage 中调用此方法:

<link href="<%= this.ResolveClientUrl("~/CSS/style.css") %><%=CacheBreaker.GetBreaker("~/CSS/style.css") %>"
            rel="stylesheet" type="text/css" />
于 2009-02-02T09:04:34.787 回答
4

这样您的浏览器就不会缓存 css 文件。并且使用版本号很方便,因为 css 文件可能在每个版本中都发生了变化。

这不是调用正确 css 文件的方法。该文件始终是相同的,但版本号使您的浏览器不以为然并再次获取它。

于 2009-02-02T09:02:23.043 回答
2

如果您想知道它是如何完成的,他们在之前的博客文章中简短地提到了它:它是由他们的构建过程自动完成的。请参阅此博客文章(第 3 个要点)。

不幸的是,没有详细信息,但也许您可以通过评论该博客文章或联系 stackoverflow 团队获得更多信息。

于 2009-02-02T09:05:01.633 回答
-4

每次更改文件时更改文件名以达到相同的效果可能会更容易。

file001.css
file002.css

我有一种感觉,保持文件名相同并附加?ver=1234是为了使源代码控制更容易。

于 2009-06-09T12:32:31.017 回答