ASP.NET производительность MVC


Я нашел некоторые дикие замечания, что ASP.NET MVC в 30 раз быстрее, чем ASP.NET веб-формы. Какова реальная разница в производительности, было ли это измерено и каковы преимущества производительности.

Это, чтобы помочь мне рассмотреть вопрос о переходе от ASP.NET форм для ASP.NET в MVC.

14 102

14 ответов:

мы не выполнили тип масштабируемости и perf тесты, необходимые, чтобы прийти к каким-либо выводам. Я думаю, что ScottGu может обсуждали потенциал производительности целей. По мере продвижения к бета-версии и RTM, мы будем внутренне делать больше perf тестирования. Однако я не уверен, что наша политика заключается в публикации результатов тестов perf.

в любом случае, любые такие тесты действительно должны учитывать реальные приложения...

Я думаю, что это будет трудный вопрос, чтобы окончательно ответить, как так много будет зависеть от A) Как вы реализуете приложение WebForms, и B) Как вы реализуете приложение MVC. В своих" сырых " формах MVC, вероятно, быстрее, чем WebForms, но годы и годы инструментов и опыта создали ряд методов для создания быстрых приложений WebForms. Я был бы готов поспорить, что старший ASP.NET разработчик может создать приложение WebForms, которое соперники скорость любого приложения MVC-или, по крайней мере, достичь незначительной разницы.

реальная разница- как предложил @tvanfosson - находится в тестируемости и чистой SoC. Если повышение производительности является вашей главной заботой, я не думаю, что это отличная причина для перехода на веб-формы и начала перестройки в MVC. По крайней мере, пока вы не попробуете доступные методы оптимизации веб-форм.

он уменьшил одну из моих страниц с 2 МБ полезной нагрузки до 200k, просто исключив viewstate и сделав его приемлемым программно для работы с представленным выводом.

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

Я думаю, что многие люди, которые думают, что веб-формы по своей сути медленные или ресурсоемкие, ставят вину в неправильном месте. 9 раз из 10, когда я прихожу для оптимизации приложения webforms, есть слишком много мест, где авторы приложений неправильно понимают цель viewstate. Я не говорю, что viewstate совершенен или что-то еще, но слишком легко злоупотреблять им, и именно это злоупотребление вызывает раздутое поле viewstate.

этот статья была неоценима, помогая мне понять многие из этих злоупотреблений. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

для того, чтобы сделать допустимое сравнение между MVC и WebForms мы должны быть уверены, что оба приложения используют архитектуры правильно.

мое тестирование показывает что-то между 2x и 7x больше req/sec на MVC, но это зависит от того, как вы строите приложение webforms. С помощью всего лишь текста "hello world" на нем, без какого-либо управления на стороне сервера, mvc примерно на 30-50% быстрее.

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

Я думаю, что проблема здесь в том, что независимо от того, насколько быстрее ASP.Net MVC-это чем старые веб-формы, это не будет иметь значения, потому что большая часть времени занята в базе данных. Большую часть времени, вы веб-серверы будут сидеть на 0-10% загрузки процессора просто ждет на сервере базы данных. Если вы не получаете очень большое количество просмотров на вашем сайте, и ваша база данных очень быстро, вы, вероятно, не заметите большой разницы.

единственные конкретные цифры, которые я могу найти, которые с самого начала ASP.NET MVC-разработка находится на этом форуме-тема:

http://forums.asp.net/p/1231621/2224136.aspx

сам Роб Коннери несколько подтверждает утверждение, что Скоттгу утверждал, что ASP.NET MVC может обслуживать 8000 запросов в секунду.

может быть, Джефф и его команда могут дать какой-то намек с их развитием этого сайта.

вопреки общепринятому мнению, оптимизированное использование веб-форм полностью убивает MVC с точки зрения производительности raw. Webforms был гипер-оптимизирован для задачи обслуживания html гораздо дольше, чем MVC.

метрики доступны на http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

каждое сравнение mvc находится в нижнем среднем / Нижнем верхнем рейтинге списка, в то время как оптимизированные места использования веб-форм в списке верхний-средний / верхний-нижний рейтинги.

анекдотическая, но очень серьезная проверка этих показателей,www.microsoft.com обслуживается webforms не MVC. Кто-нибудь здесь считает, что они не выбрали бы MVC, если бы это было эмпирически быстрее?

на самом деле нет никакого способа ответить на это. MVC использует механизм просмотра веб-форм по умолчанию и может быть настроен на использование любого количества пользовательских механизмов просмотра, поэтому, если вы хотите сравнить производительность, вам нужно быть более конкретным.

Я начал работать в MVC около года назад, я был вдохновлен, но не впечатлило.

Я ненавижу состояние просмотра и вижу его как корень всего зла с точки зрения ASP.NET вот почему я просто не использую его и, честно говоря, почему бы вам?

Я взял в основном ASP.NET концепция MVC Framework и построил это по-своему. Но я кое-что изменил. Я построил свой код упаковки контроллера или код маршрутизации URL вокруг dynamic перекомпиляция.

теперь я бы сказал, что ASP.NET приложения MVC будут быстрее на основе того, как вы его используете. Если вы полностью откажетесь от веб-форм, вы будете быстрее, потому что ASP.NET жизненный цикл и объектная модель огромны.

когда вы пишете, вы создаете экземпляр армии... нет, подождите, легион объектов, которые будут участвовать в рендеринге вашего представления. Это будет медленнее, чем если бы вы где-то выражали минимальное количество поведения в ASPX сама страница. (Меня не волнует абстракция view engine, потому что поддержка страниц ASPX в Visual Studio приличная, но я полностью отбросил WebForms как концепцию и в основном любые ASP.NET фреймворк из-за раздувания кода или невозможности изменить то, что связывает мое приложение).

Я нашел способы полагаться на динамическую перекомпиляцию (System.Отображение.Эмиссия) для эмиссии объектов специального назначения и кода, когда это необходимо. Выполнение этого кода происходит быстрее, чем отражение, но первоначально построенный через службу отражения. Это дало моей MVC flavored framework большую производительность, но также очень статически типизировано. Я не использую строки и коллекции пар имя/значение. Вместо этого мои пользовательские службы компилятора идут в переписывает сообщение формы к действию контроллера передается ссылочный тип. За сценой происходит много вещей, но этот код быстрый, намного быстрее, чем WebForms или MVC Framework.

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

Я бы рекомендовал больше людей, чтобы попробовать это.

проекты, созданные с помощью visual studio. Один из них-шаблон mvc4, другой-WebForm (tranditional). И когда сделать нагрузочный тест с WCAT, это результат,

MVC4 довольно медленный, чем WebForms, любые идеи?

enter image description here

MVC4

  • может получить около 11 rps
  • rps довольно низкий как 2-cpu, так и 4-cpu server

enter image description here

"веб-формы" (аспн)

  • может получить выше 2500 rps

  • убийца производительности был найден, что это ошибка MVC Bata или RC. И производительность будет улучшена, как только я удалю связки вещей. Теперь последняя версия исправила это.

производительность зависит от того, что вы делаете... Обычно MVC работает быстрее, чем asp.net в основном потому, что Viewstate отсутствует и потому, что MVC работает больше с обратным вызовом, чем с обратной связью по умолчанию.

Если вы оптимизируете свою страницу веб-формы, вы можете иметь ту же производительность, что и MVC, но это будет много работы.

кроме того, их много nugets для MVC (а также для Webform), чтобы помочь вам улучшить производительность веб-сайта, как объединить и минимизировать css и javascripts, сгруппировать ваши изображения и использовать их в качестве спрайта, и так далее.

производительность веб-сайта в значительной степени зависит от вашей архитектуры. Чистый с хорошим разделением проблем принесет вам более чистый код и лучшее представление о том, как повысить производительность.

вы можете взглянуть на этот шаблон "шаблон Neos-SDI MVC", которая создаст для вас чистую архитектуру с большим количеством улучшений производительности по умолчанию (проверьте MvcTemplate сайт).

enter image description here

Я сделал небольшой тестовый эксперимент VSTS с некоторым базовым кодом и нашел ASP.NET время отклика MVC должно быть в два раза быстрее по сравнению с ASP.NET веб-формы. Выше приведен прилагаемый график с сюжетом.

вы можете прочитать этот эксперимент нагрузочного теста в деталях из этой статьи CPhttps://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari