проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – оптимизация скорости работы приложений Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета
Что надо оптимизировать? 1.Скорость работы приложения на сервере, 2.Скорость работы Web-страниц у клиента в браузере, 3.Скорость доставки ответа клиенту.
1. 1. Скорость работы приложения на сервере Пишите качественные коды C#, которые могли бы быстро работать и генерировать минимальные размеры HTTP ответов клиенту. Кэшируйте вывод страниц как на сервере, так и для браузеров клиентов где это возможно, например, через Кэшируйте Не кэшируйте вывод SQL-сервера, а кэшируйте компоненты и страницы, где этот вывод присутствует. Делайте предкомпиляцию и разумную пакетную компиляцию сборок.разумную пакетную компиляцию Если приложение имеет много сборок и файлов – сжимайте их в одну управляемую сборку, которая будет хранить сжатые сборки в себе и при необходимости загружать их динамически. Загрузка приложения, в котором много зависимостей, занимает обычно больше времени, чем загрузка одного исполняемого файла с последующей подгрузкой необходимых модулей прямо в памяти. Для этого можно использовать открытые библиотеки CodePlex: NBox, SevenZipSharp …NBox SevenZipSharp
2. 2. Скорость работы в браузере Минимизируйте количество файлов, запрашиваемых браузером для каждой Web- страницы – это очень важно! (- и для скорости работы браузера, и для скорости передачи) не разделяйте стили на несколько файлов для одной и той же страницы, скрипты объединяйте в файлы так, чтобы для каждой страницы запрашивался один файл и он содержал минимальное количество «сторонних» скриптов, которые могли бы использоваться на соседних страницах, не злоупотребляйте графическими файлами и по количеству и по размеру, множество графических файлов можно объединить в один и далее посредством CSS background-image и background-position показывать сегменты этого файла через теги и. Размещайте CSS файлы, стили в начале страницы, а скрипты – в конце. При настройке кэширования в приложении устанавливайте кэширование статических компонент на стороне клиента на максимальный срок (never expire).
3. 3. Трафик ответа клиенту Включайте в IIS сжатие ответов Web-приложения (подробнее далее) если передаются большие файлы по каналам с низкой пропускной способностью. Сжимайте файлы CSS и JavaScript посредством автоматического удаления комментариев, лишних пробелов, переносов строк и т.п., например, с использованием библиотеки YUI Compressor for.Net (пример см. далее).YUI Compressor for.Net Объединяйте, сжимайте и кэшируйте файлы CSS и JavaScript в реальном времени посредством добавления обработчика HttpCombiner в ваш проект (пример см. далее) HttpCombiner
Сжатие ответов Web-приложения статическое сжатие результаты статических ответов (.html …) могут быть записаны в кэш IIS, используемый несколькими запросами, без затрат ресурсов ЦП. динамическое сжатие IIS сжимает версии динамического выхода (.aspx …), но не записывает их в кэш Такое сжатие потребляет значительные ресурсы времени ЦП и памяти. Кэш статического сжатия устанавливается для всего сервера Или web.config : HTTP-сжатие, начиная с IIS 7.0, настраивается путем указания типов MIME, которые могут быть сжаты. Настройки сжатия содержатся в applicationHost.config. Их можно изменять и дополнять при помощи командной строки, например, для типа MIME text/xml это будет иметь вид: appcmd set config /section:httpCompression /+staticTypes.[mimeType='text/xml',enabled='true'] /commit:apphost IIS осуществляет сжатие ответов (обычно по UNIX-алгоритму gzip ) при условиях: 1.Разрешение сжатия включено на сервере, 2.Заголовок HTTP-запроса от браузера содержит Accept-Encoding с указанием поддерживаемого алгоритма сжатия, необходимого для декомпрессии ответа.
Yahoo! YUI Compressor for.Net сжатие файлов.css и.js Загрузите файл сборок « Yahoo.Yui.Compressor v….zip (for.NET …).zip » и пример файла настроек MSBuild.xml. Yahoo.Yui.Compressor v….zip (for.NET …).zip Создайте проект «ASP.NET Web Application» и поместите в его папку MSBuild полученные сборки и файл настроек. Уточните в файле MSBuilder.xml для элемента путь к сборке AssemblyFile= "Yahoo.Yui.Compressor.dll", для элемента пути исходных.css и.js файлов, а для – конечных (сжатых) файлов. В свойствах проекта добавьте Post-build событие. Компилируйте проект – Build.
HttpCombiner.ashx Пользовательский HTTP-обработчик для объединения файлов.css и.js, их сжатия (gzip ) и кэширования в ASP.NET ПримерПример подключения стилей и скриптов при помощи HttpCombiner.ashx на HTML-странице. Объединённые файлы, присоединяемые на этой странице, определяются в файле web.config. Это ПО типа «as is», т.е. – отсутствие каких-либо гарантий. Например, какой- либо прокси-сервер может «неадекватно» обработать сжатый ответ. Объединённые файлы