gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:18:49 24 4
gpt4 key购买 nike

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

我什至用 WinDbg 探索了 w3wp.exe 进程,但我不够聪明或不够耐心,无法在内存中找到 bundle 来验证这一点。仅仅观察任务管理器似乎并不可靠,因为显然字符串在某些时候会被加载到内存中,但 .NET 堆并不总是立即收缩回来。谢谢!

最佳答案

简短回答

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

长答案

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

Once you update one file in a bundle, a new token is generated for thebundle query string parameter and the full bundle must be downloadedthe next time a client requests a page containing the bundle. Intraditional markup where each asset is listed individually, only thechanged file would be downloaded. Assets that change frequently maynot be good candidates for bundling.

Bundling and minification primarily improve the first page request load time.Once a webpage has been requested, the browser caches the assets (JavaScript,CSS and images) so bundling and minification won’t provide any performanceboost when requesting the same page, or pages on the same siterequesting the same assets. If you don’t set the expires headercorrectly on your assets, and you don’t use bundling and minification,the browsers freshness heuristics will mark the assets stale after afew days and the browser will require a validation request for eachasset

这里还显示了从同一页面拍摄的图像,他们使用 Fiddler 进行了测试: Fiddler

到目前为止我们是安全的,因为它是由浏览器缓存的。

但是,我更进一步,在 Controller 中使用以下代码创建了一个小型测试项目:

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

View 中的这段代码:

<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 分钟加载,我们也会得到相同的查询字符串:

  • 边缘:Edge
  • Firefox 开发版:Firefox Dev Edition

关于asp.net - ASP.NET 是否将捆绑脚本存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41515740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com