ASP.NET是否将捆绑的脚本存储在内存中?

时间:2017-01-06 22:59:58

标签: asp.net bundling-and-minification asp.net-bundling

当我使用Microsoft Web Optimization(ASP.NET和MVC的捆绑和缩小)创建脚本包时,服务器是否在内存中保留了包的副本?或者每次收到创建捆绑包的请求时它是否从磁盘读取?阅读有关该主题的大量博客和文章,但他们只谈论使用,好处等。

我甚至用WinDbg围绕w3wp.exe进程,但我不够聪明或耐心等待内存中的bundle来验证这一点。只是看着任务管理器似乎不可靠,因为显然字符串在某些时候会加载到内存中,但.NET堆并不总是立即缩减。谢谢!

1 个答案:

答案 0 :(得分:3)

简短回答

内存。但是请记住,浏览器已经将信息缓存在客户端中。

答案很长

首先,浏览器将缓存该缓存,如Bundling and Minification页面中所述:

  

更新捆绑包中的一个文件后,会为其生成新令牌   必须下载包查询字符串参数和完整包   客户端下次请求包含该包的页面时。在   传统标记,其中每个资产单独列出,仅列出   将下载更改的文件。经常变化的资产可能   不适合捆绑。

     

捆绑和缩小主要改善首页请求加载时间。   一旦请求了网页,浏览器就会缓存资产(JavaScript,   CSS和图像)因此捆绑和缩小不会提供任何性能   请求同一页面或同一站点上的页面时提升   要求相同的资产。如果您没有设置expires标头   正确地对你的资产,你不使用捆绑和缩小,   浏览器新鲜启发式将标记资产陈旧后的陈旧   几天,浏览器将需要每个验证请求   资产

此处也显示了从同一页面拍摄的图片,他们用Fiddler进行了测试: 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
    
  3. 在第二次运行中,您将看到modernizr,bootstrap,jquery和css(我的包!)都在缓存中。这可以解释为什么如果我们在2个不同的浏览器中加载相同的页面,我们将获得相同的查询字符串,即使在相隔5分钟后加载:

    • 边缘:Edge
    • Firefox Dev Edition:Firefox Dev Edition