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)
|