Когда в проекте слишком много страниц, IIS запускается, и сайт работает очень медленно при первом открытии, потому что проект не скомпилирован заранее на момент релиза, а динамически компилируется при посещении веб-страницы. Если вы хотите улучшить производительность существующего сайта и провести проверку ошибок, при публикации проекта необходимо выбрать «Предкомпиляция во время релиза».
Знакомство
Для небольших проектов публикация по стандартным настройкам может практически выполнять нормальную работу: первая страница открывается за 56 секунд (в зависимости от конфигурации сервера), а первое открытие других страниц — за 12 секунд, а не за мгновенное открытие.
Когда функции проекта становятся сложными и количество файлов увеличивается, на открытие первой страницы после публикации уходит более 30 секунд, а на первое открытие других страниц — около 10 секунд, а не на первое мгновенное открытие.
Это связано с тем, что проект не скомпилирован заранее на момент релиза, а динамически компилируется при доступе пользователя к веб-странице, и после переработки пула приложений или изменения файлов проекта он будет перекомпилирован и снова пережить медленный «первый раз», что недопустимо.
Преимущества предварительной компиляции
- Производительность. Скомпилированный код выполняется гораздо быстрее, чем скриптовые языки, такие как ECMAScript или VBScript, поскольку представляет собой представление, ближе к машинному коду и не требует дополнительного анализа.
- Безопасность. Скомпилированный код сложнее в обратном проектировании, чем некомпилированный исходный код, поскольку ему не хватает читаемости и абстракции, которые обладают языки высокого уровня. Кроме того, инструменты фуззирования улучшают способность скомпилированного кода сопротивляться обратному инжинирингу.
- Стабильность. Проверьте код на наличие синтаксических ошибок, проблем с безопасностью шрифта и других проблем во время компиляции. Обнаруживая эти ошибки во время сборки, можно устранить многие ошибки в коде.
- Совместимость. Поскольку код MSIL поддерживает любой язык .NET, возможно использовать ассембли, изначально написанные на других языках. Например, если вы пишете ASP.NET веб-страницу на C#, вы можете добавить ссылку на .dll-файл, написанный на Visual Basic.
ASP.NET Core предварительно скомпилирован
Предварительный состав
Предварительная компиляция — это стандартный способ для ASP .Net Core. На момент публикации все представления Razor в системе по умолчанию предварительно скомпилированы. Скомпилированный DLL представления единообразно называется xxx.PrecompiledViews.dll или xxx.Views.dll
Динамическая компиляция
Легко настроить весь проект на динамическую компиляцию — просто добавьте проект конфигурации MvcRazorCompileOnPublish со значением false
ASP.NET Предварительная подготовка сайта
Мы используем Visual Studio для публикации сайта следующим образом:
Значение опции «Разрешить обновления этого предварительно скомпилированного сайта» Когда мы публикуем .Net веб-проект, в целом, все . CS, который автоматически генерирует динамическую библиотеку ссылок DLL, которая хорошо защищает исходный код сайта, поскольку серверный код обычно размещается в . Поскольку все DLL-файлы в файле CS сгенерированы, затем загружайте их на сервер, другие не могут легко их открыть!
Однако другие файлы, такие как ashx, aspx и другие файлы, то, что в них содержится, есть то, что есть, другие могут открывать эти файлы для просмотра, хотя другие не видят CS-код, но всё равно видят HTML-код или некоторые элементы управления сервера и связанные атрибуты в ASPX-файле; Файл вроде ashx эквивалентен файлу CS, и код в нём легко увидеть;
Следовательно, . Файлы CS безопасны, но ASPX, ashx и другие файлы небезопасны; Так есть ли способ сделать загрузку веб-файлов на сервер безопасным? Есть способ — при публикации не ставить галочку «Разрешить обновления этого предварительно скомпилированного сайта»;
Проверьте «Разрешить обновления этого предварительно скомпилированного сайта»
Если при публикации веба вы поставите галочку «Разрешить обновление этого предварительно скомпилированного сайта», результат такой: весь файл сайта, кроме всех файлов CS, скомпилированных в DLL-файлы, другие файлы и оригинальный файл, не содержит изменений, что внутри или чего-то ещё, пока другие открывают его через Notepad, код, HTML-код и т.д. внутри можно увидеть другим с первого взгляда.
Кроме того, когда пользователи впервые заходят на определённую страницу, их нужно скомпилировать для поиска ошибок, и если ошибок нет, их можно получить обычный доступ, поэтому скорость будет относительно медленной. Посещения после этого — это нормально;
Снимите галочку «Разрешить обновления этого предварительно скомпилированного сайта»
Если при публикации веба не поставить галочку «Разрешить обновление этого предварительно скомпилированного сайта», результат выглядит следующим образом: 1. Все файлы CS на сайте компилируются в DLL-файлы; 2. Помимо cs-файла, другие файлы, такие как ASPX, ASHX и другие, также компилируются вместе, и каждый файл генерирует соответствующий *.compiled файл в каталоге BIN;
После этого, если вы просматриваете ASPX, ASHX и другие файлы через блокнот, вы не увидите в них никакого кода, даже разметка HTML-кода не видна, откройте такой файл, в нём только одна строка текста, содержимое — «Это файл разметки, созданный предварительно скомпилированным инструментом, его не следует удалять!», а размер этих файлов — 1kb;
Если вы попытаетесь открыть страницу сайта, то обнаружите, что, кроме первой страницы после начала проекта, которая всё равно занимает 1~2 секунды (без EF), первая страница открывается мгновенно (первая медленность EF выходит за рамки этой статьи). Это заставляет меня чувствовать, что я опоздал с готовой сборкой!
Здесь я тайно говорю вам, что удаление каталога Views не повлияет на обычное открытие веб-страницы~ Почему бы вам не позволить её удалить, мы не смеем спрашивать и не решаемся удалить.
Цель была достигнута, и появились некоторые последствия, которые нужно было решить, например, беспорядок в каталоге мусорных контейнеров.
Выберите «Не слиять». Создайте отдельные сборки для каждой страницы и управления», и в итоге получается гораздо больше App_Web_*.dll файлов в бин.
В момент релиза корень проекта генерирует файл PrecompiledApp.config. Содержание следующее:
Файл PrecompiledApp.config используется для отслеживания того, как развёртывается приложение и нужно ли ASP.NET компилировать какие-либо файлы в момент запроса. |