Önbelleğe alma ve sıkıştırma işlemleri, büyük ölçekli web uygulamaları için çok önemlidir.
Önbelleğe alma ( Caching )
Bir web uygulamasının çıktısını belirli bir süre önbellekte tutma işlemi, o süre boyunca aynı URL ile gelen isteklerin tarayıcıda tutularak kullanıcıya iletilmesi esasına dayanır. Aşağıda bulunan Action Filter ile Asp.Net MVC projelerinizde önbelleğe alma işlemini gerçekleştirebilirsiniz.
public class CacheAttribute : ActionFilterAttribute
{
public int Duration
{
get;
set;
}
public CacheAttribute()
{
Duration = 10;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Duration <= 0) return;
HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
TimeSpan cacheDuration = TimeSpan.FromSeconds(Duration);
cache.SetCacheability(HttpCacheability.Public);
cache.SetExpires(DateTime.Now.Add(cacheDuration));
cache.SetMaxAge(cacheDuration);
cache.AppendCacheExtension("must-revalidate, proxy-revalidate");
}
}
Bu filtreyi aşağıdaki şekilde kolayca istediğiniz metotlara uygulayabilirsiniz.
[Cache(Duration = 60)]
public ActionResult Index(string query)
Ön belleğe alma işleminden önce;

Ön belleğe alma işleminden sonra;

Sıkıştırma ( Compression )
Modern tarayıcıların çoğu sıkıştırılmış veriyi işleme özelliğine sahiptir. Aşağıda bulunan Action Filter ile projelerinizde sıkıştırma işlemini gerçekleştirebilirsiniz.
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new
GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new
DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
Bu filtreyi aşağıdaki şekilde kolayca istediğiniz metotlara uygulayabilirsiniz.
[Compress]
public ActionResult Index(string query)
Sıkıştırma işleminden önce;

Sıkıştırma işleminden sonra;

Kaynak Kodu: indirmek için tıklayınız.
Kaynak: kazimanzurrashid.com