我希望调查/实现 CDN(最初只是通过子域,但及时转移到 CDN),并且正在寻找有关处理该子域上文件版本的资源.
我之前工作过的大多数地方都实现了资源缓存(图像、javascript、css 等),当想要更改图像时,都经历了仅更改图像的文件名和更改图像的痛苦过程源代码中对其的引用(以便客户看到新的图像,而不是缓存的图像)。
我想要实现的目标
我想要的是: resources.domain.com
包含子文件夹,例如:
- 脚本/
- 图片/
- CSS/
- 等等
不是问题,并且有助于提高 yslow/页面速度分数(假设无 cookie 域等)
但是 Assets 的版本控制是我想要解决的问题。
例如
resources.domain.com/images/promo_banner1.jpg
我可能必须每 10-15 天缓存一次并过期。
假设我们有一些关键的业务请求,并且我们需要更改它,我希望能够覆盖它。据我了解,我可以向其附加一个查询字符串 (?1.1),以强制浏览器将其视为不同的资源。
我知道我可以在 MVC(或者实际上是 ASP.NET)中通过创建一个“CompanyResource”html 帮助器来执行此操作,该帮助器将查找资源文件或类似的文件以查看我们是否有新版本,如果有,将版本号附加为查询字符串元素,但必须有更好的方法吗?
那么,社区想出了什么呢?
- 如何最好地处理子域中的资源(假设我已阅读与此相关的所有 yslow/google 备份文档)
- 人们想出了什么来处理 Assets 的版本控制(以在更新时最大限度地减少总体代码更改)——基于代码的辅助方法来根据某些规则交付 Assets ?
希望我没有胡言乱语太多。
感谢您的帮助:)
干杯, 特里
最佳答案
刚刚注意到这个问题还没有得到解答 - 我们使用以下方法解决了 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,那么我们可以毫不费力地做到这一点。
希望对某人有帮助。
干杯, 特里
关于asp.net-mvc - CDN/子域、资源和版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171372/