Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
25240
Yorum Sayısı
:
0
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA
21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
21.11.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
ASP.NET
/
Asp.Net MVC Framework - OutputCache Kullanımı ve Dinamik İçerik Görüntüleme
Asp.Net MVC Framework - OutputCache Kullanımı ve Dinamik İçerik Görüntüleme
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl