Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 29669|Odpoveď: 3

[ASP.NET] ASP.NET viacerými požiadavkami na stránke naraz vzniká blokujúca situácia pozastavenej animácie

[Kopírovať odkaz]
Zverejnené 22. 9. 2017 17:32:59 | | | |
Nedávno, keď som pracoval na projekte, niektoré stránky potrebovali načítať veľa dát, a niekedy som klikol na stránku bez toho, aby som počkal, kým sa stránka dokončí načítať, a potom znova klikol na inú stránku

Pri načítavaní webovej stránky bude veľmi pomalý stav pozastavenej animácie, preto si to dnes dôkladne preštudujme.

Najprv som si myslel, že sa to stane na mnohých stránkach alebo na mojom probléme s rýchlosťou počítačovej siete, ale zistil som, že táto stránka túto situáciu nemá, niekedy som sa zasekol, keď som niečo zverejnil, ale klikol som na iné stránky v karte, aby sa rýchlo načítala.

Pozrime sa na to dnes bližšie!! Kód bol testovaný ako prvý:

Homeview kód:

Kód ovládača:



Na analýzu testovacieho kódu má náš kontrolér 3 metódy, jedna je domovská stránka a ďalšie dve sú testovacie metódy

Požiadavka Test1 blokuje na 5 sekúnd a potom vráti dáta používateľovi

Test2 požiadavky nebudú blokované a vrátia dáta priamo používateľovi

Naša domovská stránka má dve rozhrania pre Ajax požiadavky, ktoré sú asynchrónne, takže nie je problém s blokovaním.

Zistíme, že metóda Test1 vyprodukuje obsah až po tom, čo Test2 vyprodukuje obsah (Zvyčajne stránka vypíše obsah vrátený priamo Test2 a potom počká 5 sekúnd na výstup obsahu vráteného Test1, pretože js neblokuje



Potom priamo pristupujeme k rozhraniam Test1 a Test2, najprv k Test1, potom ihneď k Test2 a zistíme, že Test2 musí počkať, kým sa Test1 vráti, aby dokončil, ako je znázornené na obrázku nižšie:



Ak požiadavka stránky nastaví zámok čítačky, ostatné požiadavky, ktoré sa spracúvajú súčasne v tej istej relácii, nebudú môcť aktualizovať stav relácie, ale aspoň sa dajú prečítať. Ak stránka požiada o zápisový zámok pre stav relácie, všetky ostatné stránky sú zablokované, bez ohľadu na to, či chcú čítať alebo zapisovať obsah. Napríklad, ak dva pohľady programu píšu obsah v tej istej relácii súčasne, jeden program musí počkať, kým druhý program dokončí, aby mohol byť napísaný. Pri programovaní AJAX je dôležité byť si toho vedomý.

Špeciálna poznámka: Iba pri zápise relácie Asp.net požiadavku zablokuje, ale pokiaľ ste navštívili stránku, kde sa relácia zapisuje, napríklad operácia po prihlásení do systému so reláciou (relácia je uzamknutá až do vypršania, samozrejme, SessionID je rovnaké). Bude tu tento problém.

Informácie o internete

Pokiaľ webová stránka používa reláciu, každá požiadavka ju uzamkne počas celej svojej životnosti, takže požiadavky s rovnakým sessionid musia počkať na odomknutie

To znamená, že ak má webová stránka stránku s časovým limitom, nemôže nič robiť a musíte čakať, kým sa načíta stránka s časovým limitom.

Ani to nemôžeš urobiť, viacero súbežných požiadaviek Ajaxu na jednej stránke, nemôžeš to urobiť, požiadavky na dotazovanie správ.



Na záver:Ak prijmete sedenie na žiadosť, ak neprinesiete sedenie na žiadosť, vyššie uvedená situácia sa nestane

Riešenie:

Pridaná funkcia SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) do kontroléra

Nota:

Povinné znamená, že žiadate exkluzívny zámok na Session (t. j. žiadne paralelné spracovanie požiadaviek na ten istý sessionID)
ReadOnly znamená, že žiadate o neexkluzívne uzamknutie relácie (t. j. vaša požiadavka musí stále čakať na dokončenie požiadaviek s exkluzívnym zámkom, ale môžete spracovávať požiadavky s neexkluzívnymi požiadavkami zámky paralelne. Avšak je na vás, aby ste zabezpečili, že váš kód nebude písať do Session. Nie je to nevyhnutne vynútené rámcom)
Povinný znamená session mutex, ktorý ste požiadali (t. j. nie je potrebné spracovávať rovnaké SessionID paralelne)

ReadOnly znamená, že relácia, ktorú žiadate, je neexkluzívny zámok (t. j. vaša požiadavka musí stále čakať na dokončenie, požiadavka na exkluzívny zámok, ale môžete spracovať požiadavku s paralelným neexkluzívnym zámkom). Ale chceš sa uistiť, že tvoj kód nepíše relácie. Nemusí to byť vykonávané frameworkom)





Predchádzajúci:CEF: Vložiť Chrome pre klienta
Budúci:HTTP chyba 503. Služba nie je dostupná.
Zverejnené 6. 7. 2018 11:53:31 |
Pre WebForms pridajte za stránku hore v aspx (stačí načítať tú blokujúcu stránku):

EnableSessionState="Iba na čítanie"
 Prenajímateľ| Zverejnené 14. 7. 2019 20:34:17 |
Väčšina webového vývoja používa relácie na ukladanie stavov relácií, ale použitie relácií v asp.net aplikáciách môže mať významný vplyv na výkon webových aplikácií. Prečo a čo ho ovplyvní, je analyzované nižšie

MSDN vysvetlenie súbežných požiadaviek a relácií uvádza:

Súbežné požiadavky a stav relácie
Prístup k ASP.NET stavu relácie je za každú reláciu, čo znamená, že ak dvaja rôzni používatelia odošlú požiadavku súčasne, prístup ku každej jednotlivej relácii je udelený súčasne. Ak sú však dve súbežné požiadavky pre tú istú reláciu (použitím rovnakej hodnoty SessionID), prvá požiadavka získa exkluzívny prístup k informáciám o relácii. Druhá požiadavka bude vykonaná až po splnení prvej požiadavky. (Ak sa uvoľní exkluzívny zámok na informácie o relácii, pretože prvá požiadavka prekročí časový limit zámku, prístup získava aj druhá relácia.) Ak nastavíte hodnotu EnableSessionState v @Page direktíve na ReadOnly, požiadavky na informácie o reláciách len na čítanie nevedú k exkluzívnemu zamknutiu dát relácie. Avšak požiadavky len na čítanie na dáta relácie môžu stále čakať, kým sa zámok odomkne z požiadavky na čítanie/zápis nastavenej dátami relácie.
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com