如何在ASP.NET的Bundle中添加多个CDN资源文件?
结论
原生ASP.NET 捆绑优化(System.Web.Optimization)框架至今没有支持单个Bundle关联多个CDN路径的功能更新。
你的理解完全正确:ScriptBundle构造函数的第二个CDN路径参数仅支持传入单个字符串,Release模式下只会输出这一个CDN资源引用,Include()方法传入的本地文件路径仅在Debug模式、或是CDN资源不可用触发降级时生效。
可行解决方案
方案1:按CDN资源拆分独立Bundle(实现成本最低)
每个CDN资源对应一个独立的Bundle实例,分别绑定各自的CDN路径,完全支持从配置文件读取路径的需求,示例代码如下:
public static void RegisterBundles(BundleCollection bundles) { bundles.UseCdn = true; // 从配置文件读取各CDN资源路径 var jqueryCdnPath = ConfigurationManager.AppSettings["LocalCdn:Jquery"]; var lodashCdnPath = ConfigurationManager.AppSettings["LocalCdn:Lodash"]; var elementUiCdnPath = ConfigurationManager.AppSettings["LocalCdn:ElementUi"]; // 每个CDN资源对应单独的Bundle bundles.Add(new ScriptBundle("~/bundles/jquery", jqueryCdnPath) .Include("~/Scripts/jquery-{version}.js")); bundles.Add(new ScriptBundle("~/bundles/lodash", lodashCdnPath) .Include("~/Scripts/lodash.min.js")); bundles.Add(new ScriptBundle("~/bundles/elementui", elementUiCdnPath) .Include("~/Scripts/element-ui.min.js")); }
方案2:自定义Bundle实现多CDN路径支持
如果需要将多个CDN资源归为同一个逻辑Bundle统一引用,可以继承ScriptBundle类自定义扩展,支持传入多个CDN路径,重写渲染逻辑,在Release模式下依次输出所有配置的CDN资源引用即可。
方案3:CDN侧提前合并资源(性能最优)
因为你使用的是自行托管的本地CDN,可以提前把需要批量加载的多个JS/CSS文件在CDN侧合并成单个资源,直接将合并后的资源CDN路径传入Bundle的CDN参数即可,还能减少HTTP请求数,提升加载性能。
内容的提问来源于stack exchange,提问作者JanT
相关产品推荐
相关产品推荐

