Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 29669|Válasz: 3

[ASP.NET] ASP.NET egyszerre több kérés érkezik az oldalon, blokkoló felfüggesztett animáció

[Linket másol]
Közzétéve 2017. 09. 22. 17:32:59 | | | |
Nemrég, amikor egy projekten dolgoztam, néhány oldalnak sok adatot kellett betöltenie, és néha rákattintottam az oldalra anélkül, hogy megvártam volna, amíg az oldal betöltődik a betöltés, majd újra rákattintottam egy másik oldalra

Az oldal betöltése közben nagyon lassú felfüggesztett animáció lesz, ezért ma alaposan tanulmányozzuk.

Eleinte azt hittem, hogy ez a helyzet sok weboldalon előfordul vagy a számítógépes hálózati sebességproblémám, de rájöttem, hogy ezen az oldalon nincs ilyen, néha elakadtam posztoláskor, de gyorsan betöltődtem a fül más oldalaira.

Nézzük meg ma közelebbről!! A kód először tesztelte:

Homeview kód:

Vezérlő kód:



A tesztkód elemzéshez a vezérlőnknek három módszere van: az egyik a kezdőlap, a másik kettő tesztmódszerek

A Test1 kérés 5 másodpercig blokkolja, majd visszaadja az adatokat a felhasználónak

A Test2 kérések nem blokkolnak, és közvetlenül a felhasználónak adják vissza az adatokat

A kezdőlapunkon két interfész van az Ajax kérésekhez, amelyek aszinkron kérések, így nincs blokkolási probléma.

Azt fogjuk tapasztalni, hogy a Test1 módszer csak akkor ad tartalmat kiadni, ha a Test2 tartalmat ad (Általában az oldal közvetlenül a Test2 által visszaküldött tartalmat adja ki, majd 5 másodpercet vár, hogy a Test1 által visszaküldött tartalmat adja ki, mert a js nem blokkolja



Ezután közvetlenül elérjük a Test1 és Test2 interfészeket, először a Test1-et, majd azonnal a Test2-t, és azt találjuk, hogy a Test2-nek várnia kell, amíg a Test1 visszatér, hogy befejezzék, ahogy az alábbi ábrán is látható:



Ha egy oldalkérés olvasó-zárlatot állít be, akkor a más, ugyanabban az ülésben egyszerre feldolgozó kérések nem tudják frissíteni a munkafolyamat állapotát, de legalább olvashatók. Ha egy oldal írási zárolást kér a session állapotához, akkor minden más oldal blokkolódik, függetlenül attól, hogy olvasni vagy írni akar tartalmat. Például, ha két programnézet egyszerre ír tartalmat ugyanabban az ülésben, az egyik programnak meg kell várnia, amíg a másik program befejeződik, mielőtt megírhatnánk. Az AJAX programozásban fontos tudatában lenni ennek a megtörténésnek.

Külön megjegyzés: Csak akkor ír egy ülést, Asp.net blokkolja a kérést, de amennyiben már meglátogattad azt az oldalt, ahol az ülés íródott, például a műveletet a rendszerbe való bejelentkezés után, amely a szekcióval együtt (a szekció le van zárva, amíg lejár, persze, csak akkor van az, ha a SessionID ugyanaz). Lesz ez a probléma.

Netélő információk

Amíg a weboldal egy ülést használ, minden kérés végig zárja a játékmenetet, így ugyanazzal a sessioniddel rendelkező kéréseknek várniuk kell a feloldásra

Ez azt jelenti, hogy ha a weboldalnak van időzített oldala, nem tud semmit csinálni, és várnod kell, amíg az időzített oldal betöltődik.

Te sem teheted meg, több Ajax párhuzamos kérés ugyanazon az oldalon, nem tudod, üzenetszavazási kérések.



Összefoglalva:Ha egy ülést veszel a kéréshez, ha nem hozol részt a kéréshez, a fenti helyzet nem fog bekövetkezni

Megoldás:

Hozzáadtam a SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) funkciót a vezérlővezérlőhöz

Jegyzet:

A kötelező azt jelenti, hogy exkluzív zárolást kérsz a Session-en (azaz nem kell párhuzamosan feldolgozni ugyanazt a sessionID-t kérve).
ReadOnly azt jelenti, hogy nem exkluzív zárolást kérsz a Session-en (azaz a kérésnek még mindig várnia kell, hogy exkluzív zárolású kérések befejeződjenek, de a nem exkluzív kéréseket is feldolgozhatod párhuzamosan zár. Viszont rajtad múlik, hogy a kódod ne írjon a Session-be. Ez nem feltétlenül a keretrendszer által érvényesíthető)
A kötelező azt jelenti, hogy az Ön által kért session mutexet (azaz nincs követelmény ugyanezt a SessionID-t párhuzamosan feldolgozni).

A ReadOnly azt jelenti, hogy az általad kért ülés nem exkluzív zárolás (azaz a kérésnek még várnia kell a befejezésre, az exkluzív zárolás kérése, de feldolgozhatod a kérést párhuzamos nem exkluzív zárolóval). De ügyelj arra, hogy a kódod ne írjon üléseket. Nem kell a keretrendszer végrehajtania)





Előző:CEF: A klienshez Chrome beágyazása
Következő:HTTP hiba 503. A szolgáltatás nem elérhető.
Közzétéve 2018. 07. 06. 11:53:31 |
WebForms-hoz add hozzá az aspx tetején lévő oldal után (csak töltsd be azt a blokkoló oldalt):

EnableSessionState="Csak olvasható"
 Háziúr| Közzétéve 2019. 07. 14. 20:34:17 |
A legtöbb webfejlesztés munkameneteket használ a szekciós állapotok mentésére, de asp.net alkalmazásokban való munkamenetek használata jelentős hatással lehetnek a webalkalmazások teljesítményére. Az alábbiakban elemezzük, hogy miért és mi befolyásolja ezt

Az MSDN magyarázata az egyidejű kérésekre és az ülésszakra így szól:

Egyidejű kérések és az ülésszak állapota
A ASP.NET session állapotához való hozzáférés egy ülésenként, vagyis ha két különböző felhasználó egyszerre küld kérést, akkor minden egyes üléshez egyszerre hozzáférést kap. Azonban, ha a két párhuzamos kérés ugyanazra az ülésre vonatkozik (ugyanazzal a SessionID értékkel), az első kérés kizárólagos hozzáférést kap a munkamenet adataihoz. A második kérést csak az első kérés teljesítése után hajtják végre. (Ha az exkluzív zárolás a munkafolyamat információján azért szabadul ki, mert az első kérés túllépi a zárolás időkorlátját, akkor a második alkalom is hozzáfér.) Ha az EnableSessionState értéket a @Page direktívában ReadOnly (ReadOnly) állítod be, akkor az olvasási session-információk kérései nem eredményeznek exkluzív zárolást a munkafolyamat adatain. Azonban a session adatokra vonatkozó csak olvasható kéréseknek még mindig várniuk kell, amíg a zárolás feloldódik az olvasási/írási kérvényből.
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com