Post on 05-Feb-2016
description
Microsoft TechDayshttp://www.techdays.ru
Оптимизация производительности ASP .NET MVC приложений
Сергей РуденкоSr. Software Engineer at AWSMCPD
srudenko.wordpress.com | srudenko@live.ru | @srudenko
Microsoft TechDayshttp://www.techdays.ru
Параметры оценки производительности
СерверВремя формирования страницыКоличество запросов в секундуОбъем передаваемых данных
КлиентВремя обработки страницы на клиентеи т.д.
Microsoft TechDayshttp://www.techdays.ru
Определение требований к производительности
Что будем тестировать? (/home/index)
Задать требования:Время выполнения или TTLBКоличество запросов в секунду + количество пользователейЧастота обращений к внешним ресурсам(база, прочие сервисы и т.д.)
Microsoft TechDayshttp://www.techdays.ru
Определение требований к производительности
/home/indexВремя обработки страницы – 1 секДо 100 запросов/сек к веб-серверуДо 200 запросов/сек к базе данных
Microsoft TechDayshttp://www.techdays.ru
План тестирования
Создание сценария тестированияНастройка тестаВыполнение тестаАнализ результатов
Microsoft TechDayshttp://www.techdays.ru
Настройка и проведение тестирования
Демонстрация
Microsoft TechDayshttp://www.techdays.ru
Анализ результатов
Microsoft TechDayshttp://www.techdays.ru
Анализ результатов
Microsoft TechDayshttp://www.techdays.ru
Наиболее частые проблемы
База данныхмного запросовне оптимизированные запросыORM ?
Microsoft TechDayshttp://www.techdays.ru
Компиляция в Release
Компиляция в Release mode! Как проверить: isis.codeplex.com
PM> Install-Package isis
Microsoft TechDayshttp://www.techdays.ru
Определение версий сборок
Демонстрация
Microsoft TechDayshttp://www.techdays.ru
Кэширование выходного потока
Кэширование выходного потока[OutputCache] атрибут Применим:
Кэширование Action-методовКэширование контроллеров
Что можно кэшировать
WIN!!!
Что нельзя кэшировать
FAIL
Microsoft TechDayshttp://www.techdays.ru
Кэширование выходного потока
Демонстрация
Microsoft TechDayshttp://www.techdays.ru
Кэширование данных
Используется, где не работает OutputCache Кэширование через SQL Dependency или короткий период времени
Microsoft TechDayshttp://www.techdays.ru
Кэширование данных
Демонстрация
Microsoft TechDayshttp://www.techdays.ru
Запись данных
Избегать блокировок при записиАсинхронная обработка на сервереАсинхронные Ajax запросы от клиентаОтложенная обработка
Microsoft TechDayshttp://www.techdays.ru
Профилирование приложений
VS Performance Analyzer (MS)dotTRACE (JetBrains)ANTS Performance Profiler (Redgate)и т.д.
Microsoft TechDayshttp://www.techdays.ru
Профилирование приложений
Microsoft TechDayshttp://www.techdays.ru
Профилирование приложений
Microsoft TechDayshttp://www.techdays.ru
Сравнение View Engines
MVC 2 Template on MVC 28135 Requests/sec
MVC 2 Template on MVC 37987 Requests/sec
MVC 3 WebformsView Engine on MVC 37457 Requests/sec
MVC 3 Razor View Engine on MVC 37136 Requests/sec
http://blogs.msdn.com/b/marcinon/archive/2011/01/17/mvc-3-performance.aspx
Microsoft TechDayshttp://www.techdays.ru
Производительность MVC
Отключить неиспользуемые View Engines
Html.EditorFor, Html.DisplayFor вседа ищут подходящий темплейтУдалить не используемые Views
Отключение ViewEngines
Microsoft TechDayshttp://www.techdays.ru
… а также
Не передавать NULL в строго типизированную View
Html.TextBoxFor(m => m.Name) вызовет NullReferenceExceptionИсключение будет поймано и обработано, но негативно скажется на производительности
NULL и View
Контроллер
View
Microsoft TechDayshttp://www.techdays.ru
Результат
http://stevesmithblog.com/blog/improving-asp-net-mvc-application-performance-at-mvcconf/
Страниц/сек Время страницы (ms)
0
50
100
150
200
250
300
Без настроекRelease ModeNULL и ViewViewEnginesOutputCache
Microsoft TechDayshttp://www.techdays.ru
Дополнительные материалыи ссылки
http://stevesmithblog.com/blog/improving-asp-net-mvc-application-performance-at-mvcconf/http://stevesmithblog.com/blog/introducing-the-cachedrepository-pattern/http://stevesmithblog.com/blog/building-a-cachedrepository-via-strategy-pattern/http://blogs.msdn.com/b/marcinon/archive/2011/01/17/mvc-3-performance.aspxhttp://blogs.msdn.com/b/marcinon/archive/2011/02/07/mvc-performance-tips.aspxhttp://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cshttp://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cshttp://mvcmusicstore.codeplex.com/http://isis.codeplex.com/
Microsoft TechDayshttp://www.techdays.ru
Questions?
Сергей Руденкоsrudenko@live.rusrudenko.wordpress.com@srudenko
Microsoft TechDayshttp://www.techdays.ru