Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 29669|Răspunde: 3

[ASP.NET] ASP.NET mai multe cereri pe pagină în același timp, există o situație de blocare a animației suspendate

[Copiază linkul]
Postat pe 22.09.2017 17:32:59 | | | |
Recent, când lucram la un proiect, unele pagini aveau nevoie să încarce multe date, iar uneori dădeam click pe pagină fără să aștept să se termine încărcarea, apoi dădeam din nou click pe o altă pagină

Va exista o stare foarte lentă de animație suspendată în timpul încărcării paginii web, așa că să o studiem cu atenție astăzi.

La început, am crezut că această situație se va întâmpla pe multe site-uri sau că problema de viteză a rețelei mele de calculatoare, dar am descoperit că acest site nu avea această situație, uneori mă blocam când postam, dar dădeam click pe alte pagini din filă ca să încarc rapid.

Hai să aruncăm o privire mai atentă astăzi!! Codul a fost testat primul:

Codul Homeview:

Cod controler:



Pentru analiza codului de test, controlerul nostru are 3 metode: una este pagina principală, iar celelalte două sunt metode de testare

Cererea Test1 blochează timp de 5 secunde și apoi returnează datele utilizatorului

Cererile Test2 nu vor bloca și vor returna datele direct utilizatorului

Pagina noastră principală este formată din două interfețe pentru cererile Ajax, care sunt cereri asincrone, deci nu există probleme de blocare.

Vom constata că metoda Test1 produce conținut doar după ce Test2 produce conținut (De obicei, pagina va genera conținutul returnat direct de Test2, apoi va aștepta 5 secunde pentru a genera conținutul returnat de Test1, deoarece js nu blochează



Apoi, accesăm direct interfețele Test1 și Test2, accesăm mai întâi Test1, apoi accesăm imediat Test2, și constatăm că Test2 trebuie să aștepte până când Test1 revine pentru a fi finalizat, așa cum se arată în figura de mai jos:



Dacă o cerere de pagină setează un blocaj de citire, celelalte cereri care sunt procesate în același timp în aceeași sesiune nu vor putea actualiza starea sesiunii, dar cel puțin pot fi citite. Dacă o pagină solicită blocarea scrierii pentru starea sesiunii, atunci toate celelalte pagini sunt blocate, indiferent dacă doresc să citească sau să scrie conținut. De exemplu, dacă două vizualizări ale programului scriu conținut în aceeași sesiune în același timp, un program trebuie să aștepte până când celălalt program este gata înainte de a putea fi scris. În programarea AJAX, este important să fii conștient de acest lucru.

Notă specială: Doar când scrii o sesiune, Asp.net va bloca cererea, dar atâta timp cât ai vizitat pagina unde este scrisă sesiunea respectivă, cum ar fi operațiunea după autentificarea în sistem cu sesiunea (sesiunea este blocată până expiră, desigur, doar SessionID-ul rămâne același). Va apărea această problemă.

Informații despre utilizatori de internet

Atâta timp cât site-ul folosește o sesiune, fiecare cerere va bloca sesiunea pe tot parcursul vieții sale, astfel încât cererile cu același session id trebuie să aștepte să fie deblocate

Asta înseamnă că, dacă site-ul are o pagină cu timeout, nu poate face nimic și trebuie să aștepți ca pagina cu timed să se încarce.

Nici tu nu poți face asta, mai multe cereri ajax simultane pe aceeași pagină, nu poți face asta, cereri de interogare a mesajelor.



Pe scurt:Dacă iei o sesiune la cerere, dacă nu aduci o sesiune la cerere, situația de mai sus nu se va întâmpla

Soluție:

S-a adăugat funcția SessionState(System.Web.SessionState.SessionBehavior.ReadOnly) pe controlerul controlerului

Notă:

Obligatoriu înseamnă că solicitați un blocaj exclusiv pe Session (adică fără procesare paralelă a cererilor pentru același SessionID)
ReadOnly înseamnă că soliciti o blocare neexclusivă pe Session (adică cererea ta trebuie să aștepte ca cererile cu blocare exclusivă să se finalizeze), dar poți procesa cererile cu blocare neexclusivă se încuie în paralel. Totuși, depinde de tine să te asiguri că codul tău nu se scrie în Session. Nu este neapărat impusă de cadru)
Obligatoriu înseamnă mutex-ul de sesiune pe care l-ai solicitat (adică nu este necesar să procesezi același SessionID în paralel)

ReadOnly înseamnă că sesiunea pe care o soliciti este un blocaj neexclusiv (adică cererea ta trebuie totuși să aștepte finalizarea, cererea pentru un blocaj exclusiv, dar poți procesa o cerere cu un blocaj paralel neexclusiv). Dar vrei să te asiguri că codul tău nu scrie sesiuni. Nu trebuie să fie executat de cadrul ăsta)





Precedent:CEF: Încorporați un Chrome pentru client
Următor:Eroare HTTP 503. Serviciul nu este disponibil.
Postat pe 06.07.2018 11:53:31 |
Pentru WebForms, adaugă după pagina de sus a aspx (doar încarcă acea pagină blocantă):

EnableSessionState="ReadDoar"
 Proprietarul| Postat pe 14.07.2019 20:34:17 |
Majoritatea dezvoltărilor web folosesc sesiuni pentru a salva stările de sesiune, dar utilizarea sesiunilor în aplicații asp.net poate avea un impact semnificativ asupra performanței aplicațiilor web. De ce și ce îl va afecta este analizat mai jos

Explicația MSDN privind cererile și sesiunile concurente afirmă:

Cereri concurente și starea sesiunii
Accesul la starea ASP.NET sesiune este pe sesiune, ceea ce înseamnă că dacă doi utilizatori diferiți trimit o cerere în același timp, accesul la fiecare sesiune individuală este acordat în același timp. Totuși, dacă cele două cereri concurente sunt pentru aceeași sesiune (folosind aceeași valoare SessionID), prima cerere va obține acces exclusiv la informațiile de sesiune. A doua cerere va fi executată doar după ce prima cerere este finalizată. (Dacă blocarea exclusivă a informațiilor de sesiune este eliberată deoarece prima cerere depășește timeout-ul blocării, a doua sesiune primește și ea acces.) Dacă setați valoarea EnableSessionState din directiva @Page pe ReadOnly, cererile pentru informații de sesiune doar citire nu duc la o blocare exclusivă a datelor de sesiune. Totuși, cererile doar de citire către datele de sesiune pot trebui totuși să aștepte până când blocarea este deblocată din cererea de citire/scriere setată de datele de sesiune.
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com