2

多くのコード例、および新しい MVC アプリ用に Visual Studio 2012 によって生成される既定のRegisterBundlesメソッドにはBundleConfig.cs、jQuery などの一般的な JavaScript ファイルをバンドルに追加するための次のようなコードが含まれています。

    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.js"));

一定の割合のケースでは、ユーザーのブラウザーのキャッシュにこれらの共通ファイルが既に存在します。そのため、バンドルによってファイルが再度ダウンロードされるのを待つのはもったいないようです。

バンドルされたファイル (他のファイルと連結されて縮小されている可能性があります) が既に存在することをブラウザーが認識できない場合、このバンドルの使用は処理をまったく高速化せず、むしろ不必要な遅延を引き起こすように思われます。

それとも、ここで何か不足していますか? おそらく、「共通」ファイル (jQuery など) が既にキャッシュされている可能性は低いでしょうか?

4

2 に答える 2

1

無駄ではないと思います。縮小機能だけでも、クライアントのレスポンスが向上するはずです。ただし、Web アプリの js、css、ect に依存します。ブラウザの同時接続は 6 つに制限されています。そのため、Web ページに含まれるクライアント側ファイルが 6 つ以下の場合、ScriptBundle を使用しても意味がない場合があります。しかし、ほとんどのサイトには大量の JavaScript と CSS があるため、ScriptBundle の縮小機能は価値があります。これにより、ユーザーに送信される KB の量が大幅に削減されます。いつでも無効にして、これらのファイルがアプリにどれだけの負荷をかけているかを確認できます。

于 2013-09-23T17:50:34.677 に答える
1

「ユーザーのブラウザのキャッシュには、これらの共通ファイルがすでに含まれています」

違います。ローカル コピーを参照しているため、以前にサイトにアクセスしたことがある場合にのみキャッシュに保存されます...以前にバンドルを使用していなかった場合は、いいえ、キャッシュされません。ただし、最初のダウンロード後は、スクリプトを変更するまでキャッシュされたままになります。

ユーザーがキャッシュした可能性が高いバージョンを参照する場合は、CDN を使用できます。以下のコードは、ASP.NET のバンドルと縮小からのものです。

public static void RegisterBundles(BundleCollection bundles)
{   
    bundles.UseCdn = true;   //enable CDN support
    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 が失敗した場合のフォールバック:

@Scripts.Render("~/bundles/jquery")

<script type="text/javascript">
    if (typeof jQuery == 'undefined') {
        var e = document.createElement('script');
        e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
        e.type = 'text/javascript';
        document.getElementsByTagName("head")[0].appendChild(e);
    }
</script> 
于 2013-09-23T18:36:34.863 に答える