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)
|