Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 29669|Atsakyti: 3

[ASP.NET] ASP.NET puslapyje vienu metu pateikiamos kelios užklausos, blokuojama sustabdyta animacija

[Kopijuoti nuorodą]
Paskelbta 2017-09-22 17:32:59 | | | |
Neseniai, kai dirbau su projektu, kai kuriuose puslapiuose reikėjo įkelti daug duomenų, o kartais spustelėdavau puslapį nelaukdamas, kol puslapis baigs įkelti, o tada vėl spustelėdavau kitą puslapį

Įkeliant tinklalapį bus labai lėta sustabdytos animacijos būsena, todėl šiandien atidžiai išnagrinėkime.

Iš pradžių maniau, kad tokia situacija atsiras daugelyje svetainių arba mano kompiuterio tinklo greičio problema, tačiau pastebėjau, kad šioje svetainėje tokios situacijos nėra, kartais įstrigdavau, kai paskelbdavau, bet spustelėdavau kitus skirtuko puslapius, kad greitai įkelčiau.

Pažvelkime atidžiau šiandien! Pirmiausia išbandytas kodas:

Pagrindinis peržiūros kodas:

Kontrolieriaus kodas:



Bandymo kodo analizei mūsų valdiklis turi 3 metodus, vienas yra pagrindinis puslapis, o kiti du yra bandymo metodai

Test1 užklausa blokuojama 5 sekundėms ir grąžina duomenis vartotojui

Test2 užklausos nebus blokuojamos ir grąžins duomenis tiesiai vartotojui

Mūsų pagrindinis puslapis yra dvi sąsajos Ajax užklausoms, kurios yra asinchroninės užklausos, todėl nėra blokavimo problemos.

Pamatysime, kad Test1 metodas išveda turinį tik po to, kai Test2 išveda turinį (Paprastai puslapis tiesiogiai išves Test2 grąžintą turinį, o tada palaukite 5 sekundes, kol bus išvestas Test1 grąžintas turinys, nes js neblokuoja



Tada mes tiesiogiai pasiekiame Test1 ir Test2 sąsajas, pirmiausia pasiekiame Test1, tada nedelsdami pasiekiame Test2 ir pastebime, kad Test2 turi palaukti, kol Test1 grįš baigti, kaip parodyta paveikslėlyje žemiau:



Jei puslapio užklausa nustato skaitytojo užraktą, kitos užklausos, kurios apdorojamos tuo pačiu metu tame pačiame seanse, negalės atnaujinti seanso būsenos, bet bent jau jas bus galima perskaityti. Jei puslapis prašo seanso būsenos rašymo užrakto, visi kiti puslapiai blokuojami, nepriklausomai nuo to, ar jie nori skaityti ar rašyti turinį. Pavyzdžiui, jei du programos rodiniai rašo turinį tame pačiame seanse tuo pačiu metu, viena programa turi palaukti, kol bus baigta kita programa, kad ją būtų galima parašyti. AJAX programavime svarbu žinoti, kad tai vyksta.

Speciali pastaba: tik rašydami sesiją Asp.net užblokuosite užklausą, bet tol, kol apsilankėte puslapyje, kuriame parašyta sesija, pvz., operacija prisijungus prie sistemos su sesija (sesija užrakinama iki jos galiojimo pabaigos, žinoma, tik tuo atveju, jei sesijos ID yra tas pats). Bus tokia problema.

Netizen informacija

Kol svetainė naudoja seansą, kiekviena užklausa užrakins seansą per visą jo gyvavimo laiką, todėl užklausos su tuo pačiu seanso ID turi palaukti, kol bus atrakintos

Tai reiškia, kad jei svetainėje yra skirtasis laikas, ji nieko negali padaryti ir turite palaukti, kol bus įkeltas laikas puslapis.

Jūs taip pat negalite to padaryti, keli ajax vienu metu užklausos tame pačiame puslapyje, jūs negalite to padaryti, pranešimų apklausos užklausos.



Apibendrinant:Jei į užklausą įtrauksite seansą, jei nepateiksite seanso į užklausą, aukščiau nurodyta situacija neįvyks

Sprendimas:

Įtraukta funkcija SessionState(System.Web.SessionState.SessionState.SessionStateBehavior.ReadOnly) prie valdiklio valdiklio

Nata:

Būtina reiškia, kad prašote išskirtinio seanso užrakto (t. y. lygiagrečiai neapdoroti to paties seanso ID užklausų)
"ReadOnly" reiškia, kad prašote neišskirtinio "Session" užrakto (t. y. jūsų užklausa vis tiek turi palaukti, kol užklausos su išskirtiniu užraktu bus baigtos, tačiau galite apdoroti užklausas su neišskirtiniu spynos lygiagrečiai. Tačiau jūs turite užtikrinti, kad jūsų kodas nebūtų rašomas į "Session". Tai nebūtinai vykdoma pagal sistemą)
Būtinas reiškia jūsų prašomą seanso muteksą (t. y. nereikalaujama lygiagrečiai apdoroti to paties SessionID)

"ReadOnly" reiškia, kad jūsų užklausa yra neišskirtinis užraktas (t. y. jūsų užklausa vis dar turi palaukti, kol bus užbaigta, išskirtinio užrakto užklausa, bet galite apdoroti užklausą naudodami lygiagrečią neišskirtinį užraktą). Tačiau norite įsitikinti, kad jūsų kodas nerašo seansų. Jis neturi būti vykdomas pagal sistemą)





Ankstesnis:CEF: įdėkite "Chrome" klientui
Kitą:HTTP klaida 503. Paslauga nepasiekiama.
Paskelbta 2018-07-06 11:53:31 |
Jei naudojate žiniatinklio formas, pridėkite po puslapio aspx viršuje (tiesiog įkelkite tą blokavimo puslapį):

EnableSessionState="ReadOnly"
 Savininkas| Paskelbta 2019-07-14 20:34:17 |
Dauguma žiniatinklio kūrimo seansų naudoja seansų būsenoms išsaugoti, tačiau seansų naudojimas asp.net programose gali turėti didelės įtakos žiniatinklio programų našumui. Kodėl ir kas tai paveiks, analizuojama toliau

MSDN vienalaikių užklausų ir seanso būsenų paaiškinimas:

Lygiagrečios užklausos ir seanso būsena
Prieiga prie ASP.NET seanso būsenos yra per seansą, o tai reiškia, kad jei du skirtingi vartotojai siunčia užklausą vienu metu, prieiga prie kiekvieno atskiro seanso suteikiama tuo pačiu metu. Tačiau jei dvi vienu metu pateiktos užklausos yra tam pačiam seansui (naudojant tą pačią SessionID reikšmę), pirmoji užklausa gaus išskirtinę prieigą prie seanso informacijos. Antroji užklausa bus įvykdyta tik įvykdžius pirmąją užklausą. (Jei seanso informacijos išskirtinis užraktas atleidžiamas, nes pirmoji užklausa viršija užrakto skirtąjį laiką, antrasis seansas taip pat gauna prieigą.) Jei @Page direktyvoje nustatysite reikšmę EnableSessionState į Tik skaityti, tik skaitymo seanso informacijos užklausos neužrakins seanso duomenų. Tačiau tik skaitymo seanso duomenų užklausoms vis tiek gali tekti palaukti, kol bus atrakintas seanso duomenų nustatytos skaitymo / rašymo užklausos užraktas.
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com