Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 29669|Risposta: 3

[ASP.NET] ASP.NET più richieste sulla pagina contemporaneamente, si verifica una situazione di animazione sospesa bloccante

[Copiato link]
Pubblicato su 22/09/2017 17:32:59 | | | |
Recentemente, quando lavoravo a un progetto, alcune pagine dovevano caricare molti dati e a volte cliccavo sulla pagina senza aspettare che finisse di caricarsi, per poi cliccare di nuovo su un'altra pagina

Ci sarà uno stato molto lento di animazione sospesa durante il caricamento della pagina web, quindi oggi studiamolo attentamente.

All'inizio pensavo che questa situazione si sarebbe verificata su molti siti web o che il problema di velocità della rete del mio computer, ma ho scoperto che questo sito non aveva questa situazione, a volte mi bloccavo quando pubblicavo, ma cliccavo su altre pagine della scheda per caricarle rapidamente.

Diamo un'occhiata più da vicino oggi!! Il codice testato per primo:

Codice Homeview:

Codice Controller:



Per l'analisi del codice di test, il nostro controller ha 3 metodi: uno è la home page e gli altri due sono metodi di test

La richiesta Test1 blocca per 5 secondi e poi restituisce i dati all'utente

Le richieste Test2 non bloccheranno e restituiranno i dati direttamente all'utente

La nostra homepage è composta da due interfacce per le richieste Ajax, che sono richieste asincrone, quindi non ci sono problemi di blocco.

Scopriremo che il metodo Test1 produce contenuti solo dopo che Test2 produce contenuti (Normalmente, la pagina genera direttamente il contenuto restituito da Test2, e poi aspetta 5 secondi per restituire il contenuto restituito da Test1, perché js non blocca



Poi, accediamo direttamente alle interfacce Test1 e Test2, accediamo prima a Test1, e poi immediatamente a Test2, e scopriamo che Test2 deve aspettare che Test1 torni per completarsi, come mostrato nella figura sottostante:



Se una richiesta di pagina imposta un blocco lettore, altre richieste che vengono elaborate contemporaneamente nella stessa sessione non potranno aggiornare lo stato della sessione, ma almeno potranno essere lette. Se una pagina richiede un blocco di scrittura per lo stato della sessione, allora tutte le altre pagine vengono bloccate, indipendentemente dal fatto che vogliano leggere o scrivere contenuti. Ad esempio, se due visualizzazioni di programma stanno scrivendo contenuti nella stessa sessione contemporaneamente, un programma deve aspettare che l'altro sia finito prima di poter essere scritto. Nella programmazione AJAX è importante essere consapevoli di ciò che accade.

Nota speciale: solo quando scrivi una sessione, Asp.net bloccherà la richiesta, ma purché tu abbia visitato la pagina in cui la sessione è scritta, come l'operazione dopo aver effettuato il login al sistema con la sessione (la sessione è bloccata fino alla scadenza, ovviamente, è solo il caso in cui l'ID della sessione sia lo stesso). Ci sarà questo problema.

Informazioni sui netizen

Finché il sito utilizza una sessione, ogni richiesta bloccherà la sessione per tutta la sua durata, quindi le richieste con lo stesso sessionid devono attendere di essere sbloccate

Questo significa che se il sito ha una pagina con timeout, non può fare nulla e devi aspettare che la pagina timeout si carichi.

Neanche tu puoi farlo, più richieste ajax contemporanee sulla stessa pagina, non puoi farlo, richieste di interrogazione dei messaggi.



Per riassumere:Se prendi una sessione alla richiesta, se non porti una sessione alla richiesta, la situazione sopra non si verificherà

Soluzione:

Aggiunta la funzione SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) al controller

Nota:

Obbligatorio significa che stai richiedendo un blocco esclusivo sulla sessione (cioè nessun trattamento parallelo delle richieste per lo stesso sessionID)
ReadOnly significa che stai richiedendo un blocco non esclusivo su Session (cioè la tua richiesta deve comunque aspettare che le richieste con blocco esclusivo finiscano, ma puoi processare richieste con blocco non esclusivo serrature in parallelo. Tuttavia, sta a te assicurarti che il tuo codice non scriva su Session. Non è necessariamente imposto dal framework)
Obbligatorio significa il mutex della sessione che hai richiesto (cioè non è obbligatorio elaborare lo stesso SessionID in parallelo)

ReadOnly significa che la sessione che richiedi è un blocco non esclusivo (cioè la tua richiesta deve comunque attendere il completamento, la richiesta di un blocco esclusivo, ma puoi elaborare una richiesta con un blocco parallelo non esclusivo). Ma devi assicurarti che il tuo codice non scriva sessioni. Non deve necessariamente essere eseguito dal framework)





Precedente:CEF: Incorporare un Chrome per il client
Prossimo:Errore HTTP 503. Il servizio non è disponibile.
Pubblicato su 06/07/2018 11:53:31 |
Per i WebForm, aggiungi dopo la pagina in cima a aspx (basta caricare quella pagina bloccante):

EnableSessionState="ReadOnly"
 Padrone di casa| Pubblicato su 14/07/2019 20:34:17 |
La maggior parte dello sviluppo web utilizza le sessioni per salvare gli stati delle sessioni, ma l'utilizzo delle sessioni in applicazioni asp.net può avere un impatto significativo sulle prestazioni delle applicazioni web. Perché e cosa la influenzerà sono analizzati di seguito

La spiegazione MSDN delle richieste e delle sessioni concorrenti afferma:

Richieste concorrenti e stato delle sessioni
L'accesso allo stato ASP.NET sessione avviene per sessione, il che significa che se due utenti diversi inviano una richiesta contemporaneamente, l'accesso a ogni singola sessione viene concesso contemporaneamente. Tuttavia, se le due richieste concorrenti sono per la stessa sessione (utilizzando lo stesso valore SessionID), la prima richiesta avrà accesso esclusivo alle informazioni della sessione. La seconda richiesta verrà eseguita solo dopo che la prima richiesta sarà completata. (Se il blocco esclusivo sulle informazioni della sessione viene rilasciato perché la prima richiesta supera il timeout del blocco, anche la seconda sessione ottiene accesso.) Se imposti il valore EnableSessionState nella direttiva @Page su ReadOnly, le richieste di informazioni di sessione in sola lettura non comportano un blocco esclusivo sui dati della sessione. Tuttavia, le richieste di sola lettura ai dati della sessione potrebbero comunque dover attendere che il blocco venga sbloccato dalla richiesta di lettura/scrittura impostata dai dati della sessione.
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com