2017-01-06 7 views
1

Microsoft Web Optimization(ASP.NETおよびMVCのバンドルおよび縮小)を使用してスクリプトバンドルを作成すると、サーバーはバンドルのコピーをメモリに保持しますか?それとも、バンドルの作成を要求されるたびにディスクから読み込みますか?多くのブログや記事を読んでください。しかし、彼らは使用法や利点などについてのみ話します。ASP.NETはバンドルされたスクリプトをメモリに保存しますか?

私はWinDbgでw3wp.exeプロセスを突っ込んできましたが、私は十分スマートではありませんこれを確認するためにメモリ内のバンドルを見つけてください。明らかに、ある時点の文字列がメモリにロードされることは明らかだから、タスクマネージャを見ているだけでは信頼できないように見えますが、.NETヒープが常にすぐに縮小されるわけではありません。ありがとう!

+0

https://technet.microsoft.com/en-us/sysinternals/bb896645を試して、いつ/ cssファイルがヒットするかを確認することができます。 –

+0

ありがとう、私はprocmonを忘れていました。ある特定の.jsファイルに対してprocmonを見てもわかりませんでした。バンドルが有効になっていると、ファイルが変更されたことを.NETがどのように認識していたのかは明らかではありませんでした(バージョンハッシュを更新します)。クライアント側で動作が異なります。次のステップ私はILSpyを使ってコードに潜入していると思います。私は興味がありますが、元の答えを得ました。ありがとうございました – nothingisnecessary

答えて

3

短い答え

メモリ。しかし、ブラウザがすでにクライアントに情報をキャッシュしていることも覚えておいてください。

それはBundling and Minificationページに言われていますよう長い答え、すべての

まず、バンドルがブラウザによってキャッシュされます:あなたは、バンドル内の1つのファイルを更新したら

、新しいトークン バンドルクエリ文字列パラメータに対して生成され、次にクライアントがバンドルを含むページを要求すると、フルバンドルがダウンロードされます。 各アセットが個別に表示される従来のマークアップでは、変更されたファイル のみがダウンロードされます。頻繁に変更される資産は、 がバンドルに適していない可能性があります。

バンドルおよび縮小は、主に最初のページ要求の読み込み時間を改善します。 ウェブページがリクエストされると、ブラウザはアセット(JavaScript、 CSSおよびイメージ)をキャッシュに格納し、バンドルとミニネーションでは同じページをリクエストするときにはパフォーマンスが向上しません。同じサイトのページ は同じアセットをリクエストします。有効期限ヘッダー を資産に正しく設定せず、バンドルと縮小を使用しない場合は、 ブラウザの最新性の発見ツールでは 日後に資産が失効とマークされ、ブラウザはそれぞれに対して検証要求を要求します 資産

そしてまた、彼らはフィドラーでテストし、同じページから撮影した画像に、ここに示す: Fiddler

それがブラウザによってキャッシュされたとして、これまでのところ、我々は安全です。

しかし、私は少しさらに行って、コントローラでこのコードの小さなテストプロジェクトを作成:ビューの

public ActionResult Index() 
{ 
    return View(HttpRuntime.Cache); 
} 

そして、このコード:

<p> 
    @Html.DisplayForModel() 
</p> 

私に次を与えました結果:

  1. 最初の実行:

    :ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:View:Index:Home:::__AppStartPage__~/_appstart.cshtml 
    :ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:View:Index:Home::Mobile:__AppStartPage__~/_appstart.vbhtml 
    
  2. セカンドラン:modernizr、ブートストラップ、jQueryとCSS(!私のバンドル)がキャッシュ内にある、あなたが表示されますセカンドランで

    :ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:Partial:_LoginPartial:Home::Mobile: 
    :ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:View:Index:Home:::System.Web.Optimization.Bundle:~/bundles/modernizr 
    :ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:Partial:_LoginPartial:Home:::System.Web.Optimization.Bundle:~/bundles/bootstrap__AppStartPage__~/_appstart.cshtml 
    :ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:View:Index:Home::Mobile:System.Web.Optimization.Bundle:~/bundles/jquerySystem.Web.Optimization.Bundle:~/Content/css__AppStartPage__~/_appstart.vbhtml 
    

。我々は2つの異なるブラウザで同じページをロードした場合私たちも離れて5minsをロードされた後、同じクエリ文字列を取得する理由は説明するだろう:

  • エッジ:Edge
  • のFirefoxのDev版:Firefox Dev Edition
+0

procmonが徹底的なテストをしてくれてありがとうございました。スクリプトメモリ。私は大規模なアプリケーションのためにスクリプト(異なるバンドルの同じスクリプト)を複製することによる影響を測定しようとしていました。それらのスクリプトは、リサイクルされてバンドルが再作成されるまで – nothingisnecessary

関連する問題