Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Ajax & repeater: pagina lenta
mercoledì 07 gennaio 2009 - 11.44
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
paglio_go
Profilo
| Newbie
39
messaggi | Data Invio:
mer 7 gen 2009 - 11:44
ciao a tutti,
in una pagina con 3 repeater annidati, inserita in un updatepanel di ajax, visualizzo una serie di record.
fino a quando non sono molti non c'è nessun problema, ma quando il numero delle righe cresce (100 ad esempio) al postback il ricaricamento della pagina è lentissimo e questa si blocca per diversi secondi, togliendo invece le 4 righe di codice ajax invece la pagina si aggiorna velocemente.
Avevo prima provato a disabilitare il viewstate (che in effeti è corposo) e poi a togliere i repeater annidati, ma il problema si presentava sempre
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<contenttemplate>
<table>
<!-- REPEATER 1 -->
<!-- REPEATER 2 -->
<!-- REPEATER 3 -->
</table>
</contenttemplate>
</asp:UpdatePanel>
qualcuno sa dirmi il motivo di tale rallentamento?
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 7 gen 2009 - 12:29
Ciao,
verifica il carico della cpu del tuo computer quando fai l'aggiornamento con ajax. Potrebbe essere un problema dovuto al fatto che la pagina viene ricostruita con il javascript.
Considera che è buona norma mantenere le procedure ajax snelle anche come mole di dati da gestire.. Potrebbero essere tanti fattori, una prima cosa da verificare è la cpu, poi la banda, ovvero quanti dati vengono inviati al server e quanti ne vengono ritornati. Per fare queste verifiche puoi usare questo tool:
http://www.fiddlertool.com/fiddler/
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
paglio_go
Profilo
| Newbie
39
messaggi | Data Invio:
mer 7 gen 2009 - 12:56
grazie.
quel software non riesco ad usarlo che il firewall si incazza un attimo, cmq in quel lasso di tempo la cpu lavora al 50%..
evidentemente se come dici è consigliabile utilizzare procedure snelle con ajax il problema è li visto che l'attesa cresce esponenzialmente con l'aumentare dei dati nella pagina, peccato che sarebbe stato molto comodo.
Eventualmente è possibile utilizzare l'ajax solo per i repeater annidati e non in tutta la procedura? sto provando ma non sto riuscendoci
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 7 gen 2009 - 14:11
A cosa ti serve ajax? Hai delle operazioni che vengono fatte dentro al repeater? Si può pensare di cambiare un attimo la logica di funzionamento, però dipende da quello che viene fatto..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
paglio_go
Profilo
| Newbie
39
messaggi | Data Invio:
mer 7 gen 2009 - 14:24
lo utilizzo solo x far vedere il caricamento della pagina (UpdatePanel)
in sostanza visualizzo una serie di record col primo repeater, e con i repeater annidati 2 e 3 visualizzo altri record di dettagli (al click di un bottone, così da effettuare la select solo sull'evento OnItemCommand)
dato repeater 1
- dato repeater 2
- dato repeater 3
dato repeater 1
- dato repeater 2
dato repeater 1
dato repeater 1
se già riuscissi ad utilizzare l'ajax solo per la visualizzazione dei repeater annidati sarebbe già un buon risultato e forse non sarebbe così pesante l'elaborazione
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 7 gen 2009 - 15:02
Allora se ho capito bene puoi provare a mettere un update panel nel repeater che visualizza il dettaglio al click del pulsante e aggancialo come AsyncPostBackTrigger (
http://msdn.microsoft.com/it-it/library/system.web.ui.asyncpostbacktrigger.aspx
) al pulsante.
<asp:UpdatePanel ID="updatePanel" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnEspandi" EventName="Click" />
</Triggers>
<ContentTemplate>
... repeater
</ContentTemplate>
</asp:UpdatePanel>
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
paglio_go
Profilo
| Newbie
39
messaggi | Data Invio:
mer 25 feb 2009 - 11:39
scusate se riprendo l'argomento dopo un po' di tempo..
impostando l'EventName del trigger="ItemCommand" ma da l'errore "Could not find an event named 'ItemCommand' on associated control 'Button1_R2' ".
ecco il codice:
<!-- REPEATER 1 -->
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="R1_ItemDataBound" OnItemCommand="R1_ItemCommand">
<!-- REPEATER 2 -->
<asp:Repeater ID="Repeater2" runat="server" OnItemCommand="R2_ItemCommand">
<ItemTemplate>
<asp:Button ID="Button1_R2" Text="+" runat="server" CommandName='open' CommandArgument='<%#Eval("UIDWQOPENITEMFC")%>' />
<asp:UpdatePanel ID="UP_R3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<!-- REPEATER 3 -->
<asp:Repeater ID="Repeater3" runat="server">
</asp:Repeater>
<!-- REPEATER 3 FINE -->
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1_R2" EventName="ItemCommand" />
</Triggers>
</asp:UpdatePanel>
</ItemTemplate>
</asp:Repeater>
<!-- REPEATER 2 FINE -->
</ItemTemplate>
</asp:Repeater>
<!-- REPEATER 1 FINE -->
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 25 feb 2009 - 11:43
L'evento da agganciare ai bottoni è il click. Il problema è che il bottone è all'interno di un itemtemplate quindi non sarà visibile dall'updatepanel.
Puoi provare ad agganciare il trigger da codice
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
paglio_go
Profilo
| Newbie
39
messaggi | Data Invio:
gio 5 mar 2009 - 09:38
niente da fare, non si riesce ( o almeno non riesco io)
per caso hai una soluzione alternativa?
Ho provato ed effettuare subito tutte le select dei sottomenu ma in questo modo la pagina è naturalmente molto lenta nel carimento, e altre soluzioni per evitare il refresh della pagina non mi vengo no in mente.
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
gio 5 mar 2009 - 10:02
Ciao,
crei un nuovo asynchpostbacktrigger per ogni pulsante della griglia?
Prova a guardare qua:
http://forums.asp.net/p/1084113/1610124.aspx
Nel tuo caso invece che fare un ciclo su tutti gli item ti conviene farlo all'interno dell'evento ItemDataBound
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
paglio_go
Profilo
| Newbie
39
messaggi | Data Invio:
gio 5 mar 2009 - 11:34
grazie molto gentile, appena posso provo
Torna su
Stanze Forum
Elenco Threads
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 !