2009-07-08 11 views
9

Sono perplesso. Ho guardato la traccia di una pagecall che era "lenta" da caricare in base al mio capo, causando il caricamento parziale della pagina, quindi "salta" sul punto di scorrimento memorizzato su un postback.Che cosa fa rallentare una pagina?

Alla fine ho scoperto che, utilizzando la traccia, l'intero caricamento da Begin PreInit a End Render ha richiesto 1.94 secondi, di cui 1.5 sono spesi tra Begin PreRender e End PreRender.

Qualche idea su cosa potrebbe causarlo? Il successivo tempo di caricamento maggiore è 0,14 secondi, per End PreRenderComplete.

Il problema potrebbe derivare dalle mie query su SQL Server o una quantità eccessiva di controlli nella pagina, anche se la maggior parte sono "nascosti"?

[modifica:] Sembra che il caricamento della mia pagina sia molto lungo quando mostro un determinato modulo. La mia dimensione di rendering totale è di 91537 byte, 44483 dei quali sono dedicati a quella specifica forma. Il mio stato di osservazione sembra abbastanza enorme. Inoltre: un file 404 in un file JS causa questo tipo di ritardo al caricamento?

[aggiornamento:] Quindi ho trovato la query più lunga, e sembra che anche se sembra piuttosto complessa, ha finito per funzionare molto prima che la pagina sia caricata. Come informazioni aggiunte: Sto usando un bel po 'di SqlDataSources attraverso i controlli, per riempire i miei elenchi a discesa e altre cose interessanti simili. La tua app è ingombra?

+0

dopo aver letto il tuo aggiornamento, continuo a pensare che tu debba guardare questo in un profiler per sapere con certezza. –

risposta

6

Nella mia esperienza (lo stesso problema riscontrato dall'utente), il 90% è un problema SQL.

Inserire alcuni cronometri intorno alla query che si sta chiamando per scoprire quale query è in esecuzione lenta.

rendering controllo asp.net non può prendere così tanto tempo ....

+0

Rendering I controlli ASP.NET POSSONO richiedere molto tempo considerando che un controllo può essere piuttosto complicato (si pensi ad alcuni componenti di AJAX di Telerik, ecc.). –

+0

Sono d'accordo con questo. Soprattutto se si sta utilizzando uno qualsiasi dei controlli dell'origine dati. Esegui SQL Profiler mentre esegui l'app. – NotMe

+0

Oh, quindi SQLDataSource! = Buona idea? –

4

Per identificare la causa di un collo di bottiglia è necessario profilare il codice con uno strumento come ANTS Profiler o qualcosa di simile.

Un profiler consente di individuare l'area del problema mostrando quali linee di codice sono più lente di altre.

+2

Qualcosa che non devo spendere 400 dollari per trovare un singolo problema in questa applicazione?: P –

+2

Ho pensato che puoi provare ANTS Profiler semplicemente scaricandolo :). Analogamente, è possibile scaricare la versione di prova di Visual Studio e fornire gratuitamente il profiler VS. –

+1

Ho utilizzato una versione di ANTS Profiler e il Performance Wizard di Visual Studio e li ho trovati paragonabili in molti modi. –

3

userei YSlow per determinare se il suo da qualcosa sul lato client o lato server. A volte aggiungiamo timer ad alcune query e poi emettiamo il tempo di esecuzione in un commento html ... ovviamente rimuovendoli quando il test è completo.

La pagina chiama qualcosa ospitato su un sito esterno?

+1

se il problema può essere tracciato da qualche parte tra preinit e endrender, probabilmente non c'è molto che possa fare in questo caso particolare. ma in secondo luogo, è ancora un buon strumento e una risposta pertinente alla domanda più generica nel titolo –

0

La soluzione migliore è utilizzare lo Perfomance Wizard in Visual Studio e osservare l'albero delle chiamate per la pagina. Vi darà maggiori dettagli sul collo di bottiglia esatto delle prestazioni.

Ho visto questo tipo di prestazioni quando ci sono troppi controlli complessi dichiarati nella pagina. Anche se potrebbe essere facilmente correlato a SQL. Per sapere per certo è necessario guardare l'albero delle chiamate e scoprire qual è la chiamata più costosa.

0

Naturalmente, se è collegato a SQL, come molte persone hanno notato, "SQL Server Profiler" è lo strumento da utilizzare (dato che stai eseguendo mssql). mysql ha "jetprofiler" (.com) che non ho provato. una volta trovata la query lenta, non si tratta raramente di un problema di indicizzazione.