当我使用Microsoft Web Optimization(ASP.NET和MVC的捆绑和缩小)创建脚本包时,服务器是否在内存中保留了包的副本?或者每次收到创建捆绑包的请求时它是否从磁盘读取?阅读有关该主题的大量博客和文章,但他们只谈论使用,好处等。
我甚至用WinDbg围绕w3wp.exe进程,但我不够聪明或耐心等待内存中的bundle来验证这一点。只是看着任务管理器似乎不可靠,因为显然字符串在某些时候会加载到内存中,但.NET堆并不总是立即缩减。谢谢!
答案 0 :(得分:3)
简短回答
内存。但是请记住,浏览器已经将信息缓存在客户端中。
答案很长
首先,浏览器将缓存该缓存,如Bundling and Minification页面中所述:
更新捆绑包中的一个文件后,会为其生成新令牌 必须下载包查询字符串参数和完整包 客户端下次请求包含该包的页面时。在 传统标记,其中每个资产单独列出,仅列出 将下载更改的文件。经常变化的资产可能 不适合捆绑。
捆绑和缩小主要改善首页请求加载时间。 一旦请求了网页,浏览器就会缓存资产(JavaScript, CSS和图像)因此捆绑和缩小不会提供任何性能 请求同一页面或同一站点上的页面时提升 要求相同的资产。如果您没有设置expires标头 正确地对你的资产,你不使用捆绑和缩小, 浏览器新鲜启发式将标记资产陈旧后的陈旧 几天,浏览器将需要每个验证请求 资产
此处也显示了从同一页面拍摄的图片,他们用Fiddler进行了测试:
到目前为止,我们很安全,因为它是由浏览器缓存的。
然而,我更进一步,在Controller中使用此代码创建了一个小型测试项目:
public ActionResult Index()
{
return View(HttpRuntime.Cache);
}
此视图中的代码:
<p>
@Html.DisplayForModel()
</p>
这给了我以下结果:
首先运行:
: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
第二轮:
: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分钟后加载: