Продуктивність ASP.NET MVC


102

Я виявив кілька зауважень, що ASP.NET MVC на 30 разів швидше, ніж ASP.NET WebForms. Яка реальна різниця у ефективності, чи було це виміряно та які переваги від ефективності.

Це допоможе мені розглянути можливість переходу з ASP.NET WebForms до ASP.NET MVC.


20
Після роботи з WebForms з моменту їх виходу я ніколи не охоче повернусь! MVC вкрав мій <3 - і цей сайт працює на Бета-5 чудово!
Jarrod Dixon

2
Що з усіма відкатами редакції з цього питання ..?
Нік

@ Nick: ОП скасовує будь-яку редакцію та видаляє будь-які коментарі, що пояснюють їх.
ГЕОЧЕТ

@Rich B: Правильно, він видалив близько 5 моїх коментарів.
Джордж Стокер

2
Потрібне оновлення зараз, коли ми наближаємось до випуску MVC3.
Ендрю Льюїс

Відповіді:


69

Ми не виконували тесту на масштабованість та парф-тести, необхідні для отримання будь-яких висновків. Я думаю, що Скоттгу, можливо, обговорював потенційні цілі перф. Коли ми рухатимемося до Beta та RTM, ми внутрішньо робимо більше перф-тестувань. Однак я не впевнений, яка наша політика щодо публікації результатів парф-тестів.

У будь-якому випадку, будь-які подібні тести дійсно повинні враховувати додатки реального світу ...


13
Тепер, коли MVC був випущений, чи є оновлення щодо випуску результатів парфуму?
chris

6
Просто проголосувавши за це, тому що 5,999 балів повторень раніше боліли мені очі :(
Дамієн

2
До цього часу ви обов'язково повинні мати деякі цифри. Хочете оновити свою відповідь? Або ви виявили, що набридлива політика забороняє це?
tvanfosson

7
Кількість 42. :) Загалом, наші номери, ймовірно, будуть марними для реальних програм, тому ми, як правило, не видаємо їх. Однак я знаю інших команд Microsoft, що будують масштабні веб-сайти, які показують вигідну кількість. Іншими словами, будь-які проблеми, пов'язані з перф., Швидше за все, виникнуть через помилки програміста, ніж будь-які проблеми спадкування в рамках. Винуватцями взаємодії з базою даних та зовнішніми службами зазвичай є. :)
Зламаний

Правда! Будь ласка, оновіть це! Можливо, не орієнтири, а коротка ідея, вони нарівні чи mvc трохи краще на перф?
Гедеон

48

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

Справжня відмінність, як запропонував @tvanfosson, - полягає в тестувальності та чистоті SoC. Якщо підвищення продуктивності є вашим головним питанням, я не думаю, що це відмінний привід перейти на веб-форму і почати відновлювати в MVC. Принаймні, поки ви не спробували доступні методи оптимізації WebForms.


Чудова відповідь Тодд (як дивно для євангеліста розробника насправді мати прагматичну відповідь). Єдине, що ви помилилися, - це в необробленій веб-формі реалізацій, справді значно швидше.
Кріс Марісіч

42

Це зменшило одну з моїх сторінок з 2 Мб корисного навантаження, до 200 Кб, просто усунувши перегляд і зробивши його програмним для роботи з поданим результатом.

Сам розмір, навіть незважаючи на те, що обробка була однаковою, створить значні поліпшення з'єднань за секунду та швидкості запитів.


31
ви могли виправити цю примхливу велику оглядну область без MVC
Андрій Ронеа

1
Просто для вдосконалення ViewState можна відмовитись від рівня сторінки або в web.config
bbqchickenrobot

8
так, але у mvc його розумним за замовчуванням є не дизайнерське рішення, яке змушує вас залишити всі елементи керування та постачальників, які заявляють, що вони просто працюють над веб-формами, роблячи веб-форми "неправильно поводитись", видаляючи її задню кістку. Я не погоджуюсь, що ви могли просто перекодувати цю сторінку, але все це було краще без перегляду.
DevelopingChris

Тоді ви не думаєте, що це найгірше ваше рішення перенести всю програму на MVC, а не вимкнути viewstate у web.config? і ні, viewstate не є основою. Тільки якщо ви досліджували, viewstate може зберігатися в кеші, а також сесіях.
Простий товариш

29

Я думаю, що багато людей, які думають, що WebForms за своєю суттю повільні чи ресурсомісткі, покладають провину на неправильне місце. 9 разів з 10, коли мене залучають для оптимізації програми для веб-форм, є занадто багато місць, де автори програм неправильно розуміють мету візуалізації. Я не кажу, що оглядова область є ідеальною або що завгодно, але ЗЛУЧИТИ її ЛЕГКО легко, і саме це зловживання викликає роздуте поле зору.

Ця стаття була непереборною, щоб допомогти мені зрозуміти багато з цих зловживань. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

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


14

Моє тестування показує щось середнє на 2–7 разів більше запиту / сек на MVC, але це залежить від того, як ви будуєте додаток для веб-форм. Маючи лише текст "привіт світ", без будь-якого керування стороною сервера mvc швидше на 30-50%.


12

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


Я справді хотів би дізнатися, чому хтось спротив цю відповідь.
tvanfosson

Моє відчуття, що це може бути сприйняте тим, що добре розроблений додаток для веб-форм ASP.NET настільки ж випробуваний, як і MVC-додаток. Мій досвід розробки обох полягає в тому, що MVC змушує вас зробити чітку модель програмування (яка є однією з її найбільших сильних сторін, IMO). Веб-форми дозволяють робити ліниві речі, але все ще дуже можливо мати однакову тестувальну поверхню у веб-формах. Це я гадаю, все одно.
dudemonkey

Перегляди бритви буквально заохочують вбудовування коду всередині подання. Це не перевіряється, і це не дає змоги вирішити проблеми. Тільки тому, що MVC змушує вас писати контролери, це не означає, що ви не можете розгортати це все, якщо ви не знаєте, що робите. Кваліфікований розробник отримає стільки ж продуктивності WebForms (або більше), ніж MVC, і матиме практично однакову "тестувальну поверхню".
Річард Хауер

@RichardHauer це буквально не було правдою, коли я писав це, але вони на цьому покращилися. Оскільки WebForms, схоже, не має майбутнього в .NET Core, здається, це суперечка.
tvanfosson

@tvanfosson Погодився - зараз це суперечка. Не знаєте, який бит ви вважаєте неправдою, можливо, ви заперечуєте проти мого використання "буквально"? У будь-якому разі, новіші версії MVC з TagHelpers допомагають порушити звичку вводити код у макети, які, нарешті, змусять мене працювати. Зрозуміло, що ця публікація є досить старою, але навіть у той час добре побудована форма WebForms дуже швидка, не маючи жодної «магічної проводки» MVC і жодного коду не вбудованого у вигляд.
Річард Хауер

7

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


Можливо, ваші користувачі не мають області перегляду.
UpTheCreek

6

Єдині конкретні цифри, які я можу знайти, які є з ранньої розробки ASP.NET MVC, є на цьому форумі-потоці:

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

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

Можливо, Джефф та його екіпаж можуть дати якусь підказку щодо їх розробки цього сайту.


3

На відміну від прийнятої думки, оптимізоване використання веб-форм повністю вбиває MVC з точки зору ефективності роботи. Веб-форми були оптимізовані для завдання подання html набагато довше, ніж MVC.

Показники доступні на веб-сайті http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

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

Анекдотична, але дуже серйозна перевірка цих показників www.microsoft.com надається веб- формами, а не MVC. Хтось тут вірить, що вони не вибрали б MVC, якби це було емпірично швидше?


2

Дійсно відповісти на це немає. MVC використовує двигун перегляду Web Forms за замовчуванням і може бути налаштований на використання будь-якої кількості користувальницьких двигунів перегляду, тому, якщо ви хочете порівняти продуктивність, вам доведеться бути більш конкретними.


2

Я почав працювати в 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-адресами. Це як якщо б у вас були статично набрані ресурси, а також статично набрані об'єкти. Статично набраний веб-додаток? Це я хочу!

Я б закликав більше людей спробувати це.


2
Тож це не пряма відповідь на питання? Однак це пов'язано, і це дає кілька хороших моментів. Але ей, це щось, що я побудував для власних потреб, і мені це прекрасно підходить. Мені також подобається ділитися своїми ідеями, навіть якщо дуже мало людей розуміють, чому.
Джон Лейдегрен

1
Ну, вам не потрібно змінювати свій голос, але вам не доведеться голосувати за нього, тому що це не "відповідь". Якщо ви трохи подивитесь на текст, є кілька речей, які вказують на те, що ASP.NET MVC швидше, ніж WebForms, і тому це так. І воно зводиться до таких речей, як відображення та об'єктна модель та накладні витрати ViewState WebForms.
Джон Лейдегрен

@John - тепер, коли MVC2 працює з покращеною прив'язкою моделі, валідацією, сильно набраними помічниками тощо, як би ви оцінили це порівняно зі своїм методом?
tvanfosson

MVC2 набагато краще, я вважаю, що він майже замінив те, що я будував на той час (з MVC1 у бета-версії). Я зіткнувся з численними проблемами стосовно того, що намагався створити на ASP.NET, не відмовляючись від існуючих інструментів. Досить сказати, я багато чого навчився і врешті-решт привів це у виробництво. Тепер я розумію, що поточний інструментарій / фреймворк (VS / ASP.NET / C #) не дуже підходить для цього матеріалу, і, зрештою, якщо ви хочете піти цією дорогою, вам потрібно буде інвестувати у власні компілятори / перевірку моделей. речі, щоб деякі речі працювали на вашу користь.
Джон Лейдегрен

Я не думав багато про ASP.NET MVC в той час. У ньому бракувало речей, які я знав, що хочу. Але мені довелося витратити багато часу на розробку, тестування та з'ясування цих речей. Я все ще думаю, що статичний аспект веб-бази, яку я будував, в цьому плані перевершує MVC, але компілятор C # неефективний для вирішення цієї проблеми. Вам потрібна якась мова / компілятор, що дозволяє підвищити гнучкість, коли мова йде про метапрограмування. Мені доводилося багато цього робити під час виконання, і часто було неможливо кешувати складені екземпляри, тому мені довелося багато динамічно перекомпілювати речі.
Джон Лейдегрен

2

Проекти створені за допомогою візуальної студії. Один шаблон mvc4, інший - WebForm (традиційний). А коли роблять тест на навантаження з WCAT, це результат,

MVC4 досить повільний, ніж WebForms, якісь ідеї?

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

MVC4

  • може отримати близько 11 об / хв
  • rps досить низький, як 2-cpu, так і 4-cpu-сервер

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

WebForms (aspx)

  • може отримати понад 2500 об / хв

  • Вбивця продуктивності виявив, що це помилка MVC Bata або RC. І продуктивність буде покращена, як тільки я зніму речі з пачок. Тепер остання версія виправила це.


1

Продуктивність залежить від того, що ви робите ... Зазвичай MVC швидше, ніж asp.net, головним чином тому, що Viewstate відсутній і тому, що MVC працює більше за зворотним зв'язком, ніж за допомогою Postback за замовчуванням.

Якщо ви оптимізуєте свою веб-сторінку, ви можете мати таку ж ефективність, як MVC, але це буде багато роботи.

Крім того, їх багато нюансів для MVC (а також для веб-форми), які допоможуть вам покращити продуктивність веб-сайту, наприклад, поєднувати та мінімізувати ваші css та javascripts, групувати свої зображення та використовувати їх як спрайт тощо.

Ефективність веб-сайту дуже залежить від вашої архітектури. Чистий, з хорошим розділенням проблеми, принесе вам більш чистий код і краще уявлення про те, як підвищити ефективність.

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


-1

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

Я зробив невеликий тест навантаження 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 ГБ Ram, Core i3

Проект проводився в IIS 8.

Проект створено за допомогою MVC 5.

Передбачалося підключення до локальної мережі. Тож цей тест наразі не враховує відставання в мережі.

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

Багаторазове читання, проведене під час тесту, до середніх невідомих подій. У цій статті 7 читань, у яких взяті дані, і всі показання публікуються як читання 1, 2 тощо.


Ваша методологія тестування погана і сильно упереджена, а ваші висновки недійсні. Правильно вбудований додаток WebForms є перевіреним, має належне розділення проблем і має мінімальну корисну навантаження. Незважаючи на те, що MVC не має циклу подій у життєвому циклі сторінки, він має маршрутизацію та перегляд виконання, з яким можна протистояти. Ваші статті на цю тему про КП сильно упереджені.
Річард Хауер

Правильно та ретельно побудований додаток навіть у найгіршій технології може творити чудеса. Життєвий цикл сторінки ASP.NET, безумовно, має більше корисного навантаження в порівнянні з маршрутизацією та виконанням перегляду, оскільки він стосується покоління HTML UI. Маршрутизація є частиною основи ASP.NET, тому навіть у звичайних веб-формах вони існують. Я погоджуюсь, якщо ви не напишете код за продуктивністю, це буде еквівалентно MVC.But Webbox Toolbox настільки спокусливий, що код поза стає невід’ємною його частиною. Тоді як MVC мені це взагалі не дозволяє. Мені подобається, як у бритві вони вимкнули дизайн і код позаду.
Шивпрасад Койрала
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.