Problema di lentezza con javascript in Internet Explorer 7

lunedì 23 febbraio 2009 - 15.47

lukepet Profilo | Junior Member

Ciao a tutti, ho uno strano comportamento su una pagina del mio sito è non riesco a capire da cosa dipenda.

Questa pagina serve a gestire degli ordini e può essere caratterizzata da decine di righe d'ordine...ad ogni riga sono assegnate delle funzioni javascript per gestire la visualizzazione di alcune finestre informative e per implementare una serie di controlli sui dati di input.

Ora ho questo problema. Quando ci sono molte righe d'ordine il sito ne risente pesantemente in termini di prestazioni.

Se ad esempio clicco su un button definito all'interno della pagina, prima che venga richiamato l'evento click la pagina si blocca per alcuni secondi (in cui non riesco a capire che operazione stia avvenendo), dopodichè viene catturato l'evento e le operazioni previste vengono eseguite.

Questo comportamento credo sia dovuto alla gestione javascript infatti disabilitandolo dalle impostazioni del browser tutto è molto veloce. La cosa strana è che con Firefox non ho la stessa comportamento, infatti con il browser mozilla i tempi di risposta sono decisamente ridotti.

Sembra che il tutto sia legato a IE7.

Ho pensato che possa dipendere anche dallo scriptmanager dell'ajaxtoolkit, ma non saprei quale impostazioni prova a modificare per risolvere il problema.

Nessuno di voi ha mai avuto un problema simile?

Avete qualche idea o suggerimento per risolvere la situazione?

rossimarko Profilo | Guru

Ciao,

considera che le prestazioni di Firefox e Chrome rispetto a internet explorer 7 nell'esecuzione del javascript sono nettamente migliori: http://mozlinks-it.blogspot.com/2008/02/le-prestazioni-di-firefox-3.html
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

lukepet Profilo | Junior Member

Si lo so...ma adesso bisogna che trovo un modo per farlo andare decentemente anche su IE.

Sinceramente non ho idea di come fare ma qualcosa bisogna che mi invento.

rossimarko Profilo | Guru

Cerca di capire quale parte del javascript risulta più pesante (se il controllo dati o altro) e cerca di ottimizzare quella. Che tipo di operazioni fai? Magari il discorso di lentezza e semplicemente dovuto al fatto che ci sono moltri controlli html e richiamare una semplice getElementById risulta pesante...
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

lukepet Profilo | Junior Member

Si infatti bisogna che ottimizzo per bene il tutto perchè tra updatepanel e funzioni js manuali la pagina risulta piuttosto pesante.

lukepet Profilo | Junior Member

dunque facendo un pò di prove ho scoperto è la causa sono gli updatepanel...o meglio, quando metto l'updatepanel IE dà quei problemi.

per la precisione, nella pagina ho 3 updatepanel...dove all'interno sono inseriti alcuni controlli dell'ajaxtoolkit. Ad esempio in uno c'è inserito il tabcontainer.

Quando clicco su un button che si trova dentro l'updatepanel inspiegabilmente ho questi ritardi nell'attivazione degli eventi.

L'updatepanel ha una serie di proprietà (es: updatemode, rendermode) ma non so se andando ad agire su una di esse si risolve il problema.

Secondo voi da cosa potrebbe dipendere?

rossimarko Profilo | Guru

Devi controllare anche cosa ritorna ogni update panel.. Se il passaggio dei dati è molto pesante ci sta che il browser risponda con tempi molto lunghi. Gli update panel purtroppo danno di questi problemi se usati troppo pesantemente.

Per analizzare il flusso dei dati ti consiglio di usare dei tool come Fiddler che ti fanno vedere cosa viene trasferito nelle varie richieste e la quantità di dati: http://blogs.dotnethell.it/rossimarko/Fiddler-2__15036.aspx

Un'altra cosa che ti consiglio di impostare è l'UpdateMode="Conditional", vuol dire che l'update panel viene aggiornato solo in seguito ad eventi scatenati al suo interno o in uno dei controlli inseriti come trigger. Se updateMode="Always" vuol dire che l'update panel viene sempre aggiornato ad ogni richiesta e spesso è uno spreco inutile di banda e risorse

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

lukepet Profilo | Junior Member

Ciao, sto ancora lottando con il problema.

Per tagliare la testa al toro vorrei riuscire a gestire gli eventi dei button al di fuori degli updatepanel.

Ad esempio ho un bottone che richiama una operazione di salvataggio, quando clicco sul button parte una animazione di attesa e nel frattemo l'operazione di salvataggio viene eseguita senza che la pagina venga ricaricata.

Però se metto il button fuori dall'updatepanel chiaramente perdo il comportamento ajax e la pagina viene ricaricata.

C'è un modo per evitare i postback al click? Desidererei che la pagina non venga ricaricata...attualmente l'unica soluzione che mi viene in mente è l'utilizzo dei pagemethods, ma prima vorrei sapere se è possibile farlo in altro modo.

Qualche suggerimento?

rossimarko Profilo | Guru

Ciao,

se vuoi agganciare un updatepanel all'esecuzione di un pulsante puoi farlo con i trigger (http://msdn.microsoft.com/it-it/library/system.web.ui.asyncpostbacktrigger.aspx)

In pratica alla pressione del pulsante non viene fatto il classico post back di tutta la pagina ma viene eseguita la procedura su server e poi viene aggiornato solamente l'updatepanel che ha agganciato il trigger.

Se invece tu non hai questa esigenza ma vuoi semplicemente un bottone che una volta premuto richiama una funzione su server senza aggiornare nessuna parte del sito web allora direi che i pagemethod vanno bene, oppure un classico webservice con chiamata da javascript attraverso lo scriptmanager
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5