İçeriğe geç

Etiket: cache

Microsoft AJAX CDN

Microsoft gectigimiz gunlerde Microsoft AJAX CDN(Content Delivery Network) hizmetini duyurdu. Bu hizmetin bize sagladigi avantajlar ise; sayfalarimizda kullandigimiz AJAX kutuphanelerimizi(jQuery ve ASP.Net Ajax) ucretsiz olarak tum dunyada bir cok farkli ulkeye yerlestirilmis serverlar uzerinde cacheleyebilmemiz. Bu hizmetten yararlanabilmek icin herhangi bir kayit islemi veya ucret talebi bulunmamaktadir. Bu hizmeti hem bireysel hemde kurumsal projelerinizde rahatlikla kullanabilirsiniz.

CDN nedir ?

CDN (Content Delivery Networks) dunya uzerinde belli basli internet cikis noktalari uzerine kurulmus olan sunuculardan olusmaktadir. Bu sunucular bizim resim, video, CSS ve Javascript gibi dosylarimizi cacheleyerek gelen isteklere cevap vermektedir. Diyelimki sitemize Amerika kitasindan bir istek gelmekte, bu durumda CDN bu istege Amerika kitasindaki sunucularindan cevap vermektedir. Sitemize Turkiye uzerinden baska bir istekte bulunuldugunda bu sefer CDN Avrupa kitasindaki sunuculari uzerinden ziyaretcimize cevap verecektir. Bu sekilde sitemizi ziyaret eden kullancilar sayfamizdaki bir resmi goruntuleyebilmek icin bizim sunucumuza ulasmaya calismak yerine en yakindaki CDN sunucusundan bu resmi indirebilecek ve  daha kisa surede sayfayi goruntuleyebilecektir.

Microsoft AJAX CDN Nedir ?

Microsoft AJAX CDN sayfalariniza jQuery ve ASP.NET AJAX script kutuphanelerini kolay bir sekilde eklmenizi ve bunlari dunya uzerindeki binlerce sunucu uzerinden otomatik olarak sunmanizi saglar.

Mesela Microsoft AJAX CDNi uzerindeki jQuery kutuphanesini sayfanizda kullanmak istiyorsaniz yapmaniz gereken script taginizin source ozelligini asagidaki sekilde belirtmenizdir.

 <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js" 
type="text/javascript"></script>

Sayfamizi goruntulemek isteyen ziyaretcimize bu script dosyasi otomatik olarak en yakindaki CDN sunucusundan gonderilecektir. Buda;

  • Sayfamizim daha hizli yuklenmesini saglayacaktir
  • Bu dosyanin transferi icin bandwith parasi odemeyecegimiz anlamina gelir. Bizim yerimize Microsoft bu maliyeti karsilamaktadir.
  • Eger kullanici daha once yine Microsoft AJAX CDNi kullanan baska bir siteyi gezmis ise bu script dosyasi browserin cacheinde saklanacagindan. Browser tarafindan tekrardan indirilmesine gerek kalmayacaktir. Bu da sayfamizin daha hizli yuklenmesini saglayacaktir.

Microsoft AJAX CDNi ile ilgili detayli bilgiyi ve CDN sunuculari uzerine yuklenen tum kutuphaneleri ve adreslerini buradan gorebilirsiniz.

Cache Kullaniminda State Bag Access Pattern

Yazdigimiz web uygulamalarinda hepimiz Cache yapisini en az bir kere kullanmisizdir. Cache kolleksiyonuna daha onceden yazdigimiz nesneleri okumak icin kullanilan bir tasarim deseni olan State Bag Access Patterni farkinda olmadan hepimiz kullanmistir.

   1:  public List List()
   2:      {
   3:          List myList; 
   4:          if (Cache["customers"] == null) 
   5:          { 
   6:              myList = DAL.ListCustomers(); 
   7:              Cache.Insert("customers", mList, null, DateTime.Now.AddHours(1), TimeSpan.Zero); 
   8:          } 
   9:          return (List)Cache["customers"];
  10:      }

 

Fakat bu tasarim deseninde dikkat etmemiz gereken ince bir puf nokta var. Cache kolleksiyonunda tuttugumuz nesneye bir istek geldiginde, onu sadece bir defa okumaliyiz. Aksi takdirde cache kolleksiyonunda bulunan bir nesne yukaridaki kodda da gozuktugu gibi; 4. satirda dolu iken 9. satira gectigi an null hale gelmis olabilir. Buda bizim ?Object reference not set to an instance of an object? hatasi ile karsi karsiya gelmemize sebep olur. Bu durumdan korunmak icin yazmamiz gereken kod ise asagida gosterilmistir.

   1:  public List List() 
   2:      { 
   3:          string cacheKey = "customers"; 
   4:          List myList = Cache[cacheKey] as List; 
   5:          if (myList == null) 
   6:          { 
   7:              myList = DAL.ListCustomers(); 
   8:              Cache.Insert(cacheKey, mList, null, SiteConfig.CacheDuration, TimeSpan.Zero); 
   9:          } 
  10:          return myList; 
  11:      }