Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 29669|Yanıt: 3

[ASP.NET] ASP.NET sayfada aynı anda birden fazla istek varsa, askıya alınmış animasyon engelleme durumu vardır

[Bağlantıyı kopyala]
Yayınlandı 22.09.2017 17:32:59 | | | |
Son zamanlarda bir proje üzerinde çalışırken, bazı sayfaların çok fazla veri yüklemesi gerekiyordu ve bazen sayfanın yüklenmesini beklemeden sayfaya tıkladım, sonra tekrar başka bir sayfaya tıkladım

Web sayfası yüklenirken çok yavaş bir askıya alınmış animasyon olacak, bu yüzden bugün bunu dikkatlice inceleyelim.

Başta bu durumun birçok web sitesinde veya bilgisayar ağı hız sorunumda olacağını düşündüm, ama bu sitede böyle bir durum yoktu, bazen gönderi yaparken takılıyordum ama sekmedeki diğer sayfalara tıklayarak hızlı yükleniyordum.

Bugün daha yakından bakalım!! İlk test edilen kod:

Ev Görünümü Kodu:

Kontrolör Kodu:



Test kodu analizi için denetleyicimizin 3 yöntemi var; biri ana sayfa, diğer ikisi ise test yöntemleri

Test1 isteği 5 saniye bloklar ve ardından verileri kullanıcıya geri döndürür

Test2 istekleri engellemez ve veri doğrudan kullanıcıya döner.

Ana sayfamızda Ajax istekleri için iki arayüz var, bunlar asenkron isteklerdir, yani engelleme sorunu yok.

Test1 yönteminin içeriği yalnızca Test2 içerik çıktıktan sonra (Normalde, sayfa Test2'nin döndüren içeriğini doğrudan çıkarır ve ardından Test1'in geri dönen içeriği 5 saniye içinde çıkarır çünkü js engellemez



Sonra doğrudan Test1 ve Test2 arayüzlerine erişiyoruz, önce Test1'e, ardından hemen Test2'ye erişiyoruz ve aşağıdaki şekilde gösterildiği gibi, Test2'nin tamamlanması için Test1'in geri dönmesini beklemesi gerektiğini görüyoruz:



Bir sayfa isteği okuyucu kilidi belirlerse, aynı oturumda aynı anda işlenen diğer istekler oturum durumunu güncelleyemez, ancak en azından okunabilirler. Bir sayfa oturum durumu için yazma kilidi isterse, içerik okumak ya da yazmak istemelerine bakılmaksızın diğer tüm sayfalar engellenmiştir. Örneğin, iki program görünümü aynı oturumda aynı anda içerik yazıyorsa, bir program diğerinin bitmesini beklemek zorundadır. AJAX programlamalarında bunun farkında olmak önemlidir.

Özel not: Sadece oturum yazarken isteği Asp.net engeller, ancak oturumun yazıldığı sayfayı ziyaret ettiyseniz, örneğin oturumun bulunduğu sisteme giriş yaptıktan sonraki işlem (tabii ki oturum süresi dolana kadar kilitlidir, sadece SessionID aynı durumda olur). Bu sorun olacak.

İnternet bilgisi

Web sitesi bir oturum kullandığı sürece, her istek oturumu ömrü boyunca kilitler, böylece aynı oturum kimliğine sahip istekler açılmak için beklemek zorunda kalır

Bu, sitenin zamanlama geçmişi olan bir sayfası varsa hiçbir şey yapamayacağı ve zamanlanmış sayfanın yüklenmesini beklemeniz gerektiği anlamına gelir.

Bunu da yapamazsınız, aynı sayfada birden fazla eşzamanlı Ajax isteği yapamazsınız, mesaj anketi talepleri.



Özetle:Talebe bir oturum alırsanız, isteğe oturum getirmezseniz, yukarıdaki durum gerçekleşmez

Çözüm:

Kontrolcü denetleyicisine SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) özelliği eklendi

Not:

Zorunlu, Session'da özel bir kilit talep ettiğiniz anlamına gelir (yani aynı sessionID için taleplerin paralel işlemesi yok).
ReadOnly, Session'da özel olmayan bir kilit talep ettiğiniz anlamına gelir (yani talebiniz hala özel kilitli taleplerin bitmesini beklemek zorunda, ancak özel olmayan istekleri işleyebilirsiniz paralel kilitler. Ancak kodunuzun Session'a yazılmamasını sağlamak size kalmış. Bu çerçeve tarafından zorunlu olarak uygulanmaz)
Zorunlu, istediğiniz oturum mutex'i anlamına gelir (yani aynı SessionID'yi paralel olarak işlemek gerekliliği yoktur).

ReadOnly, talep ettiğiniz oturumun münhasır olmayan bir kilit olduğu anlamına gelir (yani talebiniz tamamlanmasını beklemek zorunda, özel kilit isteği ise paralel özel olmayan bir kilit ile işlem yapabilirsiniz). Ama kodunun oturum yazmadığından emin olmak istersin. Çerçeve tarafından yürütülmek zorunda değil)





Önceki:CEF: İstemci için Chrome gömmek
Önümüzdeki:HTTP Hatası 503. Hizmet mevcut değildir.
Yayınlandı 6.07.2018 11:53:31 |
WebForms için, aspx'in üstündeki Sayfa'nın ardınca ekleyin (sadece o engelleme sayfasını yükleyin):

EnableSessionState="Sadece Okuyan"
 Ev sahibi| Yayınlandı 14.07.2019 20:34:17 |
Çoğu web geliştirme, oturum durumlarını kaydetmek için oturumlar kullanır, ancak asp.net uygulamalarda oturum kullanmak, web uygulamalarının performansı üzerinde önemli bir etkiye sahip olabilir. Neden ve neyin etkileyeceği aşağıda analiz edilmektedir

MSDN'nin eşzamanlı talepler ve oturum açıklaması şöyle diyor:

Eşzamanlı talepler ve oturum durumu
ASP.NET oturum durumuna erişim oturum başına yapılır; yani iki farklı kullanıcı aynı anda bir istek gönderirse, her oturuma aynı anda erişim verilir. Ancak, iki eşzamanlı talep aynı oturum için ise (aynı SessionID değeri kullanılarak), ilk talep oturum bilgilerine münhasır erişim sağlar. İkinci talep ancak ilk talep tamamlandıktan sonra gerçekleştirilir. (Eğer oturum bilgisindeki özel kilit, birinci isteğin kilit zaman aşımını aşması nedeniyle serbest bırakılırsa, ikinci oturum da erişim kazanır.) @Page direktifinde EnableSessionState değerini ReadOnly olarak ayarlarsanız, yalnızca okunabilir oturum bilgisi talepleri oturum verisine özel bir kilitlenme anlamına gelmez. Ancak, oturum verisine yönelik yalnızca okunma talepleri, oturum verisi tarafından belirlenen okuma/yazma isteğinden kilidin açılmasını beklemek zorunda kalabilir.
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com