捆绑云集成的建议策略和库

时间:2012-09-04 22:55:08

标签: asp.net-mvc asp.net-mvc-4 bundling-and-minification

我正在优化我的ASP.net MVC 4网站。我目前正在使用运行时捆绑来组合和缩小我的JavaScript和CSS内容。我希望在创建CDN(特别是Amazon Cloudfront)时自动将缩小的内容发布到CDN。

我正在尝试确定将捆绑文件与CDN集成的最佳策略。我的具体问题是:

  • 是否有任何可用的库允许捆绑文件 被保存到CDN而不是我的本地Web服务器?
  • 捆绑之前是否应从CDN中提取静态文件,还是应该在捆绑之前从本地Web服务器提取静态文件?
  • 是否有任何机制只能从我的网络农场(而不是普通公众)启用CDN写控制?

2 个答案:

答案 0 :(得分:3)

我个人并没有购买“使用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 site设置原始拉动。我确信ASP.NET的配置类似。

2)从本地副本捆绑。您可能已经在开发中引用了本地副本,那么为什么要在上线之前将CDN添加到组合中?

3)大多数云存储系统(Amazon S3,Azure存储,Rackspace云文件)提供了一种将文件发布到云端的方法,这些方式对公众来说仍然是只读的。这与API有关,因此该方法因您的云存储提供商而异。

答案 1 :(得分:0)

经过更多的研究后,我偶然发现了Squishit.S3库,它正是我所需要的。从本质上讲,它可以在squishit上进行背负,从而可以在运行时将捆绑的文件复制到S3 / Cloudfront存储桶中。配置是轻而易举的,因为它使用亚马逊的API,凭证用于写入CDN。如果您已经使用Squishit,只需在global.asax中添加几个默认配置行,其余的就会为您处理