See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 29669|Vastuse: 3

[ASP.NET] ASP.NET lehel on korraga mitu päringut, tekib peatatud animatsiooni blokeerimise olukord

[Kopeeri link]
Postitatud 22.09.2017 17:32:59 | | | |
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)





Eelmine:CEF: Embedida kliendile Chrome
Järgmine:HTTP viga 503. Teenus ei ole saadaval.
Postitatud 06.07.2018 11:53:31 |
WebFormsi puhul lisa aspx ülaosas oleva lehe järel (lihtsalt laadi see blokeeriv leht):

EnableSessionState="ReadOnly"
 Üürileandja| Postitatud 14.07.2019 20:34:17 |
Enamik veebiarendust kasutab sessioone sessiooniseisundite salvestamiseks, kuid seansside kasutamine asp.net rakendustes võib avaldada märkimisväärset mõju veebirakenduste jõudlusele. Miks ja mis seda mõjutab, analüüsitakse allpool

MSDN-i samaaegsete taotluste ja sessiooni selgitus ütleb:

Samaaegsed taotlused ja sessiooni staatus
Ligipääs ASP.NET sessiooni olekule on sessioonipõhine, mis tähendab, et kui kaks erinevat kasutajat saadavad päringu samaaegselt, antakse ligipääs igale individuaalsele sessioonile samaaegselt. Kui aga kaks samaaegset päringut on sama sessiooni kohta (kasutades sama SessionID väärtust), saab esimene päring eksklusiivse juurdepääsu sessiooni infole. Teine päring täidetakse alles pärast esimese taotluse täitmist. (Kui eksklusiivne lukustus sessiooni infole vabastatakse, kuna esimene päring ületab lukustamise ajapiirangu, saab ligipääsu ka teine sessioon.) Kui määrate @Page direktiivis EnableSessionState väärtuseks ReadOnly, siis ainult lugemiseks mõeldud sessiooniinfo päringud ei põhjusta sessiooniandmete eksklusiivset lukustust. Siiski võivad ainult lugemiseks mõeldud taotlused sessiooniandmetele siiski vajada ootamist, kuni lukustus avatakse sessiooniandmete poolt määratud lugemis-/kirjutamispäringust.
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com