4 messaggi dal 15 ottobre 2008
Ciao,
ho questo problema.
Su un software scritto in ASP classic, nella dashboard, vengono fatte alcune richieste AJAX ASINCRONE per recuperare delle statistiche su un DB MySQL.
Finchè queste richieste richiedono un breve tempo per poterle portare a termine nessun problema, il server è reattivo.
Quando si verifica il caso di query piuttosto lunghe (vengono lanciate 4 richieste Ajax che in totale vengono servite in circa 30 secondi), il server è bloccato e se si prova a cambiare pagina (sullo stesso pool) finchè non sono completate tutte le request precedenti la pagina non viene cambiata ed il browser rimane "impallato".

Come è possibile dunque evitare questo e renderlo più reattivo?

Grazie mille per la risposta
Francesco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Francesco,
il server in realtà non è impallato, ma ti lascia deliberatamente in attesa perché non può servirti la pagina dato che c'è un'altra richiesta in corso che sta tenendo bloccato l'oggetto Session.
Infatti, dato che l'oggetto Session non è thread-safe, il server non può consentire l'esecuzione contemporanea di richieste che potenzialmente possono andare a scrivere allo stesso momento su quell'oggetto, incasinandolo.

Anche le 4 richieste ajax che partono in maniera asincrona, penso che vengano servite sequenzialmente dal server (lo puoi verificare dal pannello degli strumenti di sviluppo del browser - tasto F12).

Per risolvere il problema, dovresti disabilitare la sessione ove possibile come descritto qui.
https://msdn.microsoft.com/en-us/library/ms525328(v=vs.90).aspx
Se la pagina ASP dichiara di non voler usare la sessione, allora il server potrà far corso alla sua richiesta contemporaneamente ad altre.

Tuttavia, se hai fatto ampio uso delle variabili di sessione (es. per riconoscere l'utente autenticato), allora non sarà per te una soluzione praticabile a meno che tu non riscriva quelle parti per farne a meno.

Potresti vedere se si riesce a migliorare le query affinché vengano eseguite più velocemente, o andare a mettere degli indici sulle colonne opportune di MySql.

ciao,
Moreno
Modificato da BrightSoul il 04 febbraio 2016 22.21 -

Enjoy learning and just keep making
4 messaggi dal 15 ottobre 2008
Grazie Moreno per la risposta.

In effetti una riscrittura delle query con un utilizzo più sapiente delle index-key ha permesso di dimezzare i tempi.
Oltre a ciò abbiamo creato un app-pool dedicato ad una nuova applicazione su cui abbiamo messo i contatori in modo che rimanga su un livello di separazione che consenta una navigazione fluida nelle pagine successive.
Tuttavia, nonostante questo cercheremo di applicare anche il metodo da te indicato poiché, se un utente tenta di ritornare alla pagina dei contatori con il tasto back, e questi ancora non hanno finito di processare, la pagina comunque rimane impallata in attesa della risposta.

Nel ringraziarti ancora spero che questa esperienza possa servire a qualcun altro che sia nella mia stessa situazione.

Ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.