10

MVC4 でバンドルと縮小のサポートを実装していますが、JavaScript ファイルがバンドル/縮小されていない場合よりも大きくなっているように見えます。nuget で利用可能な最新のビルドを使用しています (プレリリース オプションがオン)。RegisterBundles クラスに次のバンドルを設定しました。

bundles.Add(new ScriptBundle("~/bundles/baseJS").Include(
                    "~/Scripts/jquery-1.7.1.js",
                    "~/Scripts/jquery.cookie.js",
                    "~/Scripts/jquery-ui-1.8.11.js",
                    "~/Scripts/bootstrap.js",
                    "~/Scripts/jquery.pjax.js",
                    "~/Scripts/kendo/2012.1.515/js/kendo.all.min.js",
                    "~/Scripts/jquery.jstree.js",
                    "~/Scripts/jquery.unobtrusive-ajax.js",
                    "~/Scripts/jquery.validate.js",
                    "~/Scripts/jquery.validate.unobtrusive.js",
                    "~/RIS.Scripts/PostJson.js"));

そして、私はそれを私の _Layout.cshtml にロードしています

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

デバッグ モードでこれらのスクリプトの Fiddler で受信したバイト数を合計すると、次のようになります。

Name                        Size(bytes)
jquery                      98013
jquery cookie               1455
jquery ui                   124704
bootstrap                   52378
pjax                        8138
kendo.all                   219751
jstree                      55045
unobtrusive-ajax            2492
validate                    13323
validate-unobtrusive        5138
postjson                    634

Total                       581071

そして、本番サーバーで実行すると、js バンドル全体のフィドラーから次のようになります。

Bytes Received:  999,396    

ここで何が起こっているのですか?ほとんどのファイルはある程度縮小されていますが、ペイロードのサイズがほぼ 2 倍になることはありません。

追加の詳細 - ローカルの開発ボックス (フィドラーはサイズ 379kb を報告) とサーバー (フィドラーはサイズ 999kb を報告) から js ファイルをダウンロードし、それらを kdiff に入れると、バイナリは同一です。Chrome の開発者ツールのネットワーク タブを見ると、ローカル サーバーは 379kb をダウンロードしますが、「パーサー」の値は 975kb です。このパーサー値は何ですか。私のサーバーには設定されていないが、私のローカル IIS サーバーには設定されている IIS 圧縮設定があるのでしょうか? 私が注目している唯一の違いは、開発マシンで実行している IIS Express が 8.0 で、サーバーが IIS 7.5 であるという事実です。

4

2 に答える 2

12

おそらく、ここに表示されているのは、FileExtensionReplacementList.

例として jQuery を見てみましょう。通常、スクリプト フォルダには、各ファイルの 2 つのコピー、つまりjquery-1.6.2.jsjquery-1.6.2.min.js.

デフォルトでは、最適化はmin.jsバージョンの whendebug=falseを使用し、通常のjquery-1.6.2.jswhenを使用しますdebug=true。これは、通常、デバッグが容易になるためです (バンドルやバンドルの縮小はありません)。

このファイル選択の「マジック」は、FileExtensionReplacementListonによって制御されBundleCollectionます。

次のリリース (RTM) では、通常、開発者はこれらを使用する必要がある場合にターゲットを設定する必要があるため、このリストの粒度がもう少し細かくなります。

list.Add("min", OptimizationMode.WhenEnabled);
list.Add("debug", OptimizationMode.WhenDisabled);
于 2012-06-29T22:57:40.020 に答える
4

バンドル オプションは機能していますが、縮小はBundleTable.EnableOptimizations = true設定と、使用していないいくつかの「変換」オプションによって行われます。CssMinify および JsMinify を参照してください。

次のようなもの:

        var b1 =new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-1.*");

        b1.Transforms.Add(new JsMinify());

        bundles.Add(b1);

- と -

BundleTable.EnableOptimizations = true;      
于 2012-06-26T21:27:58.530 に答える