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

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

Это поможет мне рассмотреть вопрос о переходе от ASP.NET WebForms к ASP.NET MVC.


person Community    schedule 04.09.2008    source источник
comment
Поработав с WebForms с момента их появления, я никогда не вернусь назад! MVC украл мои ‹3 - и этот сайт отлично работает на Beta 5!   -  person Jarrod Dixon♦    schedule 11.02.2009
comment
Что за откаты всех ревизий по этому вопросу ..?   -  person Nick    schedule 24.02.2009
comment
@Nick: OP откатывает все правки и удаляет все поясняющие их комментарии.   -  person GEOCHET    schedule 24.02.2009
comment
@Rich B: Верно, он удалил около 5 моих комментариев.   -  person George Stocker    schedule 24.02.2009
comment
Требуется обновление сейчас, когда мы приближаемся к выпуску MVC3.   -  person Andrew Lewis    schedule 09.11.2010


Ответы (14)


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

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

person Haacked    schedule 05.09.2008
comment
Теперь, когда выпущен MVC, есть ли какие-нибудь обновления по выпуску результатов перфоманса? - person chris; 24.04.2009
comment
Просто проголосовал за это, потому что предыдущий результат в 5999 повторений болел мне в глаза :( - person Damien; 01.05.2009
comment
К этому времени у вас обязательно должны быть числа. Хотите обновить свой ответ? Или вы обнаружили, что надоедливая политика запрещает это? - person tvanfosson; 10.06.2010
comment
Число 42. :) В общем, наши числа, вероятно, будут бесполезны для реальных приложений, поэтому мы, как правило, их не разглашаем. Однако я знаю, что другие команды в Microsoft создают крупномасштабные веб-сайты, показывающие благоприятные цифры. Другими словами, любые проблемы с производительностью, скорее всего, будут из-за ошибок программиста, чем из-за проблем с наследованием во фреймворке. Обычно виноваты взаимодействия с базой данных и внешними службами. :) - person Haacked; 16.06.2010
comment
Истинный! Пожалуйста, обновите это! Может быть, не тесты, а краткое представление, они на одном уровне или mvc немного лучше по производительности? - person gideon; 14.12.2010

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

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

person Todd    schedule 10.02.2009
comment
Отличный ответ Тодд (как удивительно для проповедника-разработчика прагматичный ответ). Единственное, что вы ошиблись, это то, что веб-форма необработанных реализаций действительно значительно быстрее. - person Chris Marisic; 28.11.2013

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

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

person DevelopingChris    schedule 05.09.2008
comment
вы могли бы исправить это надоедливое большое состояние просмотра и без MVC - person Andrei Rînea; 17.08.2009
comment
Просто для уточнения ViewState можно отключить на уровне страницы или в web.config. - person bbqchickenrobot; 01.10.2010
comment
да, но в mvc это разумное значение по умолчанию, а не дизайнерское решение, которое заставляет вас оставить все элементы управления и поставщиков, которые утверждают, что просто работают с веб-формами, заставляя веб-формы работать неправильно, удаляя их основу. Я не возражаю, что вы можете просто перекодировать эту страницу, но все приложение было лучше без viewstate. - person DevelopingChris; 02.10.2010
comment
тогда не думаете ли вы, что это худшее ваше решение - переносить все приложение в MVC, а не отключать состояние просмотра в web.config? и нет, viewstate не является основой. только если вы исследовали, состояние просмотра может храниться в кеше, а также в сеансах. - person Simple Fellow; 29.08.2014

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

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

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

person Ariel    schedule 10.02.2009

Мое тестирование показывает от 2 до 7 раз больше запросов в секунду для MVC, но это зависит от того, как вы создаете приложение веб-форм. С текстом «привет, мир», без каких-либо элементов управления на стороне сервера, mvc работает примерно на 30-50% быстрее.

person Hrvoje Hudo    schedule 22.10.2008

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

person tvanfosson    schedule 10.02.2009
comment
Мне действительно хотелось бы знать, почему кто-то проголосовал против этого ответа. - person tvanfosson; 10.06.2010
comment
Я считаю, что за него могут проголосовать против, потому что хорошо спроектированное приложение веб-форм ASP.NET так же тестируемо, как и приложение MVC. Мой опыт разработки обоих заключается в том, что MVC заставляет вас использовать чистую модель программирования (что является одной из ее самых сильных сторон, IMO). Веб-формы позволяют делать более ленивые вещи, но все же вполне возможно иметь ту же тестируемую поверхность в веб-формах. Во всяком случае, это мое предположение. - person dudemonkey; 19.10.2011
comment
Представления Razor буквально поощряют встраивание кода в представление. Это не поддается проверке и не сулит ничего хорошего для разделения проблем. То, что MVC заставляет вас писать контроллеры, не означает, что вы не можете избавиться от всего этого, если не знаете, что делаете. Опытный разработчик получит от WebForms столько же (или даже больше) производительности, чем от MVC, и будет иметь практически идентичную тестируемую поверхность. - person Richard Hauer; 01.09.2016
comment
@RichardHauer, это было буквально неправдой, когда я писал это, но они улучшили это. Поскольку у WebForms нет будущего в .NET Core, это кажется спорным вопросом. - person tvanfosson; 01.09.2016
comment
@tvanfosson Согласен - сейчас это спорный вопрос. Не уверен, какая часть, по вашему мнению, не соответствует действительности, возможно, вы возражаете против моего буквального использования? В любом случае, новые версии MVC с TagHelpers действительно помогают избавиться от привычки помещать код в макеты, что, наконец, может заставить все это работать для меня. Цените этот пост, конечно, довольно старый, но даже в то время хорошо сконструированная форма WebForms работает очень быстро, без каких-либо волшебных соединений MVC и вообще без кода, встроенного в представление. - person Richard Hauer; 09.09.2016
comment
@RichardHauer, когда я писал это, изменений в WebForms, позволяющих внедрять зависимости и повышать тестируемость, не существовало. Код позади был изначально непроверяемым. Вы можете переместить значительные суммы в библиотеки для тестирования, но всегда будет какой-то код, который вы не сможете протестировать - например, привязка данных. - person tvanfosson; 09.09.2016

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

person Kibbee    schedule 11.02.2009
comment
Ваши пользователи могут - нет состояния просмотра. - person UpTheCreek; 19.10.2009

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

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

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

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

person Seb Nilsson    schedule 05.09.2008

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

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

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

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

person Community    schedule 27.11.2013

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

person Gerald    schedule 21.10.2008

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

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

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

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

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

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

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

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

person John Leidegren    schedule 11.02.2009
comment
Так это не прямой ответ на вопрос? Однако это связано, и в этом есть пара хороших моментов. Но послушайте, это то, что я построил для своих нужд, и он мне идеально подходит. Мне также нравится делиться своими идеями, даже если очень немногие понимают, почему. - person John Leidegren; 17.10.2009
comment
Что ж, вам не нужно менять свой голос, но вы не должны отказываться от него, потому что это не «ответ». Если вы посмотрите на текст, то увидите несколько вещей, которые указывают на то, что ASP.NET MVC быстрее, чем WebForms, и почему это так. И это сводится к таким вещам, как отражение, объектная модель и служебные данные ViewState для WebForms. - person John Leidegren; 17.10.2009
comment
@John - теперь, когда отсутствует MVC2 с улучшенной привязкой модели, проверкой, строго типизированными помощниками и т. Д., Как бы вы оценили его по сравнению с вашим методом? - person tvanfosson; 10.06.2010
comment
MVC2 намного лучше, я считаю, что он в значительной степени заменил то, что я создавал в то время (с MVC1 в бета-версии). Я столкнулся с большим количеством проблем, связанных с тем, что я пытался построить поверх ASP.NET, не отказываясь от существующих инструментов. Достаточно сказать, что я многому научился и в конце концов запустил это в производство. Теперь я понимаю, что текущий инструментарий / фреймворк (VS / ASP.NET / C #) на самом деле не подходит для этого, и в конечном итоге, если вы хотите пойти по этому пути, вам нужно будет инвестировать в свои собственные компиляторы / проверку модели. вещи, чтобы некоторые вещи работали в вашу пользу. - person John Leidegren; 10.06.2010
comment
В то время я не особо думал об ASP.NET MVC. В нем не хватало того, чего я хотел. Но мне пришлось потратить много времени на разработку, тестирование и выяснение этих вещей. Я по-прежнему считаю, что статический аспект создаваемой мной веб-инфраструктуры превосходит MVC в этом отношении, но компилятор C # неэффективен для решения этой проблемы. Вам нужен какой-то язык / компилятор, который обеспечивает большую гибкость, когда дело доходит до метапрограммирования. Мне приходилось делать много этого во время выполнения, и часто было невозможно кэшировать скомпилированные экземпляры, поэтому мне приходилось много динамически перекомпилировать. - person John Leidegren; 10.06.2010
comment
В итоге я создал множество инструментов для генерации кода, чтобы он хорошо работал с базой данных. Я использовал Linq-to-Sql, и инструменты, поставляемые с Linq-to-Sql, были в значительной степени бесполезны. Я использовал простые соглашения об именах для моделирования перечислений типов, сущностей и ассоциаций, а затем сопоставил это с помощью метамодели атрибутов Linq-to-Sql. Хотя в итоге у меня получилась очень элегантная декларативная модель. В котором такие вещи, как привязка данных, проверка и CRUD, в значительной степени выполнялись автоматически. - person John Leidegren; 10.06.2010
comment
Я получил огромное удовольствие и прошел через большую боль, чтобы довести это до конца. Хотя в итоге я понял, что эта статически типизированная сеть требует, чтобы вы продвигали работу в генерацию кода и динамическую компиляцию, чтобы вы могли продвигаться вперед декларативно. Я считаю, что эта тенденция проявляется во все большем количестве мест. - person John Leidegren; 10.06.2010
comment
похоже, у вас было много времени, чтобы заняться этим делом. мой менеджер просто обсуждает, ставит задачи, которые нужно выполнить в фиксированный промежуток времени. нет даже времени на то, чтобы много исследовать. - person Simple Fellow; 29.08.2014
comment
@SimpleFellow Я нашел время. У менеджера должно быть серьезное экономическое обоснование, чтобы иметь возможность уделять время работе с подобными вещами. Если это действительно приведет к преимуществу над конкурентами. Иногда общение - самая сложная часть, но если вы можете сесть вместе и поговорить о том, почему это важно, будьте готовы услышать другую сторону истории. У каждого часто есть очень веские причины, по которым нужно что-то делать. Если все не удается, ищите работу в другом месте, но только в том случае, если вы абсолютно уверены, что все испробовали. - person John Leidegren; 03.09.2014

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

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

введите описание изображения здесь

MVC4

  • мог получить около 11 оборотов в секунду
  • rps довольно низкий как на 2-х, так и в 4-х процессорных серверах

введите описание изображения здесь

Веб-формы (aspx)

  • может получить более 2500 оборотов в секунду

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

person Community    schedule 15.10.2012

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

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

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

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

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

person Community    schedule 14.03.2013

введите описание изображения здесь

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

Вы можете подробно прочитать этот тестовый эксперимент в этой статье CP https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

Тестирование проводилось с использованием следующих спецификаций с использованием VSTS и программного обеспечения для нагрузочного тестирования Telerik: -

Пользовательская нагрузка 25 пользователей.

Продолжительность запуска теста составила 10 минут.

Конфигурация машины DELL 8 ГБ ОЗУ, Core i3

Проект размещен в IIS 8.

Проект был создан с использованием MVC 5.

Предполагалось подключение к сети LAN. Таким образом, этот тест на данный момент не учитывает задержку в сети.

Браузер в тесте выбран Chrome и Internet Explorer.

Множественные показания были взяты во время теста для усреднения неизвестных событий. Было снято 7 чтений, и все чтения опубликованы в этой статье как чтение 1, 2 и так далее.

person Community    schedule 13.01.2015
comment
Ваша методология тестирования плохая и сильно предвзята, а ваши выводы неверны. Правильно созданное приложение WebForms поддается тестированию, имеет надлежащее разделение задач и имеет минимальные накладные расходы на полезную нагрузку. Хотя MVC не имеет цикла событий жизненного цикла страницы, ему приходится бороться с выполнением маршрутизации и просмотра. Ваши статьи на эту тему о CP сильно предвзяты. - person Richard Hauer; 01.09.2016
comment
Правильно и тщательно созданное приложение даже в худших технологиях творит чудеса. Жизненный цикл страницы ASP.NET определенно имеет больше полезной нагрузки по сравнению с выполнением маршрутизации и просмотра, поскольку он имеет дело с генерацией пользовательского интерфейса HTML. Маршрутизация является частью платформы ASP.NET, поэтому они существуют даже в обычных веб-формах. Я согласен с одной вещью, если вы не будете писать код, стоящий за вашей производительностью, будет эквивалентен MVC. Но набор инструментов Webform настолько заманчив, что программный код становится его неотъемлемой частью. Хотя MVC вообще не позволяет мне этого делать. Мне нравится, как в бритве они отключили представление дизайна и код. - person Shivprasad Koirala; 02.09.2016