[英]MVC4 bundling javascript or css files from a different domain?
在MVC4的Web.Optimization捆綁/最小化中,是否可以在一個站點(我們的靜態無cookie域)上注冊一個捆綁包,然后在另一個站點(我們的webapp域)上使用該捆綁包?
例如static.myapp.com有一個BundleConfig.cs與
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/static")
.Include("~/Scripts/*.js"));
}
可以在Web應用程序域的視圖中使用該捆綁包嗎,例如www.myapp.com在Site.Master中具有此捆綁包
<%= Scripts.Render("static.myapp.com/Scripts/static") %>
MVC4捆綁可以做到嗎? 從無cookie的靜態域提供靜態文件是一項眾所周知的性能改進。
通過ASP.net MVC中的捆綁包,您可以通過在運行時而非設計時替換占位符Scripts.Render()
來優化腳本和樣式表的部署。 當頁面被解析並推送到客戶端時,注冊到調用服務器的包將被解析到輸出緩沖區中。 因此,提供內容的應用程序必須正在運行捆綁程序服務。 如果未運行捆綁的Web應用程序遇到Scripts.Render()
元素,則它將輸出null
或引發異常。
但是,您可以在RegisterBundles方法中使用CDN引用,例如:
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"));
在上面的代碼中,將在發布模式下從CDN請求jQuery,並且將在調試模式下從本地獲取jQuery的調試版本。 使用CDN時,您應該具有備用機制,以防CDN請求失敗。
編輯
您可以使用ASP.Net MVC作為來自static.myapp.com的CDN,例如
routes.MapRoute(
"CDN",
"cdn",
new { controller = "Webpage", action = "Fetch" }
);
[OutputCache(Duration=300, Location=OutputCacheLocation.Any)]
public ActionResult Fetch()
{
return new FileStreamResult(
GetScriptBundle(Request.QueryString["url"]),
"text/javascript");
}
因此,我碰到了這一要求,並且在頁面中巧妙地解決了這一問題,與之類似;
<%
string jsStore = Context.IsDebuggingEnabled ? "~" : "static.mydomain.com";
string scriptTagFormat = Scripts.DefaultTagFormat.Replace("{0}", Url.Content(jsStore).TrimEnd('/') + "{0}");
%>
和
<%=Scripts.RenderFormat(scriptTagFormat, "~/bundles/allMyJS")%>
當然,您也可以在RegisterBundles()
使用DefaultTagFormat
,但這提供了更大的靈活性,因為;
jsStore
。 jsStore
以匹配不同的{SERVER_NAME}
主機。 您也可以將其與諸如此類的靜態標簽一起使用;
<script src='@Url.Content(jsStore + "/scripts/etc/lt-ie10.min.js")'></script>
CSS可以使用相同的方法。
是的,請在這里查看我的答案: 使用無cookie靜態內容服務器時,如何使捆綁包最小化並列出單個文件?
您不僅可以引用其他域,而且還可以像我提供的那樣使用自定義的VirtualPathProvider,還可以保持在調試模式下單獨列出文件的功能。
除了更容易在瀏覽器中調試之外,開發時每次更改JS或CSS時(僅在添加或刪除文件時),您都無需重新構建即可更新包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.