У меня есть сайт ASP.NET (не MVC), развернутый в IIS. Я установил параметры предварительной компиляции (для развертывания / публикации). Настройки находятся ниже на изображении. Я пробовал вариант настроек ниже и на первый взгляд, я не вижу никаких значительных улучшений от этого. Для проверки я развертываю предварительно скомпилированный и не предварительно скомпилированный файл на двух разных сайтах IIS. Я захожу и перерабатываю пул приложений для каждого сайта (или сброс IIS) ... после этого я попадаю на оба сайта по отдельности, и им обоим требуется столько же времени, чтобы отобразить загрузку первой страницы (т.е. кэшировать пулы приложений?), И то последующие вызовы других aspx-страниц занимают примерно такое же время (в предварительно скомпилированном и не предварительно скомпилированном). Я что-то упускаю? Работает ли предварительная компиляция только для огромных сайтов? Майнит сайт среднего размера, на котором есть вызовы API, вызовы БД и т. Д.
Существуют ли определенные настройки, которые мне нужны, чтобы сократить время загрузки для первых обращений к сайту после перезапуска пула приложений? Или вообще улучшить время отклика при первом обращении к aspx или ascx, которые еще не были скомпилированы?
Разница между «предварительно скомпилированными» и «не предварительно скомпилированными» заключается в том, что страницы сайта «не предварительно скомпилированные» будут динамически компилироваться при первом запросе на каждую из этих страниц компилятором .net (csc.exe / vbc.exe , вы можете увидеть их всплывающее окно на вкладке процессов диспетчера задач). Таким образом, для каждой страницы потребуется однократное сокращение времени компиляции, хотя обычно оно незначительно. Если ваш веб-сайт также имеет файлы кода в каталоге / app_code, они также будут скомпилированы перед запуском веб-сайтов, поэтому первоначальный запуск должен быть немного медленнее, чем «предварительно скомпилированная» версия. То есть, если элемент компиляции вашего «некомпилированного» сайта в web.config имеет атрибут «batch», установленный на false, в противном случае он будет тратить время на компиляцию всех страниц прямо при запуске, что может занять слишком много времени в зависимости от размера вашего сайт. Элемент компиляции (схема параметров ASP.NET)
Однако после того, как файлы / app_code и, например, default.aspx будут скомпилированы на "не предварительно скомпилированном" сайте, между ними не будет никакой разницы в фактической производительности.
Сброс IIS или перезапуск пула приложений также не покажут никаких различий, поскольку после развертывания одного и запуска обоих оба сайта компилируются. Сброс IIS / сброс пула приложений не приведет к перекомпиляции «не предварительно скомпилированного» сайта, а только изменение файлов / повторное развертывание.
Взглянуть Понимание динамической компиляции ASP.NET, важно понимать, что это значит для сравнения двух.