Quali sono i modi per trovare colli di bottiglia in un'applicazione web?

Come faccio a confrontare le performance delle mie applicazioni web?

C'è un modo per scoprire i colli di bottiglia in un'applicazione web?

EDIT: Non sto chiedendo di eventuali modifiche front-end come immagini, css ecc. Quello che voglio sapere è come profilare il back-end dell'applicazione in modo che io sappia quali methods / query modificare per aumentare le performance.

Per quanto riguarda i colli di bottiglia sul server delle applicazioni, è ansible utilizzare uno strumento di profilazione per vedere quanto tempo è trascorso in each parte del codice, quanta memory viene utilizzata, ecc. Per PHP, webgrind sembra essere un popolare metodo basato su GUI profiling. Qualcosa come dotTrace farebbe la stessa cosa per un'applicazione ASP.NET. Nota che quando si tratta di database, strumenti di profilatura come questo mostreranno solo quali query del database sono lente – non perché sono lente. Per questo, è necessario esaminare la profilatura specifica del database …

Un altro aspetto dei colli di bottiglia delle app Web è quanto tempo impiega effettivamente un browser per scaricare tutto (importzione di CSS e JavaScript, immagini, ecc.) E rendere la pagina. Ci sono diverse aziende come Keynote che hanno bot che colpiscono il tuo sito da tutto il mondo, analizzano le performance e ti danno consigli sulle modifiche che puoi apportre per get l'output della tua app sul browser e renderle il più rapidamente ansible ( ad esempio, "usa la compressione gzip e metti il ​​tuo JavaScript alla fine della pagina invece che alla testa", ecc.). Puoi anche farlo da solo su una scala molto più piccola, ovviamente. Ad esempio, i plug-in di Firefox come Jiffy e YSlow faranno il loro lavoro.

Per qualsiasi app Web, puoi provare a utilizzare l'estensione Firebug, insieme all'estensione Yahoo YSlow (a Firebug). Davvero utile per le performance della pagina. http://developer.yahoo.com/yslow/

Tracing è un ottimo inizio

Fiddler è un ottimo strumento per la logging e il monitoraggio del traffico. Funziona sul client e puoi vedere quali richieste e risposte vanno tra client e web server. Puoi facilmente analizzare le pagine lente e individuare i motivi (a molte richieste, pagine di grandi size, …)

In particolare per ASP.Net, esiste un meccanismo di traccia che può creare un registro dettagliato per le applicazioni Web. Il registro mostra le informazioni di temporizzazione e puoi trovare funzioni a lungo termine. (Articolo MSDN: panoramica Traccia ASP.NET

prova a utilizzare alcuni motori di test come PHPUnit per sottolineare la tua applicazione e usa la tua shell per vedere quale process impiega più tempo a risolverlo.

su Unix / Linux puoi usare il command 'top'

su Windows usa il task manager (esteso)

Se usi Perl, Devel :: NYTProf è superbo .

Ho un tutorial che ho fatto un paio di volte a OSCON e la conferenza MySQL su " Real World Web: performance e scalabilità " (diapositive disponibili in PDF ), potresti trovarlo interessante.

Fili correlati:

  • Asp.Net Performance Resource / book
  • Test di stress ASP.NET
  • Profilazione di siti Web ASP.NET con EQATEC Profiler
  • Caricare il software di prova

Potresti essere più specifico sulla piattaforma (XP, Vista, Server 2000, 2003, 2008) e il metodo di esecuzione dell'applicazione (IIS, servizio Windows). Come già accennato, la traccia è un buon inizio, ma ci sono altri strumenti che dipendono dall'ambiente in cui è configurata anche l'applicazione web.

Attiva la function di traccia, trace = true se si tratta di un'app Web e inserisci le istruzioni di traccia all'inizio e alla fine dei tuoi methods. Questo ti fornirà una lettura molto dettagliata delle zecche nel sistema e di conseguenza quanto tempo impiega ciascuna parte per l'esecuzione.

Se si dispone di una libreria chiamata, è inoltre ansible eseguire la traccia utilizzando httpcontext.Current.Trace.Write per generare ciò che è necessario osservare. In alternativa, se la tua app è davvero pignola, puoi scrivere la tua function per archiviare le istruzioni trace in una variabile condivisa e scriverla su un DB o altro meccanismo una volta eseguito lo script.

Se vuoi un modo generico per trovare i colli di bottiglia, prova a utilizzare uno strumento di monitoraggio HTTP. Questo ti consente di vedere quali tipi di richieste impiegano più tempo o se restituiscono messaggi di errore. È quindi ansible utilizzare uno strumento di profilazione specifico della piattaforma per azzerare aree specifiche dell'applicazione in base ai dati dello strumento.

Mi piace usare uno strumento proxy HTTP come Charles per fare questo tipo di analisi.

Il primo passo è veloce e sporco. Provalo su un iPhone, un laptop con una connessione 3G, un pc con una connessione internet satellitare e un PDA per Windows Mobile. Se funziona, hai finito. In caso contrario, triangular.