Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 29669|Odgovoriti: 3

[ASP.NET] ASP.NET več zahtevkov na strani hkrati pride do blokade in začasne animacije

[Kopiraj povezavo]
Objavljeno na 22. 09. 2017 17:32:59 | | | |
Nedavno, ko sem delal na projektu, so nekatere strani morale naložiti veliko podatkov, in včasih sem kliknil na stran, ne da bi počakal, da se stran dokonča naložiti, nato pa spet kliknil na drugo stran

Med nalaganjem spletne strani bo zelo počasno stanje zamrznjene animacije, zato si ga danes podrobno oglejmo.

Sprva sem mislil, da se bo to zgodilo na mnogih spletnih straneh ali težavah s hitrostjo računalniškega omrežja, a sem ugotovil, da ta stran tega ni imela; včasih sem se zataknil, ko sem objavil, a sem kliknil na druge strani v zavihku, da sem hitro naložil.

Poglejmo si danes podrobneje!! Koda je bila najprej testirana:

Koda Homeview:

Koda krmilnika:



Za analizo testne kode ima naš krmilnik 3 metode, ena je domača stran, drugi dve pa testni metodi

Zahtevek Test1 blokira za 5 sekund in nato uporabniku vrne podatke

Test2 zahtevki ne blokirajo in bodo podatke neposredno vrnili uporabniku

Naša domača stran ima dva vmesnika za Ajax zahteve, ki so asinhrone zahteve, zato ni težav z blokiranjem.

Ugotovili bomo, da metoda Test1 izpiše vsebino šele potem, ko Test2 izpiše vsebino (Običajno stran neposredno izpiše vsebino, ki jo vrne Test2, nato pa počaka 5 sekund, da izpiše vsebino, ki jo vrne Test1, ker js ne blokira



Nato neposredno dostopamo do vmesnikov Test1 in Test2, najprej do Test1, nato takoj do Test2 in ugotovimo, da mora Test2 počakati, da se Test1 vrne za dokončanje, kot je prikazano na spodnji sliki:



Če zahteva za stran nastavi zaklep bralnika, druge zahteve, ki se obdelujejo istočasno v isti seji, ne bodo mogle posodobiti stanja seje, vendar jih je vsaj mogoče prebrati. Če stran zahteva zaklepanje za pisanje v stanju seje, so vse druge strani blokirane, ne glede na to, ali želijo brati ali pisati vsebino. Na primer, če dva pogleda programa pišeta vsebino v isti seji hkrati, mora en program počakati, da je drugi končan, preden ga lahko napiše. Pri programiranju AJAX je pomembno, da se tega zavedamo.

Posebna opomba: Zahtevo Asp.net blokira le pri pisanju seje, vendar dokler ste obiskali stran, kjer je seja zapisana, na primer operacija po prijavi v sistem s sejo (seja je seveda zaklenjena do njenega poteka, le če je SessionID enak). Pojavil se bo ta problem.

Informacije o spletu

Dokler spletna stran uporablja sejo, bo vsaka zahteva sejo zaklenila skozi celotno življenjsko dobo, tako da morajo zahteve z istim sessionid počakati na odklepanje

To pomeni, da če ima spletna stran stran s časovnim iztekom, ne more ničesar storiti in morate počakati, da se časovno omejena stran naloži.

Tudi tega ne moreš narediti, več ajax sočasnih zahtev na isti strani, ne moreš, zahteve za anketiranje sporočil.



Če povzamem:Če vzamete sejo na zahtevo, če ne sprožite seje na zahtevo, zgornja situacija ne bo

Rešitev:

Dodana funkcija SessionState(System.Web.SessionState.SessionState.ReadOnly) v krmilnik krmilnika

Opomba:

Zahtevano pomeni, da zahtevate ekskluzivno zaklepanje seje (tj. brez vzporednega obdelovanja zahtevkov za isti sessionID)
ReadOnly pomeni, da zahtevate neekskluzivno zaklepanje seje (tj. vaša zahteva mora še vedno počakati, da se zahteve z ekskluzivno zaklepanostjo zaključijo, vendar lahko obdelujete zahteve z neekskluzivno ključavnice vzporedno. Vendar pa je na vas, da zagotovite, da vaša koda ne piše v Session. To ni nujno zagotovljeno s strani okvira)
Zahtevano pomeni mutex seje, ki ste jo zahtevali (tj. ni potrebe po obdelavi istega SessionID vzporedno)

ReadOnly pomeni, da je seja, ki jo zahtevate, neekskluzivna zaklep (tj. vaša zahteva mora še vedno počakati na dokončanje, zahteva za ekskluzivno zaklepanje, vendar lahko obdelavo obdelate z vzporedno neekskluzivno zaklepatvijo). Ampak želiš biti prepričan, da tvoja koda ne piše sej. Ni nujno, da ga izvaja ogrodje)





Prejšnji:CEF: Vgradi Chrome za odjemalca
Naslednji:HTTP napaka 503. Storitev ni na voljo.
Objavljeno na 6. 07. 2018 11:53:31 |
Za WebForms dodajte za stran na vrh aspx (preprosto naložite to blokirno stran):

EnableSessionState="Samo za branje"
 Najemodajalec| Objavljeno na 14. 07. 2019 20:34:17 |
Večina spletnega razvoja uporablja seje za shranjevanje stanj sej, vendar lahko uporaba sej v asp.net aplikacijah pomembno vpliva na zmogljivost spletnih aplikacij. Zakaj in kaj bo vplivalo nanj, je analizirano spodaj

Razlaga MSDN o sočasnih zahtevah in sejah navaja:

Sočasne zahteve in status seje
Dostop do stanja ASP.NET seje je na vsako sejo, kar pomeni, da če dva različna uporabnika pošljeta zahtevo hkrati, je dostop do vsake posamezne seje odobren hkrati. Če pa sta obe sočasni zahtevi za isto sejo (z uporabo iste vrednosti SessionID), bo prva zahteva pridobila ekskluziven dostop do informacij o seji. Druga zahteva bo izvedena šele po izpolnitvi prve. (Če se ekskluzivna zaklep na informacije o seji sprosti, ker prva zahteva preseže časovno omejitev zaklepa, dostop pridobi tudi druga seja.) Če nastavite vrednost EnableSessionState v direktivi @Page na ReadOnly, zahteve po informacijah o sejah samo za branje ne povzročijo izključnega zaklepa podatkov seje. Vendar pa morajo zahteve samo za branje do podatkov seje morda še vedno počakati, da se zaklep odklene iz zahteve za branje/pisanje, ki jo določajo podatki seje.
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com