Daha İyi Performans için ASP.NET Web Sayfaları (Razor) Sitesinde Verileri Önbelleğe Alma

yazan: Tom FitzMacken

Bu makalede, ASP.NET Web Sayfaları (Razor) web sitesinde daha hızlı performans için bilgileri önbelleğe almak için yardımcının nasıl kullanılacağı açıklanmaktadır. Normalde alınması veya işlenmesi çok zaman alan ve çok sık değişmeyen verilerin sonuçlarını depolayarak (önbellek) web sitenizi hızlandırabilirsiniz.

Öğrenecekleriniz:

  • Web sitenizin yanıt hızını artırmak için önbelleğe alma özelliğini kullanma.

Makalede sunulan ASP.NET özellikleri şunlardır:

  • Yardımcı WebCache .

Öğreticide kullanılan yazılım sürümleri

  • ASP.NET Web Sayfaları (Razor) 3

Bu öğretici ASP.NET Web Sayfaları 2 ile de çalışır.

Birisi sitenizden her sayfa istediğinde, web sunucusunun isteği yerine getirmek için bazı işler yapması gerekir. Bazı sayfalarınızda, sunucunun veritabanından veri alma gibi (nispeten) uzun süren görevleri gerçekleştirmesi gerekebilir. Bu görevler mutlak olarak uzun sürmese bile, sitenizde çok fazla trafik yaşanıyorsa, web sunucusunun karmaşık veya yavaş görevi gerçekleştirmesine neden olan bir dizi tek tek istek çok fazla iş ekleyebilir. Bu, sonuçta sitenin performansını etkileyebilir.

Bu gibi durumlarda web sitenizin performansını artırmanın bir yolu verileri önbelleğe almaktır. Siteniz aynı bilgiler için yinelenen istekler alıyorsa ve bilgilerin her bir kişi için değiştirilmesi gerekmiyorsa ve zaman açısından hassas değilse, verileri yeniden getirmek veya yeniden hesaplamak yerine bir kez getirebilir ve ardından sonuçları depolayabilirsiniz. Bu bilgi için bir sonraki istek geldiğinde, bunu önbellekten alırsınız.

Genel olarak, sık değişmeyen bilgileri önbelleğe alırsınız. Bilgileri önbelleğe yerleştirdiğinizde, bu bilgiler web sunucusundaki bellekte depolanır. Saniyeler ile günlerin ne kadar süreyle önbelleğe alınacağını belirtebilirsiniz. Önbelleğe alma süresi dolduğunda, bilgiler önbellekten otomatik olarak kaldırılır.

Not

Önbellekteki girdiler, süresi dolmuş olması dışında nedenlerle kaldırılabilir. Örneğin, web sunucusunun belleği geçici olarak yetersiz kalabilir ve belleği geri kazanmanın bir yolu da önbellekten girdiler atılmasıdır. Gördüğünüz gibi, önbelleğe bilgi eklemiş olsanız bile ihtiyacınız olduğunda hala orada olduğundan emin olmanız gerekir.

Web sitenizin geçerli sıcaklık ve hava durumu tahminini gösteren bir sayfası olduğunu düşünün. Bu tür bilgileri almak için bir dış hizmete istek gönderebilirsiniz. Bu bilgiler çok fazla değişmediğinden (örneğin, iki saatlik bir süre içinde) ve dış çağrılar zaman ve bant genişliği gerektirdiğinden, önbelleğe almak için iyi bir adaydır.

Sayfaya Önbelleğe Alma Ekleme

ASP.NET, sitenize önbelleğe alma eklemeyi ve önbelleğe veri eklemeyi kolaylaştıran bir WebCache yardımcı içerir. Bu yordamda geçerli saati önbelleğe alan bir sayfa oluşturacaksınız. Bu gerçek bir örnek değildir, çünkü geçerli saat sık değişen bir şeydir ve bunun da hesaplaması karmaşık değildir. Ancak, önbelleğe alma işleminin nasıl çalıştığını göstermek için iyi bir yoldur.

  1. Web sitesine WebCache.cshtml adlı yeni bir sayfa ekleyin.

  2. Sayfaya aşağıdaki kodu ve işaretlemeyi ekleyin:

    @{
        var cacheItemKey = "CachedTime";
        var cacheHit = true;
        var time = WebCache.Get(cacheItemKey);
    
        if (time == null) {
            cacheHit = false;
        }
    
        if (cacheHit == false) {
            time = @DateTime.Now;
            WebCache.Set(cacheItemKey, time, 1, false);
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>WebCache Helper Sample</title>
    </head>
    <body>
        <div>
            @if (cacheHit) {
                @:Found the time data in the cache.
            } else {
                @:Did not find the time data in the cache.
            }
        </div>
        <div>
            This page was cached at @time.
        </div>
    </body>
    </html>
    

    Verileri önbelleğe aldığınızda, web sitesinde benzersiz olan bir ad kullanarak önbelleğe koyarsınız. Bu durumda adlı CachedTimebir önbellek girdisi kullanacaksınız. Bu, cacheItemKey kod örneğinde gösterilendir.

    Kod önce önbellek girdisini CachedTime okur. Bir değer döndürülürse (önbellek girişi null değilse), kod yalnızca zaman değişkeninin değerini önbellek verilerine ayarlar.

    Ancak önbellek girdisi yoksa (yani null), kod zaman değerini ayarlar, önbelleğe ekler ve süre sonu değerini bir dakikaya ayarlar. Bir dakika sonra önbellek girdisi atılır. (Önbellekteki bir öğe için varsayılan süre sonu değeri 20 dakikadır.) Komut WebCache.Set(cacheItemKey, time, 1, false) , geçerli saat değerini önbelleğe eklemeyi ve süre sonunu 1 dakikaya ayarlamayı gösterir. slidingExpiration parametresinin olarak false ayarlanması, süre sonu süresinin her istendiği zaman yenilenmediği anlamına gelir. İlk kez önbelleğe eklendikten tam 1 dakika sonra süresi dolar. Bu değeri true önbellekten her istenişinde 1 dakikalık süre sonu süresi sıfırlanır olarak ayarlarsanız.

    Bu kod, verileri önbelleğe alırken her zaman kullanmanız gereken düzeni gösterir. Önbellekten bir şey almadan önce her zaman yöntemin WebCache.Get null döndürup döndürmediğini denetleyin. Önbellek girişinin süresinin dolmuş olabileceğini veya başka bir nedenle kaldırılmış olabileceğini unutmayın. Bu nedenle, belirli bir girişin önbellekte olması hiçbir zaman garanti edilmez.

  3. Tarayıcıda WebCache.cshtml dosyasını çalıştırın. (Sayfayı çalıştırmadan önce Dosyalar çalışma alanında seçili olduğundan emin olun.) Sayfayı ilk kez istediğinizde, zaman verileri önbellekte değildir ve kodun zaman değerini önbelleğe eklemesi gerekir.

    önbellek-1

  4. Tarayıcıda WebCache.cshtml dosyasını yenileyin. Bu kez, zaman verileri önbellektedir. Sayfayı son görüntülediğinizden bu yana saatin değişmediğine dikkat edin.

    önbellek-2

  5. Önbelleğin boşaltılması için bir dakika bekleyin ve sayfayı yenileyin. Sayfa, zaman verilerinin önbellekte bulunamadığını ve güncelleştirilmiş saatin önbelleğe eklendiğini yeniden gösterir.

Ek Kaynaklar