簡體   English   中英

ASP.NET是否將捆綁的腳本存儲在內存中?

[英]Does ASP.NET store bundled scripts in memory?

當我使用Microsoft Web Optimization創建腳本捆綁包(ASP.NET和MVC的捆綁和最小化)時,服務器是否在內存中保留了捆綁包的副本? 還是在每次收到創建捆綁包的請求時從磁盤讀取? 閱讀有關該主題的許多博客和文章,但他們只談論用法,好處等。

我什至還用WinDbg戳了一下w3wp.exe進程,但是我不夠聰明或耐心地無法找到內存中的捆綁包來驗證這一點。 而且,僅看着任務管理器似乎並不可靠,因為顯然字符串會在某個時刻加載到內存中,但是.NET堆並不一定總是立即縮小。 謝謝!

簡短答案

記憶。 但也請記住,瀏覽器已經在客戶端中緩存了信息。

長答案

首先,如“ 捆綁和縮小”頁面中所述, 捆綁包將由瀏覽器緩存:

更新包中的一個文件后,將為包查詢字符串參數生成一個新令牌,並且在下一次客戶端請求包含該包的頁面時必須下載完整包。 在傳統標記中,每個資產都單獨列出,因此只會下載更改的文件。 經常變化的資產可能不是捆綁的理想選擇。

捆綁和縮小功能主要可以縮短首頁請求的加載時間。 請求網頁后,瀏覽器會緩存資產(JavaScript,CSS和圖像),因此當請求同一頁面或請求相同資產的同一站點上的頁面時,捆綁和縮小不會提高性能。 如果您沒有在資產上正確設置expires標頭,並且沒有使用捆綁和縮小功能,那么幾天后瀏覽器的新鮮度試探法就會將資產標記為過期,瀏覽器將要求對每個資產進行驗證請求

並且還顯示在同一頁上的圖像中,他們使用Fiddler進行了測試: 提琴手

到目前為止,我們是安全的,因為它已被瀏覽器緩存。

但是,我走了一步,並在Controller中使用以下代碼創建了一個小型測試項目:

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. 第二輪:

     :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 

在第二次運行中,您將看到Modernizr,bootstrap,jquery和css(我的包!)在緩存中。 這可以解釋為什么如果我們在2個不同的瀏覽器中加載相同的頁面,即使相距5分鍾加載一次,我們也會獲得相同的查詢字符串:

  • 邊緣: 邊緣
  • Firefox開發版: Firefox開發版

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM