310 likes | 623 Views
Оптимизация производительности ASP .NET MVC приложений. Сергей Руденко Sr. Software Engineer at AWS MCPD srudenko.wordpress.com | srudenko@live.ru | @srudenko. Параметры оценки производительности. Сервер Время формирования страницы Количество запросов в секунду
E N D
Оптимизация производительности ASP .NET MVC приложений Сергей Руденко Sr. Software Engineerat AWS MCPD srudenko.wordpress.com | srudenko@live.ru | @srudenko
Параметры оценки производительности • Сервер • Время формирования страницы • Количество запросов в секунду • Объем передаваемых данных • Клиент • Время обработки страницы на клиенте • и т.д.
Определение требований к производительности • Что будем тестировать? (/home/index) • Задать требования: • Время выполнения или TTLB • Количество запросов в секунду + количество пользователей • Частота обращений к внешним ресурсам(база, прочие сервисы и т.д.)
Определение требований к производительности • /home/index • Время обработки страницы – 1 сек • До 100 запросов/сек к веб-серверу • До 200 запросов/сек к базе данных
План тестирования • Создание сценария тестирования • Настройка теста • Выполнение теста • Анализ результатов
Демонстрация Настройка и проведение тестирования
Наиболее частые проблемы • База данных • много запросов • не оптимизированные запросы • ORM ?
Компиляция в Release • Компиляция в Release mode! • Как проверить: isis.codeplex.com • PM> Install-Package isis
Демонстрация Определение версий сборок
Кэширование выходного потока • Кэширование выходного потока • [OutputCache] атрибут • Применим: • Кэширование Action-методов • Кэширование контроллеров
Что можно кэшировать WIN!!!
Демонстрация Кэширование выходного потока
Кэширование данных • Используется, где не работает OutputCache • Кэширование через SQL Dependency или короткий период времени
Демонстрация Кэширование данных
Запись данных • Избегать блокировок при записи • Асинхронная обработка на сервере • Асинхронные Ajax запросы от клиента • Отложенная обработка
Профилирование приложений • VS Performance Analyzer (MS) • dotTRACE (JetBrains) • ANTS Performance Profiler (Redgate) • и т.д.
Сравнение View Engines • MVC 2 Template on MVC 2 • 8135 Requests/sec • MVC 2 Template on MVC 3 • 7987 Requests/sec • MVC 3 WebformsView Engine on MVC 3 • 7457 Requests/sec • MVC 3 Razor View Engine on MVC 3 • 7136 Requests/sec http://blogs.msdn.com/b/marcinon/archive/2011/01/17/mvc-3-performance.aspx
Производительность MVC • Отключить неиспользуемые View Engines • Html.EditorFor, Html.DisplayForвседа ищут подходящий темплейт • Удалить не используемые Views
… а также • Не передавать NULL в строго типизированную View • Html.TextBoxFor(m => m.Name) вызовет NullReferenceException • Исключение будет поймано и обработано, но негативно скажется на производительности
NULL и View Контроллер View
Результат http://stevesmithblog.com/blog/improving-asp-net-mvc-application-performance-at-mvcconf/
Дополнительные материалыи ссылки • 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.aspx • http://blogs.msdn.com/b/marcinon/archive/2011/02/07/mvc-performance-tips.aspx • http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs • http://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cs • http://mvcmusicstore.codeplex.com/ • http://isis.codeplex.com/
Questions? Сергей Руденко srudenko@live.ru srudenko.wordpress.com @srudenko