4

MVC4 の Web.Optimization バンドル/最小化では、あるサイト (静的 Cookie なしドメイン) にバンドルを登録し、そのバンドルを別のサイト (Web アプリケーション ドメイン) で使用できますか?

たとえば、static.myapp.com には BundleConfig.cs があり、

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/Scripts/static")
                .Include("~/Scripts/*.js"));
}

そのバンドルを webapp のドメインのビューで使用できますか。たとえば、www.myapp.com はこれを Site.Master に持っています。

<%= Scripts.Render("static.myapp.com/Scripts/static") %>

これは MVC4 バンドルで実行できますか? Cookie を使用しない静的ドメインから静的ファイルを提供することは、パフォーマンスの向上としてよく知られています。

4

3 に答える 3

2

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"));

上記のコードでは、リリース モードで jQuery が CDN から要求され、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");
}
于 2013-08-18T22:34:59.460 に答える
0

はい、ここで私の回答を参照してください: How to make bundles unminify and list individual files when using a cookieless static content server?

別のドメインを参照できるだけでなく、私が提供したようなカスタム VirtualPathProvider を使用すると、DEBUG モードでファイルを個別にリストする機能を維持することもできます。

ブラウザーでのデバッグが容易になるだけでなく、開発中に JS または CSS を変更するたびにバンドルを更新するために再構築する必要もありません (ファイルを追加または削除するときだけ)。

于 2015-10-14T20:09:03.410 に答える