Какова максимальная скорость рендеринга страниц в MVC.NET и как ее улучшить? - PullRequest
1 голос
/ 18 декабря 2010

Я измеряю скорость рендеринга страницы, запускаю StopWatch в OnBeginRequest и останавливаю его в OnResultExecuted, тем самым измеряя весь цикл рендеринга страницы. Я получаю следующие метки времени при рендеринге:

0 мс - OnBeginRequest
+1,1 мс - OnActionExecuting
+2 мс - OnActionExecuted
+3 мс - OnResultExecuted

три последние метки времени, конечно, зависят от приложения, но мне интересно, что происходит в течение 1,1 миллисекунды между моментом, когда приложение получает запрос, и метод действия получает контроль?

Как сократить это время? Какова максимальная скорость рендеринга, которую вы когда-либо получали с MVC.NET (страниц в секунду), и как вы это делали?

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Время, затрачиваемое на визуализацию страницы, отличается от количества запросов в секунду, которые не являются напрямую коррелированными значениями (аналогично FPS и времени на кадр в разработке игры см. Здесь ). Особенно в многопоточной среде.

Лично на моей машине пустые приложения MVC отображают контроллер по умолчанию и просматривают через 0,8-1,1 мс. Конечно, коллекция маршрутов почти пуста, что, по-видимому, экономит много времени. Есть несколько оптимизаций, которые вы можете сделать, вы можете легко найти их в сети, одна из основных из них: очистите ваши движки представления и добавьте только тот движок представления, который вы используете, что позволит сэкономить на обращении к жесткому диску на каждом запрос.

ViewEngines.Clear();
ViewEngines.Engines.Add(new WebFormViewEngine()));

Что касается реальных веб-сайтов, мне удалось получить реальное приложение MVC, которое обрабатывает более 2000 запросов в секунду. Одна вещь, которую вы, возможно, захотите попробовать, - это поместить ваши файлы Temp ASP.Net и папку вашего веб-сайта на диск ОЗУ, поскольку MVC и IIS обращаются к файлу физической сборки при каждом запросе, но в действительности выигрыш слишком мал, чтобы быть заметным или стоит чьего-то времени.

Если посмотреть на исходный код , то здесь время генерации страницы составляет 1 мс (это не совсем так, поскольку оно находится в середине представления, но, тем не менее, очень близко). Этот сервер работает на RAM-диске. Вы можете немного ускорить его, переместив временные файлы ASP.Net на диск ОЗУ, но я не смог получить его менее чем за 0,8 мс, несмотря ни на что.

1 голос
/ 18 декабря 2010

Многое происходит: маршруты анализируются, контроллер находится и создается, вызывается метод действия.Убедитесь, что вы работаете в режиме разблокировки:

<compilation debug="false" />

, чтобы результаты ваших измерений были более реалистичными.В действительности время между получением запроса и вызовом действия контроллера никогда не является узким местом.Это время, потраченное на действия контроллера, которое вы должны сосредоточить на сокращении.Это где ваше приложение может получить реальное повышение производительности.Существуют различные методы повышения производительности, и популярным является использование кэширования.

Согласно Gu :

Современная сборка ASP.NET MVC 3 RC2 содержитмножество исправлений ошибок и оптимизация производительности.Наши последние тесты производительности показывают, что ASP.NET MVC 3 теперь быстрее, чем ASP.NET MVC 2, и что существующие приложения ASP.NET MVC будут испытывать незначительное увеличение производительности при обновлении для работы с использованием ASP.NET MVC 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...