Hiljuti, kui töötasin ühe projekti kallal, pidid mõned lehed laadima palju andmeid ja mõnikord klõpsasin lehel ilma lehekülje laadimist ootamata, ja siis klõpsasin uuesti teisel lehel
Veebilehe laadimisel toimub väga aeglane peatatud animatsioon, nii et uurime seda täna hoolikalt.
Alguses arvasin, et see olukord esineb paljudel veebilehtedel või minu arvutivõrgu kiiruse probleemiga, kuid avastasin, et sellel saidil seda ei olnud, mõnikord jäin postitades kinni, kuid klõpsasin teistel lehtedel vahekaardil, et kiiresti laadida.
Vaatame täna lähemalt!! Esimesena testitud kood:
Homeview kood:
Kontrolleri kood:
Testkoodi analüüsiks on meie kontrolleril 3 meetodit: üks on avaleht ja kaks teist testmeetodid
Test1 päring blokeerib 5 sekundit ja tagastab seejärel andmed kasutajale
Test2 päringud ei blokeeri ja tagastavad andmed otse kasutajale
Meie avalehel on kaks liidest Ajaxi päringute jaoks, mis on asünkroonsed päringud, seega blokeerimisprobleemi ei ole.
Leiame, et Test1 meetod väljastab sisu alles pärast seda, kui Test2 väljastab sisu (Tavaliselt väljastab leht otse Test2 tagastatud sisu ja ootab seejärel 5 sekundit, et väljundiks saada Test1 tagastatud sisu, sest js ei blokeeri)
Seejärel pääseme otse ligi Test1 ja Test2 liidestele, esmalt Test1-le ja seejärel kohe Test2-le ning leiame, et Test2 peab ootama, kuni Test1 tagasi tuleb, et lõpetada, nagu alloleval joonisel näidatud:
Kui lehekülje päring seab lugejaluku, ei saa teised samal ajal samas sessioonis töödeldavad päringud sessiooni olekut uuendada, kuid vähemalt neid saab lugeda. Kui leht palub sessioonioleku jaoks kirjutamislukku, blokeeritakse kõik teised lehed, sõltumata sellest, kas nad soovivad sisu lugeda või kirjutada. Näiteks, kui kaks programmi vaadet kirjutavad sisu samal ajal samas sessioonis, peab üks programm ootama, kuni teine programm on valmis, enne kui seda saab kirjutada. AJAXi programmis on oluline olla teadlik sellest, mis toimub.
Erimärkus: Ainult sessiooni kirjutamisel blokeerib Asp.net päringu, kuid seni, kuni oled külastanud lehte, kus sessioon on kirjutatud, näiteks toiming pärast süsteemi sisselogimist sessiooniga (sessioon on lukus kuni aegumiseni, muidugi on see ainult siis, kui SessionID on sama). See probleem tekib.
Netikasutajate info
Nii kaua kui veebileht kasutab sessiooni, lukustab iga päring sessiooni kogu selle eluea jooksul, nii et sama sessionid-ga päringud peavad ootama avamist
See tähendab, et kui veebilehel on ajapiiranguga leht, ei saa see midagi teha ja pead ootama, kuni ajastatud leht laeb.
Sa ei saa seda ka teha, mitu ajaxi samaaegset päringut samal lehel, sa ei saa seda teha, sõnumiküsitluse taotlused.
Kokkuvõtteks:Kui võtad taotluse jaoks sessiooni, kui sa ei too soovile sessiooni, siis ülaltoodud olukorda ei teki
Lahus:
Lisatud funktsioon SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) kontrolleri kontrollerile
Märkus:
Nõutav tähendab, et taotled Sessioni eksklusiivset lukustust (st sama sessionID päringute paralleelset töötlemist) ReadOnly tähendab, et sa taotled mitteeksklusiivset lukustust Sessionis (st sinu päring peab ikkagi ootama, et eksklusiivse lukuga päringud lõpetaksid, kuid mitteeksklusiivsete taotlustega saab töödelda lukustub paralleelselt. Kuid sinu ülesanne on tagada, et su kood ei kirjutaks Sessionile. See ei ole tingimata raamistikku järgitud) Nõutav tähendab soovitud session mutexit (st ei ole nõuet sama SessionID paralleelselt töödelda).
ReadOnly tähendab, et soovitud sessioon on mitte-eksklusiivne lukk (st sinu päring peab ikkagi ootama lõpetamist, eksklusiivse luku taotlus, kuid sa saad päringut töödelda paralleelse mitteeksklusiivse lukustusega). Aga sa tahad veenduda, et su kood ei kirjuta sessioone. Seda ei pea raamraam täitma)
|