Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Turhal Temizer
Turhal Temizer
http://www.turhaltemizer.com
İletişme geçmek için tıklayın.
92 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: Asp Asp.net Asp.net Mvc Asp.Net Mvc Framework banner cach Helper HtmlHelper HttpResponse Mvc MVC Framework outputcache sunstitution ASP.NET Turhal Temizer
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : ASP.NET
Yayınlanma Tarihi : 30.9.2009
Okunma Sayısı : 23792
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 28.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 28.3.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 28.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 28.3.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Asp.Net MVC Framework - OutputCache Kullanımı ve Dinamik İçerik Görüntüleme
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Asp.Net MVC Framework ile geliştirilen uygulamaların performanslarının arttırılması için bir ön bellekleme kullanılması en çok tercih edilen yöntemlerden biridir. Web sayfalarının görüntülenmesi esnasında benzer veriler görüntülenecekse bu sayfaların önbellekte tutulması sayfa görüntüleme performansını arttıracak. Ana sayfada görüntülenen bir veriyi önbellekleme kullanarak diğer kullanıcılar içinde hızlıca açılabilmesine olanak tanırız. Bu konu hakkında kafanıza takılan konular var ise OutputCache Kullanımı ve Performans başlıklı bir önceki yazımızı okuyabilirsiniz.

Ön bellek kullanarak benzer verileri bellekte tutulması yöntemi ile bir çok kullanıcıya hızlı bir şekilde gösterebiliriz. Evet performans açısında başarılı bir çözüm ancak bu kullanımda kesinlikle dikkat edilmesi gereken bir nokta var. Web sayfası üzerinde yer alan dinamik içerikler. Bu tür sayfalarda 4-5 adet reklam rastgele bir şekilde sayfayı açan kullanıcılara gösterilecektir. Eğer ki bizler bütün sayfayı önbelleğe aldırırsak sayfa her yenilendiğinde kullanıcı aynı reklamı görmeye devam edecektir. Bu durumda web sitelerinin reklamlar üzerinden gelir elde ettiğini düşünürsek hiçte istenen bir durum olmadığı gözlenir. Çünkü siteler parayı yalnızca açılmış olan tek reklam üzerinde alacaklardır ki kullanıcılar da bir kez tıkladığı reklamı ikinci kez tıklamama ihtimali oldukça yüksektir.

Bu noktada MVC ile uygulama geliştirmek istiyoruz ancak reklamda kullanmak istiyoruz. Ayrıca uygulamanın performansının da hızlı olması için önbellekte kullanılması gerektiğini gözlemliyoruz. Peki, yapılabilecek bir işlem yok mu? Neyse ki bu sorunun çözümü oldukça basittir. Asp.Net Framework 'ü içerisinde yer alan post-cache substitution 'ı çağırmak yeterli olacaktır.

Not: Normal durumda OutputCache özniteliği yardımı ile sayfalar hem sunucu hem de son kullanıcının bilgisayarında yer alan internet tarayıcısında önbelleğe alınabiliyor. Değişken bir içerik kullanılacaksa (banner reklamlar gibi) post-cache substitution kullanımı ile sayfanın o bölümü sunucu üzerinde önbelleğe alınarak kullanılır.

Post-Cache Substitution Kullanımı

Post-Cache Substitution kullanımını iki adımda tamamlanabilinmesi mümkündür. Birinci adım, geri dönüş değeri string olan bir metot hazırlayarak dinamik içeriğin görüntülenecek olduğu önbelleğe alınacak olan bir sayfa oluşturmak olacaktır. Daha sonraki adımda ise dinamik içeriğin görüntüleneceği sayfaya HttpResponse.WriteSubstitution() metodunu kullanabilmek için ekliyoruz.

Bahsettiğimiz bu konuları bir örnek ile pekiştirmek gerekirse, ekran üzerinde rastgele veri gösteren değerleri önbelleğe alınacak dinamik bir web sayfası oluşturalım. Bu işlem için basitçe RenderNews() isimli bir metot oluşturalım. Geri dönüş olarak stringlist in içerisinde yer alan değerleri rastgele olarak göstersin.

Models\News.cs
using System;
using System.Collections.Generic;
using System.Web;

namespace DynamicContentCache.Models
{
    public class News
    {
        public static string RenderNews(HttpContext context)
        {
            var news = new List<string>
            {
                "Dünya 1",
                "Dünya 2",
                "Dünya 3"
            };

            var random = new Random();
            return new string[random.Next(news.Count)];
        }
    }
}

Model içerisine oluşturulan verileri view içerisinde oluşturacak olduğumuz sayfa içerisinde göstereceğiz. Bu sayfa içerisinde HttpResponse.Substitution() metodundan yararlanarak önbelleğe alınmış sayfa içerisinde dinamik içeriğin rastgele olarak görüntülenebilmesine olanak tanınacaktır.

Post-cache substitution yöntemini kullanabilmek için HttpResponse.WriteSubstitution() metodunu kullanıyor olacağız. Bunun için view sayfa içerisinde dinamik olarak değiştirilmesi istenilen değerler bu metot içerisine eklenilerek kullanılır.

Views\Home\Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DynamicContentCache.Models.News>>" %>
<%@ Import Namespace="DynamicContentCache.Models" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
        <% Response.WriteSubstitution(News.RenderNews); %>
        <hr />
             OutputCache içeriği
             <%= DateTime.Now %>
    </div>
</asp:Content>

WriteSubstitution() metodundan yararlanarak RenderNews() içerisinde yer alan değerleri her yenileme esnasında rastgele olarak getirilmesini sağlamaktadır.

Controller katmanında yer alan Home Controller sınıfının içerisindeki Index() Action unda da sayfa üzerinde gösterilecek olan değerlerin herhangi bir parametre almadan 60 saniyede bir önbelleğe alınmasını sağlayacak şekilde gerekli değişiklikleri yapıyoruz. Bir önceki yazımızda da değindiğimiz gibi önbelleğe alma işlemlerini [OutputCache] özniteliğini kullanarak yapabildiğimizi detaylı bir şekilde incelemiştik.

Controllers\HomeController.cs
using System.Web.Mvc;

namespace DynamicContentCache.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        [OutputCache(Duration=60, VaryByParam="none")]
        public ActionResult Index()
        {
            return View();
        }
    }
}

HomeController içerisinde yer alan Index() 'in içerisinde yer alacak olan verilerin ön belleğe alınmasını sağlamış durumdayız. Bu işlemler sonrasında Index.aspx sayfasının içerisinde yer alan değerler bir dakika boyunca önbellekte kalmaya devam edecektir. Ancak dinamik içeriklerin değişmesi istemiştik. WriteSubstitution() metodu sayesinde web sayfası önbelleğe alınmış olmamıza rağmen sorunsuzca dinamik verilerin güncellendiğini gözlemleyeceğiz. Yapmış olduğumuz işlemler sonrasında karşımıza çıkan ekran görüntüsü aşağıdaki gibi olacaktır.



Web sayfası görüntülenirken sayfayı her yenilediğimizde önbelleğe alınan kısım bir dakika boyunca sabit kalırken dinamik olarak değişmesini istediğimiz değer de sorunsuzca kendisini yenileme işlemini gerçekleştirmektedir.

Post-Cache Substitutionu Helper Metot içerisinde Kullanmak

WriteSubstitution() metodunu view sayfaların içerisinde kullanabilmekle birlikte bizlerin hazırlamış olduğu harici HTML Helper metotlar yardımı ile de kullanılabilmesi mümkündür. Bunun için projemize bir adet AdHelper.cs isimli helper sınıfı ekliyoruz ve aşağıdaki işlemleri uyguluyoruz.

Not: HTML Helper metotların nasıl oluşturulacağı konusunda yeterince bilgiye sahip olduğunuza inanmıyorsanız daha önceden yayınlanmış olan yazılarımızı okuyarak bu eksiğinizi tamamlayabilirsiniz.

Helpers\AdHelper.cs
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;

namespace DynamicContentCache.Helpers
{
    public static class AdHelper
    {
        public static void RenderBanner(this HtmlHelper helper)
        {
            var context = helper.ViewContext.HttpContext;
            context.Response.WriteSubstitution(RenderBannerInternal);
        }

        private static string RenderBannerInternal(HttpContext context)
        {
            var img = new List<string>
            {
                "images/tuural.jpg",
                "images/turhal.jpg"
            };

            var random = new Random();
            var ad = img[random.Next(img.Count)];
            return String.Format("<img src='{0}' />", ad);
        }
    }
}

Statik olarak iki tane metot oluşturuyoruz. Bunlar, RenderBanner() ve RenderBannerInternal() 'dir. Helper metot olarak kullanılacak olan RenderBanner() 'ı hazırken WriteSubstitution 'nun callback yapacak olduğu değerileri alabilmesini sağlayan RenderBannerInternal() dir. Asp.Net MVC HtmlHelper sınıfından yararlanarak view sayfalarda Html.RenderView() şeklinde kullanılmasına olanak tanımış oluyoruz.

RenderView() metodu çağırıldığında HttpResponse.WriteSubstitution() metodu doğrulayarak RenderViewInternal() metodunu kullanacaktır. Ayrıca private bu metot içerisinde rastgele olarak seçilen banner resimlerin görüntülenmesi için gerekli işlemler sağlanmaktadır. Biraz önce yazılar için yapmış olduğumuz dinamik içeriklerin güncellenmesi işlemini şimdi de resimler için hazırlamış olduk.

Tekrardan kısaca oluşturulan harici HtmlHelper ları nasıl view sayfalarda görüntüleyeceğimizi hatırlayalım. İlk olarak yapılması gereken oluşturulmuş olan Helpers sınıfını web sayfasına <% import%> şeklinde eklemek olacaktır. Sonrasında ise helpers sınıfı içerisinde yer alan metotlardan HtmlHelper 'a göre oluşturulmuş olanlar biz web sayfasında <% Html. %> şeklinde bir kullanım esnasında otomatik tamamlama ekranında çıkacaktır. Sonrasında ise tek yapmamız gereken kendi Helper Metodunuzu projenizde kullanmak olacaktır. Bu ön bilgi sonrasında biraz önce oluşturulmuş olan Index.aspx sayfasını aşağıdaki biçimde güncelliyoruz.

Views\Home\Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<DynamicContentCache.Models.News>>" %>
<%@ Import Namespace="DynamicContentCache.Models" %>
<%@ Import Namespace="DynamicContentCache.Helpers" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
       
<% Response.WriteSubstitution(News.RenderNews); %>
       <hr />
        <% Html.RenderBanner(); %>
        <hr />
             OutputCache içeriği
             <%= DateTime.Now %>
    </div>
</asp:Content>

Yapmış olduğumuz değişiklikler sonrasında Index.aspx sayfasına Html.RenderView() helper ini çalışacak şekilde ekledik ve uygulamayı hazır hale getirdik. Artık web sayfalarında gösterecek olduğumuz reklamları ve diğer aklımıza gelmeyen öğeleri önbelleğe alınmış olan sayfalarda dinamik içerik olarak oluşturabilir duruma getiriyoruz. Uygulamanın çalışması sonrasında aşağıdaki gibi bir ekran görüntüsüne sahip olacaktır.



Sonuç gayet başarılı... Her yenileme sonrasında zamanı gösteren değer sabit kalırken resim ve üstündeki yazı bizim belirttiğimiz gibi rastgele olarak değişmektedir.

Geldik bir yazımızın daha sonuna. Bu yazımızda önbelleğe alınmış olan sayfalarda yer alan verilerin belirli bir zaman aralığı boyunca yenilenemeyeceği ana fikrinden yola çıkarak dinamik olarak değişecek bir içeriğin bu sayfalar içerisinde nasıl kullanılacağını detaylı bir şekilde incelemeye çalıştık.

Umarım yararlı olabilmiştir.

Turhal Temizer
[email protected]
http://turhal.blogspot.com
Makale:
Asp.Net MVC Framework - OutputCache Kullanımı ve Dinamik İçerik Görüntüleme ASP.NET Turhal Temizer
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor