Повторный рендеринг и повторная компиляция в ASP.Net MVC очень сильно отличаются.Хотя большинство ответов здесь верны, представление компилируется только один раз (за исключением режима отладки, где он компилируется каждый раз, так что вы можете изменить представление, нажать «Обновить» и увидеть изменение, или если отметка времениизменения в файле в производстве).Он скомпилирован в класс времени выполнения, который наследуется от WebViewpage
(без ViewModel) или WebViewPage<T>
(имеет ViewModel типа T).
Класс создается для каждого необходимого представления (поэтому, если вы использовали один и тот же частичный несколько раз, вы должны создавать экземпляр каждый раз), модель заполняется, и метод execute () вызывается для создания /Поток HTML для клиента.Представление никогда не может быть кэшировано для каждой модели, поскольку это сложно сделать, и вместо этого команда MVC решила разрешить настройку кэширования для каждого метода контроллера, а не для WebViewPage.
@ ErikPhilips, большое спасибо за это. Итак, представление компилируется только один раз (независимо от того, используем ли мы OutputCache или нет)?Это метод execute, который рендерит класс времени выполнения в HtmlString, и это рендеринг, который выиграл бы от кеширования?
Сорта, но он гораздо более сложный, простой и сложный, чем этот.
Дополнительно - Выходной кэш основан на методе контроллера.Таким образом, если конфигурация выходного кэша определяет, что вызов может использовать кэшированную версию, метод контроллера никогда не называется .Вот где огромный прирост производительности.Представьте, что нет вызова для вызова БД / внешнего API, в этом нет необходимости.Вы можете настроить кеш так, чтобы он видел id=1
кешировать его в течение 30 минут.Теперь любой, кто вызывает этот метод с авторизацией и id=1
, получает кешированную строку / html.
Проще - вы добавляете OuputCacheAttribute
в метод, настраиваете его, и все готово.Довольно чертовски прост в настройке.
Сложно - Кэширование может быть более сложным , потому что вы можете визуализировать другие методы контроллера, используя Html.Action()
(Html.Partial()
, если вам не нужен макет для вашегочастичный) или предпочтительный Html.RenderAction();
(Html.RenderPartial()
, если вам не нужен макет).Раньше была проблема с кэшированием пончиковых отверстий (рекомендуется чтение), но это было исправлено в течение длительного времени.