2013-04-23 6 views
73

Так что я недавно обновил Visual Studio 2012 для обновления 2. И вот, в следующий раз, когда я иду, чтобы опубликовать мое приложение (через File Опубликовать в данном случае) я заметил, что есть три новых варианта:Какое влияние дает новая прекомпиляция во время публикации в приложениях MVC4?

  1. Удалить все существующие файлы до публикации
  2. PreCompile при публикации (со ссылкой Настройка)
  3. Исключение файлов из папки App_Data

первый и третий варианты довольно очевидны, но я не могу найти любой документ n во втором варианте, как это применимо к MVC. Когда я проверяю это, не происходит никаких изменений в файлах, созданных на сайте, и я не вижу реальных изменений в производительности.

+0

Местоположение функции может быть новой, но сама функция не является. Даже если это _didn't_ рассматривает компиляцию MVC, WebForms совместимы в проекте MVC. –

ответ

70

Использование предкомпилятора ASP.NET может иметь следующее влияние на ваше приложение MVC:

  • Если у вас есть что-нибудь в App_Code, он будет прекомпилирована в DLL перед развертыванием. Без предварительной компиляции это могло бы произойти «на лету» во время выполнения ASP.NET.
  • Если вы выберете вариант не, сделайте ваши страницы обновляемыми (т. Е. Снимите первый флажок в диалоговом окне расширенных настроек), он также предварительно преобразует ваши представления (ASPX и Razor) вместо того, чтобы их динамически компилировать во время выполнения. Установленный по умолчанию (проверенный) параметр «Разрешить предварительно скомпилированный сайт для обновления» позволяет вам обновлять содержимое вашего представления без необходимости перестраивать весь проект.

Если у вас нет файлов в App_Code, и вы хотите, чтобы ваш сайт оставался обновляемым, он, похоже, мало что может сделать.

+0

, поэтому у меня нет файлов в App_Code, но даже если флажок снят, мои просмотры отображаются как .cshtml-файлы. Я заметил, что когда я его проверил, он обнаружил частичное представление, которое я написал некоторое время назад, в котором были синтаксические ошибки, поэтому я вижу, что он по крайней мере затрагивает эти представления. В теории я предполагаю, что это должно привести к некоторой разнице в производительности, я просто не вижу ее, потому что мои взгляды относительно малы. – Elsimer

+6

@Elsimer. Файлы .cshtml все равно будут существовать, но если их содержимое предварительно скомпилировано, вы обнаружите, что их содержимое заменено на «Это файл маркера, созданный инструментом предварительной компиляции, и его не следует удалять!». – Jimmy

+4

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