проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – компиляция Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета
Напомним, что, ASP.NET в отличие от ASP производит компиляцию (а не интерпретацию).aspx страниц. При запросе файла.aspx IIS сначала проверяет наличие готового ответа в кэше. Если такового нет, то IIS загружает рабочий процесс ( w3wp.exe ) в соответствующем пуле приложений, запускает необходимые модули IIS 7 (авторизация…) для предварительной обработки запроса. Далее запрос передаётся обработчику, т.е. запрошенной странице.aspx. Среда ASP.NET определяет, требуется ли компиляция страницы (нет сохраненной сборки или страница была изменена). При необходимости начинается компиляция страницы или всего веб-приложения с языка С# на язык IL (Intermediate Language). Осуществляется разбор (parsing) страницы с генерацией исходного кода (создание серверных элементов управления, построение дерева элементов, отметка контроля модификации файла) и непосредственно компиляция и сохранение каждой страницы или группы страниц в виде сборки (assembly) – динамической библиотеки.dll. Модель компиляции ASP.NET Мы получаем конкретные экземпляры класса Page компилируемых страниц. Каждому серверному элементу управления из файла.aspx ставится в соответствие свой экземпляр.NET Framework. Например, элемент преобразуется в экземпляр класса.NET = new global::System.Web.UI.WebControls.Label(); Все файлы сборок можно найти в директории «C:\WINDOWS\Microsoft.NET\Framework\ весрия \ Temporary ASP.NET Files\ имя_приложения \... » соответствующей версии.NET. Заметим, что при желании полученные библиотеки можно декомпилировать утилитой ildasm.exe.
Если запуск приложения был с отладкой (в web.config есть строка ), то открывается браузер для просмотра результатов работы. Если исходный код страницы.aspx изменяется, то при её первом запросе она заново компилируется. Если страница уже была ранее скомпилирована, т.е. для неё есть соответствующая сборка, то данная сборка используется в качестве обработчика запрошенной страницы или же, если страница ранее была кэширована, то клиенту отправляется копия кэш-страницы, не затрагивая весь механизм ASP.NET-среды. Таким образом имеются две области, в которых происходят задержки при обращении к.aspx странице: Динамическая компиляция в сборки, JIT-компиляция сборок. Далее загружается среда CLR (Common Language Runtime) платформы.NET Framework c конвейером HTTP, которому и передаются все созданные и ранее предкомпилированные сборки, находящиеся в папке bin. Сборки содержат код IL, который в свою очередь перед фактическим исполнением компилируется в исполняемый код – это т.н. JIT-компиляция посредством среды.NET Framework. Здесь осуществляется рендеринг кодов сборок, который в конечном итоге приводит к созданию HTML-ответа. После JIT-компиляции исполняемый код может кэшироваться и последующие обращения к нему происходят напрямую, не затрагивая всё ASP.NET-среду, – естественно, очень быстро. … компиляция
ASP.NET осуществляет пакетную компиляцию (если не включён режим отладки), т.е. создаёт набор (пакет) сборок приложения. В простейшем случае – это один пакет из одной сборки. Компилятор пытается минимизировать количество сборок, не превышая при этом, максимальный размер каждой сборки. Обычно, каждая папка с файлами.aspx,.ascx, и всегда папка App_Code, компилируются в одну отдельную сборку. Пакетной компиляцией можно управлять из web.config при, например: При запросе любой страницы из каталога с batch=true, ASP.NET компилирует все страницы каталога и создаёт одну сборку. Т.е. вместо множества небольших dll (одна dll для одной страницы) получится одна большая dll для всех страниц в этом каталоге. Пакетная компиляция Замечания. -Большое количество.dll -файлов может снижать производительность Windows. -Классы, включенные в.dll -сборки, не удаляются сборщиком мусора из памяти работающего приложения (удаляются при освобождении всего AppDomain приложения). -Страницы, не используемые всем приложением, лучше не компилировать в сборки, что можно сделать при помощи CompilationMode = Never. Такие страницы (.aspx,.ascx ) не должны содержать отдельного кода или включать серверный тег. Они предназначены для масштабируемости больших приложений без их перезапуска и перекомпиляции.
Предкомпиляция проекта Заранее компилируемые.dll -сборки предоставляют следующие преимущества: 1. Сайт быстрее работает при первом запуске, 2. Исходные коды классов (файлы.cs ) можно скрыть от «посторонних» глаз. Предкомпиляцию на рабочем сервере можно сделать утилитой aspnet_compiler (из соответствующей версии Framework) с колючем –v и двумя параметрами: виртуальный каталог исходного приложения; физический каталог нового места расположения. Например, для приложения «Калькулятор» (файл /ASPNET/Work/Calculate/Default.aspx на Web-сервере) предкомпиляция может иметь вид: C:\WINDOWS\Microsoft.NET\Framework\v \aspnet_compiler.exe –v /ASPNET/Work/Calculate C:\Inetpub\wwwroot\newCalculate Файлы изображений, web.config, html не компилируются – они просто копируются по целевому пути. Если полученный предкомпилированные ресурс будет самостоятельным приложением, то новую папку newCalculate необходимо преобразовать в виртуальный каталог IIS. Теперь сайт «Калькулятор» будет сразу (быстро) выполняться при запросе браузера по адресу: Здесь подразумевается, что файл Default.aspx в каталогах сервера загружаются по умолчанию.
Предкомпиляция сборок в Visual Studio Добавляем проект Library (в том же Solution), перемещаем в него необходимые файлы классов.cs, добавляем необходимые ссылки (System.Web…), компилируем библиотеку (Build Library) Файлы классов.cs в папке App_Code веб- проекта целесообразно заранее компилировать в пакеты.dll сборок.
Добавление предкомпилированых сборок в проект Visual Studio Если исходный проект (в примере – people), не содержал папку Bin предкомпилированных сборок, то создаём в нём Bin и копируем в неё полученный файл сборки Library.dll. Не забудьте удалить из проекта исходные файлы классов.cs сборки Library.
Предкомпиляция страниц и пользовательских элементов управления в Visual Studio Пользовательские элементы управления и отдельные страницы так же можно заранее компилировать в самостоятельные сборки, если они не существенно зависят от настроек web.confg. Создайте проект ASP.NET Web-Application без Global.asax, компилируйте и опубликуйте его в новом сайте. Там вы найдёте необходимые сборки. После публикации приложения вы получите сайт с файлами только визуальной разметки –.aspx без исходных кодов.sс классов этих страниц и компонент. Сопутствующие классы будут представлены. dll -сборками в папке bin. Файл сборок страниц проекта будет иметь имя проекта в котором вы компилировали исходные страницы, например, WebApplication.dll, а файл сборок пользовательских элементов управления – UserControls.dll. Отладочную информацию в виде.pdb -файлов (program database) в новом сайте можно «выбросить».