2012-06-26 57 views
10

私はMVC4でバンドリングとミニネーションのサポートを実装しています。バンドルされていない場合よりもjavascriptファイルが大きくなっているように見えます。私は最新のビルドをナゲットで使用しています(リリース前のオプション)。 RegisterBundlesクラスに以下のバンドルを設定しました。MVC4のバンドルとマイニングがファイルを大きくするのはなぜですか?

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

そして私は、私はバイトをデバッグモードでこれらのスクリプトのためのフィドラーで受信まで追加すると、私は

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 
次取得

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

を使用して、私の_Layout.cshtmlにロードしています

そして、私のプロダクションサーバーでそれを実行すると、jsバンドル全体に対して次のようなフィドラーが得られます。

Bytes Received: 999,396  

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

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

答えて

12

ほとんどの場合、あなたがここで見ていると、FileExtensionReplacementListから来て、デバッグ/リリース「マジック」がいくつかあります。

はのは、例えばjQueryのを見てみましょう。通常、スクリプトフォルダには、各ファイルのコピーが2つ(jquery-1.6.2.jsjquery-1.6.2.min.js)表示されます。一般的に容易に(何のバンドルとバンドルの無縮小)をデバッグしないなりそのため、デフォルトの最適化により、

は、min.jsバージョンdebug=falseを使用し、定期的なjquery-1.6.2.jsときdebug=trueを使用します。

このファイル選択「魔法」

BundleCollectionFileExtensionReplacementListを介して制御されます。次のリリース(RTM)で

、など一般的にこれらは私が最初にこれを試してみますすなわち

list.Add("min", OptimizationMode.WhenEnabled); 
list.Add("debug", OptimizationMode.WhenDisabled); 
+0

注:ハオはASP.NETのバンドル/ミニ化の主な開発者です – RickAndMSFT

+2

答えを正しく理解すれば、 ASP.netよりJqueryの小型化が厳しいですか? – PlTaylor

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;  
+0

、使用する必要がありますされている場合、開発者がターゲットにするだろう、この一覧でもう少し細かさがあるだろう朝のこと....しかし、それはなぜそれを大きくするだろうか?それは私を本当に混乱させる部分です。 – PlTaylor

+0

b1.transforms.Add(new JsMinify())については正しいですか。それは私の問題を解決し、合計ダウンロードは未圧縮ファイルの合計よりも少ないです。 EnableOptimizations = true;デバッグをオフにして、サーバ上のようにローカルのdevboxのすべてをバンドルして縮小します。 – PlTaylor

+0

[OK]を私は、EnableOptimizations = trueと私の開発ボックスでこれを実行したとき。バンドルされ、jsファイルを388,447バイトに縮小しました。これは私が期待するものです。コードを変更せずにサーバーに展開すると、999,350バイトになります。どうすればいいの? – PlTaylor

関連する問題