Domanda

Ho trovato alcune osservazioni selvagge secondo cui ASP.NET MVC è 30 volte più veloce di ASP.NET WebForms.Qual è la reale differenza di prestazioni, è stata misurata e quali sono i vantaggi in termini di prestazioni.

Questo per aiutarmi a considerare il passaggio da ASP.NET WebForms a ASP.NET MVC.

È stato utile?

Soluzione

Non abbiamo eseguito il tipo di test di scalabilità e prestazioni necessari per giungere ad alcuna conclusione.Penso che ScottGu potrebbe aver discusso di potenziali obiettivi di prestazione.Man mano che ci avviciniamo alla versione Beta e RTM, eseguiremo internamente più test delle prestazioni.Tuttavia, non sono sicuro di quale sia la nostra politica sulla pubblicazione dei risultati dei test delle prestazioni.

In ogni caso, qualsiasi test di questo tipo deve davvero considerare le applicazioni del mondo reale...

Altri suggerimenti

Penso che sarà una domanda difficile a cui rispondere in modo definitivo poiché molto dipenderà da questo UN) come implementare l'applicazione WebForms e B) come implementare l'applicazione MVC.Nei loro moduli "grezzi", MVC è probabilmente più veloce di WebForms, ma anni e anni di strumenti ed esperienza hanno prodotto una serie di tecniche per creare applicazioni WebForms veloci.Sarei disposto a scommettere che uno sviluppatore ASP.NET senior potrebbe produrre un'applicazione WebForms in grado di rivaleggiare con la velocità di qualsiasi applicazione MVC o almeno ottenere una differenza trascurabile.

La vera differenza- come suggerito da @tvanfosson- è in testabilità e SoC pulito.Se il miglioramento delle prestazioni è la tua preoccupazione principale, non penso che sia un ottimo motivo per abbandonare WebForms e iniziare a ricostruire in MVC.Non almeno finché non avrai provato le tecniche disponibili per ottimizzare WebForms.

Ha ridotto il carico utile di una delle mie pagine da 2 MB a 200 k, semplicemente eliminando il viewstate e rendendo sopportabile a livello di programmazione il lavoro con l'output inviato.

La dimensione da sola, anche se l'elaborazione era la stessa, creerà enormi miglioramenti nelle connessioni al secondo e nella velocità delle richieste.

Penso che molte delle persone che pensano che i WebForm siano intrinsecamente lenti o dispendiosi in termini di risorse stiano attribuindo la colpa al posto sbagliato.9 volte su 10, quando vengo coinvolto per ottimizzare un'app per moduli web, ci sono troppi posti in cui gli autori delle app fraintendono lo scopo del viewstate.Non sto dicendo che il viewstate sia perfetto o altro, ma è MOLTO troppo facile abusarne, ed è questo abuso che sta causando il gonfiore del campo viewstate.

Questo articolo è stato prezioso per aiutarmi a comprendere molti di questi abusi. https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

Per fare un confronto valido tra MVC e WebForms dobbiamo essere sicuri che entrambe le app utilizzino correttamente le architetture.

I miei test mostrano qualcosa tra 2x e 7x più req/sec su MVC, ma dipende da come crei la tua app per moduli web.Con solo il testo "ciao mondo", senza alcun controllo lato server, mvc è circa il 30-50% più veloce.

Per me il vero miglioramento delle "prestazioni" in MVC è l'aumento della superficie testabile dell'applicazione.Con WebForms molte applicazioni erano difficili da testare.Con MVC la quantità di codice che diventa testabile praticamente raddoppia.Fondamentalmente tutto ciò che non è facilmente verificabile è il codice che genera il layout.Tutta la logica aziendale e la logica di accesso ai dati, inclusa la logica che popola i dati effettivi utilizzati nella vista, sono ora suscettibili di test.Anche se mi aspetto che sia anche più performante - il ciclo di vita della pagina è notevolmente semplificato e più adatto alla programmazione web - anche se fosse lo stesso o un po' più lento varrebbe la pena passare dal punto di vista della qualità.

Penso che il problema qui sia che non importa quanto ASP.Net MVC sia più veloce rispetto ai vecchi moduli web, non farà differenza, perché la maggior parte del tempo impiegato è nel database.La maggior parte delle volte, i server Web rimarranno con un utilizzo della CPU dello 0-10% e aspettano solo sul server del database.A meno che tu non ottenga un numero estremamente elevato di visite sul tuo sito web e il tuo database sia estremamente veloce, probabilmente non noterai una grande differenza.

Gli unici numeri concreti che riesco a trovare provenienti dai primi sviluppi di ASP.NET MVC si trovano in questo thread del forum:

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

Lo stesso Rob Connery conferma in qualche modo l'affermazione secondo cui ScottGu ha affermato che ASP.NET MVC può servire 8000 richieste al secondo.

Forse Jeff e il suo team possono dare qualche suggerimento dal loro sviluppo di questo sito.

Contrariamente all'opinione accettata, l'utilizzo ottimizzato dei moduli web uccide completamente MVC in termini di prestazioni grezze.Webforms è stato iper-ottimizzato per il compito di servire HTML molto più a lungo di quanto abbia fatto MVC.

Le metriche sono disponibili su http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

Ogni singolo mvc di confronto si trova nella classifica medio-bassa/bassa-alta dell'elenco, mentre l'utilizzo ottimizzato dei moduli web si colloca nelle classifiche medio-alta/superiore-bassa.

Convalida aneddotica ma molto seria di questi parametri, www.microsoft.com è servito da moduli web e non da MVC.Qualcuno qui crede che non avrebbero scelto MVC se fosse stato empiricamente più veloce?

Non c'è davvero modo di rispondere a questa domanda.MVC utilizza il motore di visualizzazione Web Form per impostazione predefinita e può essere configurato per utilizzare un numero qualsiasi di motori di visualizzazione personalizzati, quindi se desideri un confronto delle prestazioni dovrai essere più specifico.

Ho iniziato a lavorare in MVC circa un anno fa, sono stato ispirato ma non impressionato.

Detesto lo stato di visualizzazione e lo vedo come la radice di tutti i mali in termini di ASP.NET.Questo è il motivo per cui semplicemente non lo uso e, ad essere sincero, perché dovresti?

Ho preso fondamentalmente il concetto di ASP.NET MVC Framework e l'ho creato a modo mio.Ho cambiato un paio di cose però.Ho creato il codice di wrap del controller o il codice di routing dell'URL attorno alla ricompilazione dinamica.

Ora, direi che le applicazioni ASP.NET MVC saranno più veloci in base al modo in cui le utilizzi.Se abbandoni completamente WebForms sarai più veloce perché il ciclo di vita ASP.NET e il modello a oggetti sono enormi.

Quando scrivi stai istanziando un esercito...no aspetta, una legione di oggetti che parteciperanno al rendering della tua vista.Questo sarà più lento che se esprimessi la quantità minima di comportamento nella pagina ASPX stessa.(Non mi interessa l'astrazione del motore di visualizzazione perché il supporto per le pagine ASPX in Visual Studio è decente, ma ho completamente abbandonato WebForms come concetto e praticamente qualsiasi framework ASP.NET a causa del volume del codice o dell'impossibilità di modificare il cose che collegano la mia domanda).

Ho trovato il modo di fare affidamento sulla ricompilazione dinamica (System.Reflection.Emit) per emettere oggetti e codice per scopi speciali quando necessario.L'esecuzione di questo codice è più veloce della riflessione ma inizialmente realizzata tramite il servizio di riflessione.Ciò ha dato al mio framework MVC ottime prestazioni ma anche tipizzato in modo molto statico.Non utilizzo stringhe e raccolte di coppie nome/valore.Invece i miei servizi del compilatore personalizzati vanno a riscrivere un post del modulo in un'azione del controller a cui viene passato un tipo di riferimento.Dietro le quinte succedono molte cose, ma questo codice è veloce, molto più veloce di WebForms o MVC Framework.

Inoltre, non scrivo URL, scrivo espressioni lambda che vengono tradotte in URL che in seguito indicano quale azione del controller invocare.Questo non è particolarmente veloce ma è meglio di avere URL non funzionanti.È come se avessi risorse tipizzate staticamente così come oggetti tipizzati staticamente.Un'applicazione web tipizzata staticamente?Questo è quello che voglio!

Vorrei incoraggiare più persone a provarlo.

I progetti realizzati con visual studio.Uno è il modello mvc4, un altro è WebForm (tradizionale).E quando si effettua il test di carico con WCAT, questo è il risultato,

MVC4 è piuttosto lento di WebForms, qualche idea?

enter image description here

MVC4

  • potrebbe ottenere circa 11 rps
  • L'RPS è piuttosto basso sia per i server a 2 che a 4 CPU

enter image description here

WebForm (aspx)

  • potrebbe superare i 2500 rps

  • si è scoperto che il killer delle prestazioni è un bug di MVC Bata o RC.E le prestazioni migliorerebbero una volta rimossi gli elementi dei bundle.Ora l'ultima versione ha risolto questo problema.

Le prestazioni dipendono da cosa stai facendo...Di solito MVC è più veloce di asp.net soprattutto perché Viewstate è assente e perché MVC funziona più con Callback che con Postback per impostazione predefinita.

Se ottimizzi la pagina del tuo modulo web puoi avere le stesse prestazioni di MVC ma richiederà molto lavoro.

Inoltre, ci sono molti nuget per MVC (e anche per Webform) per aiutarti a migliorare le prestazioni del sito web come combinare e minimizzare i tuoi CSS e JavaScript, raggruppare le tue immagini e usarle come sprite e così via.

Le prestazioni del sito web dipendono in gran parte dalla tua architettura.Uno pulito con una buona separazione degli interessi ti offrirà un codice più pulito e un'idea migliore su come migliorare le prestazioni.

Puoi dare un'occhiata a questo modello "Modello MVC Neos-SDI" che creerà per te un'architettura pulita con molti miglioramenti delle prestazioni per impostazione predefinita (controlla MvcTemplate sito web).

enter image description here

Ho eseguito un piccolo esperimento di test di carico VSTS con del codice di base e ho riscontrato che il tempo di risposta ASP.NET MVC era due volte più veloce rispetto ai moduli Web ASP.NET.Sopra è riportato il grafico allegato con la trama.

Puoi leggere questo esperimento del test di carico in dettaglio in questo articolo CP https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

Il test è stato condotto con le specifiche seguenti utilizzando VSTS e il software di test di carico Telerik:-

Carico utente 25 utenti.

La durata del test è stata di 10 minuti.

Configurazione macchina DELL 8 GB Ram, Core i3

Il progetto è stato ospitato in IIS 8.

Il progetto è stato creato utilizzando MVC 5.

È stata presupposta la connessione di rete LAN.Quindi per ora questo test non tiene conto del ritardo della rete.

Browser nel test selezionato Chrome e Internet Explorer.

Durante il test sono state effettuate letture multiple per calcolare la media di eventi sconosciuti.Sono state prese 7 letture e tutte le letture sono pubblicate in questo articolo come lettura 1, 2 e così via.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top