2017-01-06 25 views
1

Когда я создаю пакет сценариев с использованием Microsoft Web Optimization (объединение и минимизация для ASP.NET и MVC), хранит ли сервер копию копии в памяти? Или он читает с диска каждый раз, когда он получает запрос на создание пакета? Прочитайте несколько блогов и статей по этой теме, но они говорят только об использовании, преимуществах и т. Д.Сохраняет ли ASP.NET скрипты в памяти?

Я даже прошу о w3wp.exe процессе с WinDbg, но я недостаточно умен или достаточно терпелив, чтобы найти пакеты в памяти, чтобы проверить это. И просто просмотр диспетчера задач не кажется надежным, потому что, очевидно, строки в какой-то момент будут загружены в память, но куча .NET не всегда сжимается немедленно. Благодаря!

+0

Вы можете попробовать https://technet.microsoft.com/en-us/sysinternals/bb896645 и посмотреть, когда/если файлы css попадают. –

+0

Спасибо, я забыл про procmon. Кажется, это ответ Да, хотя я видел поведение, которое я не совсем понял при просмотре procmon для одного конкретного .js-файла. При включенной привязке мне было непонятно, как .NET знал об изменениях, внесенных в файл (который обновляет хеш-версию), потому что я не заметил полного чтения файла после его изменения, хотя скрипт вести себя по-разному на стороне клиента. Следующий шаг, я думаю, я погружаюсь в код с помощью ILSpy, потому что мне любопытно, но я получил исходный ответ, который я искал, спасибо – nothingisnecessary

ответ

3

Короткий ответ

памяти. Но также помните, что браузер уже кэширует информацию в клиенте.

Длинный ответ

Прежде всего, расслоение будет кэшируются браузером, как это сказано в Bundling and Minification странице:

После обновления одного файла в связке, новый маркер генерируется для параметра строки запроса пакета , и полный пакет должен быть загружен в следующий раз, когда клиент запрашивает страницу, содержащую пакет. В стандарте , где каждый актив указан отдельно, будет загружен только измененный файл . Активы, которые часто меняются, могут быть не будут хорошими кандидатами на объединение.

Связывание и минимизация в первую очередь улучшают время загрузки запроса первой страницы. После того как веб-страница была запрошена, браузер кэширует активы (JavaScript, CSS и изображения), поэтому объединение и минимизация не обеспечивают никакой производительности. boost при запросе одной и той же страницы или страниц на одном сайте с запросом на те же активы , Если вы не задали заголовок истек, и вы не используете привязку и минимизацию, то эвристика свежести браузеров будет отмечать активы устаревшими после несколько дней, и браузеру потребуется запрос валидации для каждого актив

а также показано здесь, в изображении, полученном с одной и той же странице, где они испытаны с Скрипач: 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. Второй запуск:

    :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, самозагрузки, JQuery и CSS (мои связки!) Находятся в кэше. Это объясняет, почему, если мы загружаем ту же страницу в 2-х разных браузерах, мы получим ту же строку запроса, даже после того, как загруженные 5mins друг от друга:

  • Край: Edge
  • Firefox Dev Издание: Firefox Dev Edition
+0

Спасибо за тщательный тест, при этом procmon смог подтвердить, что сервер кэширует комплект памяти сценариев. Я пытался измерить влияние дублирующих скриптов (один и тот же скрипт в разных пакетах) для большого приложения и выглядит так, что эти сценарии выходят в память пула приложений до тех пор, пока они не будут переработаны, а пакеты будут воссозданы – nothingisnecessary