
010de2238e6d29734edad9f21ba93597.ppt
- Количество слайдов: 9
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4 -го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Технологии разработки Internetприложений ASP. NET приложения – компиляция проф. В. К. Толстых, www. tolstykh. com
Модель компиляции ASP. NET Напомним, что, ASP. NET в отличие от ASP производит компиляцию, а не интерпретацию, . aspx страниц. q Сервер IIS: при запросе файла. aspx драйвер http. sys сначала проверяет наличие готового ответа в кэше. Если такового нет, то IIS загружает рабочий процесс (w 3 wp. exe) в соответствующем пуле приложений, запускает необходимые модули IIS (авторизация…) для предварительной обработки запроса. Далее запрос передаётся пользовательскому обработчику, т. е. запрошенной странице. aspx. q Среда ASP. NET: определяет, требуется ли компиляция страницы (нет сохраненной сборки. dll или страница была изменена). При необходимости начинается компиляция страницы или всего веб-приложения с языка С# на язык CIL (Common Intermediate Language – высокоуровневый ассемблер). Все компиляторы, поддерживающие платформу. NET, должны транслировать код с языков высокого уровня ( C#, Managed C++, Visual Basic . NET, Visual J#. NET) на язык CIL. При этом осуществляется разбор (parsing) aspx-страницы с генерацией исходного CIL-кода (создание серверных элементов управления, построение дерева элементов, отметка контроля модификации файла).
… парсинг В результате парсинга нашей страницы мы получаем конкретные экземпляры класса Page на языке CIL. Каждому серверному элементу управления из файла. aspx ставится в соответствие свой CIL-экземпляр. NET Framework. Например, элемент <asp: Label ID="Label 1" runat="server"></asp: Label> преобразуется в экземпляр класса. NET Framework: @__ctrl = new global: : System. Web. UI. Web. Controls. Label(); После парсинга идёт непосредственно компиляция CIL-кода и сохранение каждой страницы или группы страниц в виде сборки (assembly) – динамической библиотеки. dll. Все файлы сборок можно найти в директории «C: WINDOWSMicrosoft. NETFrameworkвесрия Temporary ASP. NET Filesимя_приложения. . . » соответствующей версии. NET. Заметим, что при желании полученные библиотеки можно декомпилировать утилитой ildasm. exe.
… компиляция Далее загружается среда CLR (Common Language Runtime) платформы. NET Framework и активизируется конвейер HTTP, которому и передаются все созданные и возможно заранее предкомпилированные сборки, находящиеся в папке bin. Сборки, в свою очередь, перед фактическим исполнением компилируется в реальном времени – на лету (JIT-компиляция) в нативный код – машинный код в виде команд конкретной вычислительной машины, которая выполняется непосредственно процессором. Здесь осуществляется рендеринг кодов сборок, который в конечном итоге приводит к созданию HTML-ответа. После JIT-компиляции исполняемый машинный код может кэшироваться и последующие обращения к нему происходят напрямую, не затрагивая конвейер HTTP, – естественно, очень быстро. Если запуск приложения был с отладкой (в web. config есть строка <compilation debug=”true” />), то открывается браузер для просмотра результатов работы. Если исходный код страницы. aspx изменяется, то при её первом запросе она заново компилируется. Если страница уже была ранее скомпилирована, т. е. для неё есть соответствующая сборка. dll, то данная сборка используется в качестве обработчика запрошенной страницы или же, если страница ранее была кэширована, то клиенту отправляется копия кэш-страницы, не затрагивая весь механизм ASP. NET-среды. Таким образом имеются две области, в которых происходят задержки при обращении к. aspx странице: § § Динамическая компиляция в сборки. dll, JIT-компиляция сборок.
Пакетная компиляция ASP. NET осуществляет пакетную компиляцию (если не включён режим отладки), т. е. создаёт набор (пакет) сборок приложения. В простейшем случае – это один пакет из одной сборки. Компилятор пытается минимизировать количество сборок, не превышая при этом, максимальный размер каждой сборки. Обычно, каждая папка с файлами. aspx, . ascx, и всегда папка App_Code, компилируются в одну отдельную сборку. Пакетной компиляцией можно управлять из web. config при <compilation debug= ” false” />, например: <compilation batch=”true” – по умолчанию max. Batch. File. Size=”макс. кол-во файлов-страниц в одном пакете” max. Batch. Generated. Size=”макс. размер файла пакета в КБ”> При запросе любой страницы из каталога с batch=”true”, ASP. NET компилирует все страницы каталога и создаёт одну сборку. Т. е. вместо множества небольших dll ( – одна dll для одной страницы) получится одна большая dll для всех страниц в этом каталоге. Замечания. - Большое количество. dll-файлов может снижать производительность Windows. - Классы, включенные в. dll-сборки, не удаляются сборщиком мусора GC среды CLR из памяти работающего приложения (удаляются при освобождении всего App. Domain – домена приложения). - Страницы, не используемые всем приложением, лучше не компилировать в сборки, что можно сделать при помощи директивы @Page Compilation. Mode = ”Never”. Такие страницы (. aspx, . ascx) не должны содержать отдельного кода или включать серверный тег <script>. Они предназначены для масштабируемости больших приложений без их перезапуска и перекомпиляции.
Предкомпиляция проекта Заранее компилируемые. dll-сборки предоставляют следующие преимущества: 1. Сайт быстрее работает при первом запуске, 2. Исходные коды классов (файлы. cs ) можно скрыть от «посторонних» глаз. Предкомпиляцию на рабочем сервере можно сделать утилитой aspnet_compiler (из соответствующей версии Framework) с колючем –v и двумя параметрами: виртуальный каталог исходного приложения; физический каталог нового места расположения. Например, для приложения «Калькулятор» (файл /ASPNET/Work/Calculate/Default. aspx на Web-сервере) предкомпиляция может иметь вид: C: WINDOWSMicrosoft. NETFrameworkv 2. 0. 50727aspnet_compiler. exe –v /ASPNET/Work/Calculate C: Inetpubwwwrootnew. Calculate Файлы изображений, web. config, html не компилируются – они просто копируются по целевому пути. Если полученный предкомпилированные ресурс будет самостоятельным приложением, то новую папку new. Calculate необходимо преобразовать в виртуальный каталог IIS. Теперь сайт «Калькулятор» будет сразу (быстро) выполняться при запросе браузера по адресу: http: //сервер/new. Calculate Здесь подразумевается, что файл Default. aspx в каталогах сервера загружаются по умолчанию.
Предкомпиляция сборок в Visual Studio Файлы классов. cs в папке App_Code веб-проекта целесообразно заранее компилировать в пакеты . dll сборок. Добавляем проект Library (в том же Solution), перемещаем в него необходимые файлы классов. cs. Добавляем необходимые ссылки на классы. NET (System. Web…), компилируем библиотеку (Build Library)
Добавление предкомпилированых сборок в проект Visual Studio Исходный проект Библиотека предкомпилированных сборок Если исходный проект (в примере – people), не содержал папку Bin предкомпилированных сборок, то создаём в нём Bin и копируем в неё полученный файл сборки Library. dll. Не забудьте удалить из проекта исходные файлы классов. cs сборки Library.
Предкомпиляция страниц и пользовательских элементов управления в Visual Studio Пользовательские элементы управления и отдельные страницы так же можно заранее компилировать в самостоятельные сборки, если они не существенно зависят от настроек web. confg. Создайте проект ASP. NET без Global. asax, поместите туда страницы с необходимыми пользовательскими компонентами, компилируйте и опубликуйте его в новом сайте. Там вы найдёте необходимые сборки. После публикации приложения вы получите сайт с файлами только визуальной разметки – . aspx без исходных кодов. sс классов страниц и компонент. Сопутствующие классы будут представлены. dll-сборками в папке bin. Файл сборок страниц проекта будет иметь имя проекта в котором вы компилировали исходные страницы, например, Web. Application. dll, а файл сборок пользовательских элементов управления – User. Controls. dll.
010de2238e6d29734edad9f21ba93597.ppt