ASP.NET MVC-Leistung


102

Ich habe einige wilde Bemerkungen gefunden, dass ASP.NET MVC 30x schneller ist als ASP.NET WebForms. Welcher tatsächliche Leistungsunterschied besteht, wurde gemessen und welche Leistungsvorteile gibt es?

Dies soll mir helfen, den Wechsel von ASP.NET WebForms zu ASP.NET MVC in Betracht zu ziehen.


20
Nachdem ich mit WebForms gearbeitet habe, seit sie herausgekommen sind, werde ich nie wieder zurückkehren! MVC hat meine <3 gestohlen - und diese Seite läuft hervorragend auf Beta 5!
Jarrod Dixon

2
Was ist mit all den Revisions-Rollbacks zu dieser Frage?
Nick

@Nick: Das OP rollt alle Änderungen zurück und löscht alle Kommentare, die sie erklären.
GEOCHET

@ Rich B: Richtig, er hat ungefähr 5 meiner Kommentare gelöscht.
George Stocker

2
Benötigt ein Update, da wir uns der MVC3-Version nähern.
Andrew Lewis

Antworten:


69

Wir haben nicht die Art von Skalierbarkeits- und Perfektionstests durchgeführt, die erforderlich sind, um Schlussfolgerungen zu ziehen. Ich denke, ScottGu hat möglicherweise über mögliche Leistungsziele gesprochen. Auf dem Weg zu Beta und RTM werden wir intern mehr Perf-Tests durchführen. Ich bin mir jedoch nicht sicher, wie wir die Ergebnisse von Perf-Tests veröffentlichen.

In jedem Fall müssen solche Tests wirklich reale Anwendungen berücksichtigen ...


13
Gibt es nach der Veröffentlichung von MVC ein Update zur Veröffentlichung der Perf-Ergebnisse?
Chris

6
Ich habe nur dafür gestimmt, weil die 5.999 Wiederholungen meine Augen verletzt haben :(
Damien

2
Zu diesem Zeitpunkt müssen Sie sicherlich einige Zahlen haben. Möchten Sie Ihre Antwort aktualisieren? Oder haben Sie festgestellt, dass die lästige Politik dies verbietet?
Tvanfosson

7
Die Nummer ist 42. :) Im Allgemeinen sind unsere Nummern für Apps aus der realen Welt wahrscheinlich nutzlos, sodass wir sie in der Regel nicht weitergeben. Ich kenne jedoch andere Teams bei Microsoft, die große Websites erstellen, die günstige Zahlen aufweisen. Mit anderen Worten, Perf-Probleme sind eher auf Programmiererfehler zurückzuführen als auf Erbprobleme im Framework. In der Regel sind Interaktionen mit der Datenbank und externen Diensten die Schuldigen. :)
Haacked

Wahr! Bitte aktualisieren Sie dies! Vielleicht keine Benchmarks, aber eine kurze Idee, sind sie gleichwertig oder ist mvc ein bisschen besser in Bezug auf Perf?
Gideon

48

Ich denke, dies wird eine schwer zu beantwortende Frage sein, da so viel davon abhängt, A) wie Sie die WebForms-Anwendung implementieren und B) wie Sie die MVC-Anwendung implementieren. In ihren "rohen" Formen ist MVC wahrscheinlich schneller als WebForms, aber jahrelange Tools und Erfahrungen haben eine Reihe von Techniken zum Erstellen schneller WebForms-Anwendungen hervorgebracht. Ich würde wetten, dass ein erfahrener ASP.NET-Entwickler eine WebForms-Anwendung erstellen könnte, die mit der Geschwindigkeit einer MVC-Anwendung mithalten kann - oder zumindest einen vernachlässigbaren Unterschied erzielt.

Der wirkliche Unterschied - wie @tvanfosson vorgeschlagen hat - liegt in der Testbarkeit und dem sauberen SoC. Wenn die Verbesserung der Leistung Ihr Hauptanliegen ist, ist dies meines Erachtens kein guter Grund, auf WebForms umzusteigen und mit dem Wiederaufbau in MVC zu beginnen. Nicht zuletzt, bis Sie die verfügbaren Techniken zur Optimierung von WebForms ausprobiert haben.


Tolle Antwort Todd (wie überraschend für einen Entwickler-Evangelisten, tatsächlich eine pragmatische Antwort zu haben). Das einzige, was Sie falsch gemacht haben, ist, dass das Webformular für Rohimplementierungen in der Tat wesentlich schneller ist.
Chris Marisic

42

Es hat eine meiner Seiten von 2 MB Nutzlast auf 200 KB reduziert, indem nur der Ansichtsstatus entfernt und es programmierbar gemacht wurde, mit der übermittelten Ausgabe zu arbeiten.

Die Größe allein, obwohl die Verarbeitung gleich war, führt zu enormen Verbesserungen der Verbindungen pro Sekunde und der Geschwindigkeit der Anforderungen.


31
Sie hätten diesen lästigen großen Ansichtszustand auch ohne MVC reparieren können
Andrei Rînea

1
Nur um näher darauf einzugehen, kann ViewState auf Seitenebene oder in web.config
bbqchickenrobot

8
Ja, aber in MVC ist es eine vernünftige Standardeinstellung, keine Entwurfsentscheidung, die Sie dazu zwingt, alle Steuerelemente und die Anbieter zu verlassen, die behaupten, nur an Webformularen zu arbeiten, indem Webformulare durch Entfernen des Rückgrats "falsch verhalten" werden. Ich bin nicht anderer Meinung, dass Sie diese Seite einfach neu codieren konnten, aber die gesamte App war ohne Viewstate besser.
DevelopingChris

Glauben Sie dann nicht, dass es die schlechteste Entscheidung von Ihnen ist, die gesamte App auf MVC zu portieren, anstatt den Ansichtsstatus in web.config auszuschalten? und nein, viewstate ist nicht das Rückgrat. Nur wenn Sie recherchiert haben, kann viewstate sowohl im Cache als auch in Sitzungen gespeichert werden.
Simple Fellow

29

Ich denke, dass viele der Leute, die denken, dass WebForms von Natur aus langsam oder ressourcenintensiv sind, die Schuld an der falschen Stelle platzieren. 9 von 10 Fällen, in denen ich zur Optimierung einer Webforms-App hinzugezogen werde, gibt es viel zu viele Stellen, an denen die Autoren der Apps den Zweck des Ansichtsstatus falsch verstehen. Ich sage nicht, dass der Viewstate perfekt ist oder so, aber es ist viel zu einfach, ihn zu missbrauchen, und es ist dieser Missbrauch, der das aufgeblähte Viewstate-Feld verursacht.

Dieser Artikel war von unschätzbarem Wert, um mir zu helfen, viele dieser Missbräuche zu verstehen. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

Um einen gültigen Vergleich zwischen MVC und WebForms durchführen zu können, müssen wir sicherstellen, dass beide Apps die Architekturen korrekt verwenden.


14

Meine Tests zeigen, dass MVC zwischen 2x und 7x mehr Anforderungen / Sek. Erhält, aber es hängt davon ab, wie Sie Ihre Webforms-App erstellen. Mit nur "Hallo Welt" -Text ohne serverseitige Steuerung ist mvc etwa 30-50% schneller.


12

Für mich ist die eigentliche "Leistungsverbesserung" bei MVC die Erhöhung der testbaren Oberfläche der Anwendung. Mit WebForms gab es viele Anwendungen, die schwer zu testen waren. Mit MVC verdoppelt sich die Menge an Code, die testbar wird, im Grunde. Grundsätzlich ist der Code, der das Layout generiert, nicht einfach zu testen. Ihre gesamte Geschäftslogik und Datenzugriffslogik - einschließlich der Logik, die die in der Ansicht tatsächlich verwendeten Daten auffüllt - kann jetzt getestet werden. Ich erwarte zwar, dass es auch leistungsfähiger ist - der Seitenlebenszyklus ist erheblich vereinfacht und für die Webprogrammierung zugänglicher -, selbst wenn es gleich oder etwas langsamer wäre, lohnt es sich, aus Sicht der Qualität zu wechseln.


Ich würde wirklich gerne wissen, warum jemand diese Antwort abgelehnt hat.
Tvanfosson

Ich habe das Gefühl, dass es möglicherweise herabgestuft wird, weil eine gut gestaltete ASP.NET-Webformularanwendung genauso testbar ist wie eine MVC-Anwendung. Meine Erfahrung mit der Entwicklung von beiden ist, dass MVC Sie zu einem sauberen Programmiermodell zwingt (was eine seiner größten Stärken ist, IMO). Mit Webformularen können Sie faulere Dinge tun, aber es ist immer noch sehr gut möglich, dass Webformulare dieselbe testbare Oberfläche haben. Das ist jedenfalls meine Vermutung.
Dudemonkey

Rasiermesseransichten fördern buchstäblich das Einbetten von Code in die Ansicht. Das ist nicht überprüfbar und kein gutes Zeichen für die Trennung von Bedenken. Nur weil Sie mit MVC Controller schreiben können, heißt das nicht, dass Sie nicht alles aufpeppen können, wenn Sie nicht wissen, was Sie tun. Ein erfahrener Entwickler wird mit WebForms (oder mehr) genauso viel Leistung erzielen wie MVC und eine praktisch identische "testbare Oberfläche" haben.
Richard Hauer

@RichardHauer das war buchstäblich nicht wahr, als ich das schrieb, aber sie haben das verbessert. Da WebForms in .NET Core keine Zukunft zu haben scheint, scheint dies ein strittiger Punkt zu sein.
Tvanfosson

@tvanfosson Einverstanden - es ist jetzt strittig. Sie sind sich nicht sicher, welches Bit Ihrer Meinung nach nicht wahr ist? Vielleicht lehnen Sie meine Verwendung von "wörtlich" ab? Wie auch immer, die neueren Versionen von MVC mit TagHelpers helfen dabei, die Gewohnheit aufzugeben, Code in Layouts einzufügen, wodurch möglicherweise alles für mich funktioniert. Schätzen Sie, dass dieser Beitrag natürlich ziemlich alt ist, aber selbst zu diesem Zeitpunkt ist ein gut aufgebautes WebForms-Formular sehr schnell, ohne die "magische Verkabelung" von MVC und ohne Code, der in die Ansicht eingebettet ist.
Richard Hauer

7

Ich denke, das Problem hier ist, dass ASP.Net MVC, egal wie viel schneller es ist als die alten Webformulare, keinen Unterschied macht, da die meiste Zeit in der Datenbank verbracht wird. Die meiste Zeit sitzen Ihre Webserver mit 0-10% CPU-Auslastung und warten nur auf Ihren Datenbankserver. Wenn Sie nicht eine extrem große Anzahl von Treffern auf Ihrer Website erhalten und Ihre Datenbank extrem schnell ist, werden Sie wahrscheinlich keinen großen Unterschied bemerken.


Ihre Benutzer könnten - kein Ansichtsstatus.
UpTheCreek

6

Die einzigen konkreten Zahlen, die ich aus der frühen ASP.NET MVC-Entwicklung finden kann, befinden sich in diesem Forum-Thread:

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

Rob Connery selbst bestätigt etwas die Aussage, dass ScottGu behauptet hat, dass ASP.NET MVC 8000 Anfragen pro Sekunde bedienen kann.

Vielleicht können Jeff und seine Crew einen Hinweis auf ihre Entwicklung dieser Seite geben.


3

Entgegen der akzeptierten Meinung wird MVC durch die optimierte Nutzung von Webformularen in Bezug auf die Rohleistung vollständig beeinträchtigt. Webforms wurde für die Aufgabe optimiert, HTML viel länger als MVC bereitzustellen.

Metriken finden Sie unter http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

Jeder einzelne Vergleich mvc befindet sich in den unteren, mittleren und unteren oberen Rängen der Liste, während optimierte Webformulare in den oberen, mittleren und oberen unteren Rängen platziert werden.

Anekdotisch , aber sehr schwere Validierung dieser Metriken, www.microsoft.com wird von Webforms nicht MVC serviert. Glaubt hier jemand, dass er MVC nicht gewählt hätte, wenn es empirisch schneller gewesen wäre?


2

Es gibt wirklich keine Möglichkeit, dies zu beantworten. MVC verwendet standardmäßig das Web Forms-Ansichtsmodul selbst und kann so konfiguriert werden, dass eine beliebige Anzahl von benutzerdefinierten Ansichtsmodulen verwendet wird. Wenn Sie also einen Leistungsvergleich wünschen, müssen Sie spezifischer sein.


2

Ich habe vor ungefähr einem Jahr bei MVC angefangen, war begeistert, aber nicht beeindruckt.

Ich hasse den Ansichtsstatus und sehe ihn als die Wurzel allen Übels in Bezug auf ASP.NET. Deshalb benutze ich es einfach nicht und um ganz ehrlich zu sein, warum sollten Sie?

Ich habe im Grunde das ASP.NET MVC Framework-Konzept übernommen und es auf meine eigene Weise erstellt. Ich habe jedoch ein paar Dinge geändert. Ich habe meinen Controller-Wrapping-Code oder URL-Routing-Code um die dynamische Neukompilierung herum erstellt.

Nun würde ich sogar sagen, dass ASP.NET MVC-Anwendungen je nach Verwendung schneller sind. Wenn Sie WebForms vollständig verlassen, sind Sie schneller, da der ASP.NET-Lebenszyklus und das Objektmodell sehr umfangreich sind.

Wenn Sie schreiben, instanziieren Sie eine Armee ... keine Wartezeit, eine Legion von Objekten, die an der Wiedergabe Ihrer Ansicht beteiligt sind. Dies wird langsamer sein, als wenn Sie das minimale Verhalten auf der ASPX-Seite selbst ausdrücken möchten. (Die Abstraktion der View Engine ist mir egal, da die Unterstützung für ASPX-Seiten in Visual Studio anständig ist, aber ich habe WebForms als Konzept und im Grunde jedes ASP.NET-Framework vollständig verworfen, weil der Code aufgebläht ist oder das nicht geändert werden kann Dinge, die meine Bewerbung verkabeln).

Ich habe Möglichkeiten gefunden, mich auf die dynamische Neukompilierung (System.Reflection.Emit) zu verlassen, um bei Bedarf spezielle Objekte und Code auszugeben. Die Ausführung dieses Codes ist schneller als die Reflexion, wird jedoch zunächst über den Reflexionsdienst erstellt. Dies hat meinem MVC-aromatisierten Framework eine großartige Leistung verliehen, aber auch eine sehr statische Typisierung. Ich verwende keine Zeichenfolgen und Namens- / Wertepaar-Sammlungen. Stattdessen schreiben meine benutzerdefinierten Compilerdienste einen Formularbeitrag in eine Controller-Aktion, der ein Referenztyp übergeben wird. Hinter den Kulissen ist viel los, aber dieser Code ist schnell, viel schneller als WebForms oder das MVC Framework.

Außerdem schreibe ich keine URLs, sondern Lambda-Ausdrücke, die in URLs übersetzt werden, die später angeben, welche Controller-Aktion aufgerufen werden soll. Dies ist nicht besonders schnell, aber es ist besser als defekte URLs. Es ist, als hätten Sie sowohl statisch typisierte Ressourcen als auch statisch typisierte Objekte. Eine statisch typisierte Webanwendung? Das ist was ich will!

Ich würde mehr Leute ermutigen, dies auszuprobieren.


2
Das ist also keine direkte Antwort auf die Frage? Es ist jedoch verwandt und macht ein paar gute Punkte. Aber hey, es ist etwas, das ich für meine eigenen Bedürfnisse gebaut habe, und es passt perfekt zu mir. Ich teile auch gerne meine Ideen, auch wenn nur sehr wenige Menschen verstehen, warum.
John Leidegren

1
Nun, Sie müssen Ihre Stimme nicht ändern, aber Sie müssen nicht abstimmen, weil es nicht die Antwort ist. Wenn Sie eine Weile in den Text schauen, gibt es mehrere Dinge, die darauf hinweisen, dass ASP.NET MVC schneller als WebForms ist und warum dies der Fall ist. Und es läuft auf Dinge wie Reflexion und das Objektmodell und den ViewState-Overhead von WebForms hinaus.
John Leidegren

@John - jetzt, wo MVC2 mit verbesserter Modellbindung, Validierung, stark typisierten Helfern usw. herauskommt, wie würden Sie es im Vergleich zu Ihrer Methode bewerten?
Tvanfosson

MVC2 ist viel besser, ich glaube, es hat das, was ich damals gebaut habe, ziemlich ersetzt (mit MVC1 in der Beta). Ich hatte einige Probleme mit dem, was ich auf ASP.NET aufbauen wollte, ohne die vorhandenen Tools zu deaktivieren. Ausreichend zu sagen, ich habe viel gelernt und dies schließlich in die Produktion gebracht. Mir ist jetzt klar, dass das aktuelle Tooling / Framework (VS / ASP.NET / C #) nicht wirklich für dieses Zeug geeignet ist. Wenn Sie diesen Weg gehen möchten, müssen Sie schließlich in Ihre eigenen Compiler / Modellprüfungen investieren Zeug, damit einige Dinge zu Ihren Gunsten funktionieren.
John Leidegren

Ich habe damals nicht viel an ASP.NET MVC gedacht. Es fehlten Dinge, von denen ich wusste, dass ich sie wollte. Aber ich musste viel Zeit damit verbringen, diese Dinge zu entwickeln, zu testen und herauszufinden. Ich denke immer noch, dass der statische Aspekt des von mir erstellten Webframeworks MVC in dieser Hinsicht überlegen ist, aber der C # -Compiler ist ineffizient, um dieses Problem zu lösen. Sie benötigen eine Sprache / einen Compiler, die eine größere Flexibilität bei der Metaprogrammierung ermöglicht. Ich musste viel davon zur Laufzeit tun und es war oft unmöglich, kompilierte Instanzen zwischenzuspeichern, so dass ich viele Dinge dynamisch neu kompilieren musste.
John Leidegren

2

Die mit Visual Studio erstellten Projekte. Eine ist eine mvc4-Vorlage, eine andere ist WebForm (tranditional). Und wenn Sie einen Lasttest mit WCAT durchführen, ist dies das Ergebnis:

MVC4 ist ziemlich langsam als WebForms, irgendwelche Ideen?

Geben Sie hier die Bildbeschreibung ein

MVC4

  • könnte etwa 11 U / min bekommen
  • rps ist sowohl bei 2-CPU- als auch bei 4-CPU-Servern ziemlich niedrig

Geben Sie hier die Bildbeschreibung ein

WebForms (aspx)

  • könnte über 2500 U / min bekommen

  • Der Performance-Killer hat festgestellt, dass es sich um einen Fehler von MVC Bata oder RC handelt. Und die Leistung würde verbessert, wenn ich Bundles Dinge entferne. Jetzt hat die neueste Version dies behoben.


1

Die Leistung hängt davon ab, was Sie tun ... Normalerweise ist MVC schneller als asp.net, hauptsächlich weil Viewstate fehlt und MVC standardmäßig mehr mit Callback als mit Postback arbeitet.

Wenn Sie Ihre Webform-Seite optimieren, können Sie die gleiche Leistung wie bei MVC erzielen, dies ist jedoch eine Menge Arbeit.

Außerdem gibt es viele Nugets für MVC (und auch für Webform), mit denen Sie die Leistung Ihrer Website verbessern können, z. B. CSS und Javascripts kombinieren und minimieren, Ihre Bilder gruppieren und als Sprite verwenden usw.

Die Leistung der Website hängt stark von Ihrer Architektur ab. Ein sauberer Code mit einer guten Trennung der Bedenken bringt Ihnen einen saubereren Code und eine bessere Vorstellung davon, wie Sie die Leistung verbessern können.

Sie können sich diese Vorlage " Neos-SDI MVC-Vorlage " ansehen, die standardmäßig eine saubere Architektur mit vielen Leistungsverbesserungen für Sie erstellt (überprüfen Sie MvcTemplate) Website).


-1

Geben Sie hier die Bildbeschreibung ein

Ich habe ein kleines VSTS-Lasttest-Experiment mit grundlegendem Code durchgeführt und festgestellt, dass die Antwortzeit von ASP.NET MVC im Vergleich zu ASP.NET Webforms doppelt so schnell ist. Oben ist das angehängte Diagramm mit dem Diagramm.

Sie können dieses Belastungstest-Experiment ausführlich in diesem CP-Artikel https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari lesen

Der Test wurde mit den folgenden Spezifikationen unter Verwendung von VSTS- und Telerik-Lasttest-Software durchgeführt: -

Benutzer laden 25 Benutzer.

Die Testdauer betrug 10 Minuten.

Maschinenkonfiguration DELL 8 GB RAM, Core i3

Das Projekt wurde in IIS 8 gehostet.

Das Projekt wurde mit MVC 5 erstellt.

Es wurde eine Netzwerk-LAN-Verbindung angenommen. Dieser Test berücksichtigt also vorerst keine Netzwerkverzögerung.

Browser im Test ausgewählt Chrome und Internet Explorer.

Während des Tests wurden mehrere Messungen durchgeführt, um unbekannte Ereignisse zu mitteln. Es wurden 7 Lesungen vorgenommen und alle Lesungen werden in diesem Artikel als Lesung 1, 2 usw. veröffentlicht.


Ihre Testmethode ist schlecht und stark voreingenommen, und Ihre Schlussfolgerungen sind ungültig. Eine ordnungsgemäß erstellte WebForms-Anwendung ist testbar, weist eine ordnungsgemäße Trennung von Bedenken auf und weist einen minimalen Nutzlastaufwand auf. Während MVC keine Ereignisschleife für den Seitenlebenszyklus hat, muss es mit Routing und Ansichtsausführung fertig werden. Ihre Artikel zu diesem Thema auf CP sind stark voreingenommen.
Richard Hauer

Eine richtig und sorgfältig erstellte Anwendung selbst in einer schlechtesten Technologie würde Wunder wirken. Der ASP.NET-Seitenlebenszyklus weist im Vergleich zur Routing- und Ansichtsausführung definitiv mehr Nutzdaten auf, da er sich mit der Generierung der HTML-Benutzeroberfläche befasst. Das Routing ist Teil des ASP.NET-Frameworks, sodass es auch in normalen Webformularen vorhanden ist. Eine Sache, der ich zustimme, wenn Sie keinen Code hinter Ihrer Leistung schreiben, entspricht MVC. Die Webform-Toolbox ist jedoch so verlockend, dass der Code dahinter ein wesentlicher Bestandteil davon wird. Während MVC mir das überhaupt nicht erlaubt. Ich liebe es, wie sie mit Rasiermesser die Designansicht und den Code dahinter deaktiviert haben.
Shivprasad Koirala
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.