CDN /子域,资源和版本控制

时间:2010-01-31 10:49:40

标签: asp.net-mvc image versioning cdn

我希望调查/实施一个CDN(最初只是通过一个子域,虽然及时转移到CDN)并且正在寻找资源,讨论处理该子域上文件的版本

我以前工作过的大多数地方已经实现了资源的缓存(图像,javascript,css等),当想要更改图像时,经历了仅仅更改图像文件名和更改的痛苦过程在源代码中引用它(以便客户看到新的,而不是缓存的图像)。

我想要实现的目标

我想要的是: resources.domain.com

包含子文件夹,例如:

  • 脚本/
  • 图像/
  • CSS /

不是问题,并且将有助于yslow / page速度分数(假设无cookie域等)。

但是我希望解决资产版本问题。

E.g。

resources.domain.com/images/promo_banner1.jpg

我可能不得不每隔10-15天缓存并过期。

假设我们有一些密钥作为业务请求进入,我们需要更改它,我希望能够覆盖它。根据我的理解,我可以向它添加一个查询字符串(?1.1),以强制浏览器将其视为不同的资源。

我知道我可以在MVC(或实际上是ASP.NET)中创建一个'CompanyResource'html帮助程序,它可以查找资源文件或类似内容,看看我们是否有新版本,如果有的话,将版本号附加为查询字符串元素,但必须有更好的方法吗?

那么,社区有什么想法?

  • 如何最好地处理子域中的资源(假设我已经阅读了所有yslow / google备份文档)
  • 人们想出了什么来处理资产的版本控制(以便在更新时最大限度地减少整体代码更改) - 基于代码的帮助方法根据某些规则提供资产?

希望我没有太多胡扯。

感谢您提供的任何帮助:)

干杯, 特里

1 个答案:

答案 0 :(得分:3)

刚刚注意到这个问题没有得到解答 - 我们使用以下内容在ASP.NET MVC下使用Html帮助程序解决了我们的问题。

在web.config中我们存储了'resources_url'(在本例中为resources.mycompany.co.uk),并调用了以下内容:

<%= Html.MyCompanyResourceScript("~/scripts/jquery-1.4.2.min.js") %>

其中翻译为Html帮手:

public static string MycompanyResourceScript(this HtmlHelper helper, string url)
{
    string _out = String.Format(@"<script type=""text/javascript"" src=""{0}""></script>", url.ToMyCompanyUrlAction(helper.ViewContext.HttpContext));
    return _out;
}
public static string ToMyCompanyUrlAction(this string url, HttpContextBase context)
{
return String.Format("{0}://{1}{2}", 
    (context.Request.IsSecureConnection ? "https" : "http"),
    WebConfigurationManager.AppSettings["resources_url"],
    VirtualPathUtility.ToAbsolute(url, "/"));
}

我们为MyCompanyResourceImage和MyCompanyResourceCss创建了助手,并为alt标签/媒体类型等创建了合适的参数。

这意味着我们可以(从一开始)通过我们自己的资源域托管,如果将来我们选择将其转移到CDN,那么我们可以毫不费力地这样做。

希望能有所帮助。

干杯, 特里