【问题标题】:Suggested strategy and library for bundling with cloud integration与云集成捆绑的建议策略和库
【发布时间】:2012-09-04 22:55:07
【问题描述】:
我正在优化我的 ASP.net MVC 4 网站。我目前正在使用运行时捆绑来组合和缩小我的 JavaScript 和 CSS 内容。我想在创建时自动将缩小的内容发布到 CDN(特别是 Amazon Cloudfront)。
我正在尝试确定将捆绑文件与 CDN 集成的最佳策略。我的具体问题是:
- 是否有任何可用的库允许捆绑文件
保存到 CDN 而不是我的本地 Web 服务器?
- 应该在捆绑之前从 CDN 中提取静态文件,还是应该在捆绑之前从本地 Web 服务器中提取静态文件?
- 是否有任何机制可以仅从我的网络场(而不是公众)启用 CDN 写入控制?
【问题讨论】:
标签:
asp.net-mvc
asp.net-mvc-4
bundling-and-minification
【解决方案1】:
我个人并不认同“使用 CDN 处理所有静态内容!!”心态,所以我拒绝担心将本地脚本复制到 CDN,如您所述。当然,可以从现有的主要 CDN(雅虎、微软、谷歌)中引用大型库,但对于本地脚本,这真的不值得麻烦,IMO。
按照这种思路,我越来越喜欢SquishIt。无需使用额外的 XML 配置或预初始化。只需将它包含在主文件或布局文件中,如下所示:
<%= Bundle.Css()
.Add("~/Content/Reset.less")
.Add("~/Content/Site.less")
.Add("~/Scripts/rcarousel/widget/css/rcarousel.css")
.Add("~/Scripts/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.css")
.Add("~/Content/Fonts/Karla/stylesheet.css")
.Render("~/Cache/Bundle.css") %>
<%= Bundle.JavaScript()
.Add("~/Scripts/jquery-1.7.2.js")
.Add("~/Scripts/jquery-ui-1.8.19.js")
.Add("~/Scripts/modernizr-2.5.3.js")
.Add("~/Scripts/rcarousel/widget/lib/jquery.ui.rcarousel.js")
.Add("~/Scripts/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.js")
.Add("~/Scripts/jquery.youtubelite.js")
.Render("~/Cache/Bundle.js") %>
话虽如此,但你的观点更多:
1) 我不知道有任何支持自动 CDN 部署的捆绑库。这里通常的思路是从您的网站目录中提取 CDN 并将其缓存。通过这种方式,部署是通过拉机制而不是推送来建立的。 This article 描述了如何使用 CloudFront 和 word press 站点设置源拉取。我确定 ASP.NET 的配置类似。
2) 从本地副本捆绑。您可能已经在开发中引用了本地副本,那么为什么要在上线之前将 CDN 添加到组合中呢?
3) 大多数云存储系统(Amazon S3、Azure 存储、Rackspace 云文件)都提供了一种将文件发布到云的方式,这些文件对公众保持只读状态。这取决于 API,因此方法因您的云存储提供商而异。
【解决方案2】:
经过更多研究,我发现了 Squishit.S3 库,它完全符合我的需要。本质上,它搭载了 squishit,使捆绑的文件能够在运行时复制到 S3/Cloudfront 存储桶。配置轻而易举,因为它使用 Amazon 的 API,所以使用凭证写入 CDN。如果您已经使用 Squishit,只需在 global.asax 中添加几行 默认配置 行,其余的会为您处理