2017-01-06 3 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 페이지에서 말했다 것 같은 긴 대답은 모두의

첫째, 번들이 브라우저에 의해 캐시됩니다 : 당신이 번들 하나 개의 파일을 업데이트하면

, 새로운 토큰 번들 쿼리 문자열 매개 변수에 대해 생성되고 클라이언트가 번들이 포함 된 페이지를 다음에 요청하면 전체 번들을 에 다운로드해야합니다. 각 자산이 개별적으로 나열되는 전통적인 마크 업에서는 변경된 파일 인 만 다운로드됩니다. 자주 변경되는 자산은 번들링에 적합하지 않을 수 있습니다.

번들 및 소형화는 주로 첫 번째 페이지 요청로드 시간을 향상시킵니다. 웹 페이지가 요청되면 브라우저는 애셋 (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. 두 번째 실행 : 모더 나이저, 부트 스트랩, 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 
    

.

  • 에지 : Edge
  • 파이어 폭스 개발자 에디션 : 우리는 2 개 개의 다른 브라우저에서 동일한 페이지를로드하는 경우 우리는 심지어 떨어져로드 5mins을 한 후, 같은 쿼리 문자열을 얻을 것이다 이유는 설명 할 Firefox Dev Edition
+0

procmon과 함께 철저한 테스트를 해 주셔서 감사합니다. 번들 된 서버 캐시를 확인할 수있었습니다. 스크립트 메모리. 대규모 응용 프로그램에 대해 스크립트 (다른 ​​번들에있는 동일한 스크립트)를 복제 할 때의 영향을 측정하려고 시도했으며 해당 스크립트가 재활용되고 번들이 다시 작성 될 때까지 응용 프로그램 풀 메모리에서 기다리는 것처럼 보입니다. – nothingisnecessary