我阅读了关于bundling and monification的文章,特别是关于使用CDN的文章,但有些事情我不清楚。
举例:
public static void RegisterBundles(BundleCollection bundles)
{
//bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
// "~/Scripts/jquery-{version}.js"));
bundles.UseCdn = true; //enable CDN support
//add link to jquery on the CDN
var jqueryCdnPath =
"http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js";
bundles.Add(new ScriptBundle("~/bundles/jquery",
jqueryCdnPath).Include(
"~/Scripts/jquery-{version}.js"));
// Code removed for clarity.
}
是否有可能使用{version}
格式的CDN引用,例如" local"的?
在捆绑包中包含已经缩小版本的脚本有什么意义,例如 jquery-1.7.1.min.js ?如果它不存在怎么办?它是否应该搜索.min
文件是否存在和/或分别生成它?
答案 0 :(得分:6)
using System.Web;
using System.Web.Optimization;
namespace MvcApp
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery", "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js").Include("~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap","https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js").Include("~/Scripts/bootstrap.js"));
bundles.Add(new StyleBundle("~/Content/css", "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css").Include("~/Content/bootstrap.css"));
BundleTable.EnableOptimizations = true;
bundles.UseCdn = true;
}
}
}
很多开发人员都没有意识到,ScriptBundle和StyleBundle的类构造函数有一个重载,它带有两个字符串参数,例如ScriptBundle,它将是ScriptBundle(字符串,字符串)和StyleBundle它将是StyleBundle(字符串,字符串)。第一个参数是虚拟路径,第二个参数是cdnPath。
我们可能会问自己,如果它需要两个参数,MVC如何知道使用哪一个?好吧,仅当BundleTable.EnableOptimizations属性设置为true时才使用cdn位置。
将EnableOptimization属性设置为true会告诉MVC使用文件的缩小版本而不是常规版本。
当此属性设置为true且cdn路径存在时,MVC将使用cdn路径而不是本地虚拟路径。
还有一个属性你需要设置为true,那就是bundles.UseCdn。
这告诉MVC使用cdn位置而不是本地版本。如果BundleTable.EnableOptimization设置为false,则本地版本将自动用作回退,因为cdn版本是缩小版本。
阅读此博客,明确了您的想法:
http://www.techjunkieblog.com/2015/06/aspnet-mvc-5-configure-bundleconfig.html
答案 1 :(得分:0)
你不能我所知。但是你可以保存一张cdns表并在加载bundle时填充。当您希望使用新版本时,请在数据库中添加/替换条目。
//get from db
List<string> cdns = new List<string>();
foreach (string cdn in cdns)
{
bundles.Add(new ScriptBundle("~/bundles/jquery",cdn).Include("~/Scripts/jquery-{version}.js"));
}
我同意最小的部分。对于问题不存在的部分,请向下滚动并阅读“使用CDN”。有一个例子来说明如何检查。你基本上需要有一个本地副本作为备份,你可以引用另一个我认为的cdn。
答案 2 :(得分:0)
是否有可能使用{version}格式的CDN引用, 喜欢“本地”的?
{version}占位符主要用于节省键入显式数字的时间,以便构建可以在本地磁盘上查找文件。由于无法在远程服务器上执行相同的搜索,因此您需要明确指定确切的URL。
包括已经缩小的捆绑包有什么意义 脚本的版本,如jquery-1.7.1.min.js?如果不是这样的话 存在?
使用此捆绑语法的主要好处是在最终HTML中有条件地在脚本和样式标记的不同URL之间切换。
当请求的文件不存在时,捆绑过程将跳过它。
是否应该搜索.min文件是否存在和/或生成它 分别? 是的,它可以在捆绑之前应用缩小,如您所见: