Siteleriniz İçin Cache Sistemi Yapımı Anlatımı

Merhaba arkadaşlar ilk zamanlar açtığınız sitelerinizde yüklü bir trafik oluşmadığı için sunucu üzerindeki durumunuzda büyük bir sorun oluşmayacaktır ama işler büyüdükçe sıralamanız değişip siteniz geliştikçe artık kiraladığınız hostingler vpsler vdsler yada sunucular size yetmez hale gelecektir bu durumda optimizasyonu düşünecek ve araştırmaya başlıyacaksınız demektir.

Elbetteki sunucular üzerindeki optimizasyon kadar siteleriniz üzerindeki optimizasyonlarında çok önemli olduğunu anlayacaksınız budurumda kodları kendisi yazmış olan sitelerini kendileri tasarlamış olan arkadaşlar sorun yaşamayacaklardır.Hazır sistem kullanan arkadaşlar bu konuda gerçekten büyük problemler yaşamaktadırlar özellikle açık kaynak ile geliştrilmiş siteler ve eklentilerin baskısı gelişen trafikle inanılmaz bir hale gelebilmektedir.

Bazı hazır sistemlerin üzerine eklenti olarak yazılmış önbellek eklentileri bulunmaktadır.Her site için bu mümkün olmayabiliyor. Bu makalemde sizelere php ile yazılmış sitelerinizde kullanabileceğiniz performansınızı % 80 lere kadar artıran bir ön bellek sistemini anlatacağım sizde bu sistemi kendi sitelerinizde uygulayarak sitelerinizin açılış hızını dolayısı ile sunucularınızın ve sitelerinizin performansını artırabilirsiniz.

Önbellek Sistemleri

1 – Sabit ve değişmeyen sayfaları cacheleme

2 – Dinamik sürekli değisen aynı kalmayan sayfaları cacheleme

3 – Temalarınız üzerinde sabit ön bellekleme

4 – Cache içerisine dahil olmayacak kısımları ayırarak cachelemek.

1. Konudaki cache ile 1-2 sayfanizin cachesini almak istediğinizde kullanabileceğiniz bir sistem olarak karşınıza çıkacak. Çok fazla değişen siteniz yoksa, belli sayfalarda çok fazla sorgu varsa veya fonksiyon, bunlarin sunucuya yük oranını en aza indirgemek icin kullanilabilir.

Bu 1. konudaki basit cache olayına ornek vermek gerekirse bu siteye bakabilirsiniz:

http://www.oyun.gs

Sadece oyun açılış sayfalarında kullandığımız cache kodlari ile hem acilisin hizini hemde kullandigim bir kac php ve sql sorgusunun siteye yuk getirmesi, yavas acilmasi gibi bizi zor duruma dusurecek sorunlardan kurtarmaktadir.

Basit Cachenin Mantığı Nedir:

Kullanacağımız cache sisteminin nasıl islediğini anlatarak başlamakta yarar var. Kısaca sayfanın üzerine ve altina yerlestirdigimiz bir kac php kodu sayesinde orta kisimda oluşan sorgular, fonksiyolar gibi olayları tek bir dosyada toplayarak, 2. kez cağrıldığında bu dosyadan yardım alması diyebiliriz.

Özetle mantığın basit işleyişi:

Ziyaretci siteye girer —-> site sayfayı açmadan önce cache varmı yokmu kontrol eder —-> cache yoksa oluşan sorgunun cache’sini alir, varsa daha önce kayıt edilmiş cache sayfasını yükler.

Yararları :

İkincikez cağrılan sayfa cachelendiği icin php ve sql sorgularını çalıştırmadan direk cacheye alınan sabit html kodlarını cağıracak ve sayfaya işleyerek bize gösterecektir.

Bu sayfa açılış hızını %80 sunucuyu yorma yada kilitleme gibi ihtimalleride %60 azaltır..

Tek sayfalık basit cache’e örnek:

Birinci maddede anlattığım usule dayanarak sadece ana sayfanızı cache ile oluşturacaksınız.

$cachedosyasi = “cache/index.html”;
if (file_exists($cachedosyasi)) {
include($cachedosyasi);
exit;
}
ob_start();

$ch = fopen($cachedosyasi, ‘w’);
fwrite($ch, ob_get_contents());
fclose($ch);
ob_end_flush();

yukaridaki kod genel olarak bir cache’e alma sisteminin ana mantığını oluşturmaktadır.

Sırasıyla:

cache dosyasını tanımlıyoruz
cache dosyasını kontrol ediyoruz
varsa cacheyi cağırıyoruz ve işlemi sonlandırıyoruz
cache yoksa kodlar arasındakileri html olarak cacheliyoruz
sonrasında işlem en başa donecektir..

Eger bu cachede zaman sınırı eklemek istiyorsaniz, yani belli aralıklarla dosya belirlediginiz süreden eski ise yenilenmesini sağlamak isterseniz küçük bir zaman kontrol kodu ile işlemi başarılı bir şekilde sağlamış olursunuz.

$cachedosyasi = “cache/index.html”;
if (file_exists($cachedosyasi) && (time() – 2700 < filemtime($cachedosyasi))) { include($cachedosyasi); exit; } ob_start();
$ch = fopen($cachedosyasi, ‘w’);
fwrite($ch, ob_get_contents());
fclose($ch);
ob_end_flush();

Yukarıdaki kısımda bulunan 2700 ibaresi saniye cinsinden hesaplamak içindir. Eğer cache alınan dosya 2700 saniyeden eski ise yenisini oluşturmaktadır.

cachelenecek alanıda

ob_start();

kodu ile açıp

ob_end_flush();

kodlarıyla bitiriyoruz, ve arada kalan sorgular, fonksiyonlar saf htmlye cevrilerek cache içerisine alınmış olur.

Değişen sayfalar için cache mantığı:

Sabit kalmayan ve devamlı olarak get, post methoduyla değişen sayfalarınız olabilir. Yada bu metodların dışında tek bir dosyadan birden fazla içeriğe hükmediyorsanız basit cache sistemi etkisiz kalacaktir. Çünkü aynı dosya üzerinden cachelenen dosya 1 tane olacağından ve aynı isimde kalacağından, başka konuda sayfa cağırdığında önceki cache alınan sayfayı göstereceğinden işinize yaramayacaktır. Ancak cachelenen dosya ismini adres satırındaki urlye yada sayfanıza gelen get,post metodundaki bir veriye göre yaptırabilirsiniz. Boylece her sayfa değiştiğinde o sayfaya ait cache alınır. Örnek vermek gerekirse video siteniz var ve bu video sitesinde tek dosyadan işlem yaptırarak milyonlarca video gosteriyorsunuz ziyaretcilerinize.
soyle ornek bir kac link gostereyim ben size:

http://www.tranceclip.com

Bu sistemi sunucuyu linç edecek duzeyde fonksiyon ve sql sorgusu barındıran sistemlerde kullanmanızı öneririm. Dilerseniz böyle bir sistemde kullanılacak cache kodlarını paylaşarak açıklamaya geçelim.

$cachedosyasi = “cache/”.md5($_SERVER[‘REQUEST_URI’]).”.html”;
if (file_exists($cachedosyasi) && (time() – 2700 < filemtime($cachedosyasi))) { include($cachedosyasi); exit; } ob_start();

$ch = fopen($cachedosyasi, ‘w’);
fwrite($ch, ob_get_contents());
fclose($ch);
ob_end_flush();

Yukarıdaki örnekte benim kullandığım mantıkla aynı urlden aldığım bilgiyi md5 ile şifreleyip cache ediyorum. Boylece saçma karakterler varsa cache ederken sorun çıkartmasını engelliyoruz.

Eger adres satırındaki urlye gore değilde gelen get yada post daki bilgilere göre cache yapmak isterseniz yukarıdaki koddaki: $_SERVER[‘REQUEST_URI’] kısmını bunlardan biriyle değişmeniz yeterli:
$_GET[‘GETMETODU’] yada $_POST[‘POSTMETODU’]

Böylece cache yaparken aynı adres urlsiyle yada aynı get veya post bilgisiyle karşılaştığında cache ettiği onceki dosyayı cağıracaktır. Böylece herzaman aynı dosyayı ziyaretçiye göstermeyecektir..

Belirttiğimiz zaman sınırınıda dilediğiniz sekilde düşürebilir yada uzatabilirsiniz. Ben saniye cinsinden yazdım. Varin siz hesaplayin gerisini 🙂

Bu arada kodları kullanırken dosya yolunu gosterirken kullandığım cache/… dizininin yolunu oluşturmazsanız hatada verebilir. olusturduktan sonra cache klasorümüze chmod 777 izni verirseniz sorunsuz şekilde cache oluşturup, silip yeniden kaydedebilir..

3- Bu bölümde vereceğim örnekle örneğin .tpl tema dosyalarının içine yerleştireceğiniz alt bölümdeki kodlarla temalarınızın en çok sorgu oluşturan bölümlerini kayıt edebilirsiniz.



Bu örneğimde sizlere anlattığım cacheleme sistemi kayıt edeceği sayfaların isimlerini md5 ile şifreleyerek kayıt etmektedir url’den olduğu gibi gelen sayfa ismini kayıt etmek isterseniz üstteki kodda alttaki bölümü değiştirerek gelen sayfayının ismini olduğu gibi kayıt edebilirsiniz.

$filename = “”.$_SERVER[‘REQUEST_URI’].”.html”;

Belleğe almak istediğiniz sayfaları kendi uzantıları ile kayıt etmek isterseniz alt bölümde yazdığım kodu yukarıdaki kodla değişitirirseniz olduğu gibi kendi sayfalarınızda oluşan uzantı olarak kayıt edilecektir.

$filename = “”.$_SERVER[‘REQUEST_URI’].””;

Kodlarınızın bir bölümünü cache içerisine almak bazı bölümlerini yok saymak istiyorsanız örneğin istatistik ve sürekli dinamik olarak değişen bölümlerini yok saymak istiyorsanız.

ob_start(); ‘a kadar olan kısmı cachelenmesini istediğiniz yerden hemen önce yazıcaksınız.

cachelenmesini istediğiniz yerden hemen sonra da $fp = fopen($cachefile, ‘w+’); satırından itibaren olan kısmı yazıcaksınız.

4 – Bu örnek sizi açmadıysa alt bölümdeki örneğimizde görğünüz gibi aynı cache dizini içerisine sayfa isimleri karışmadan 2.3.belkide 100.kez sitenizin farklı bölümlerini cacheleyebilirsiniz.


cache olmayan içerik…………….
…………………………………..

//1. cache alanı başlıyor
$filename1 = “%%BIRINCI-CACHE-“.md5($_SERVER[‘REQUEST_URI’]).”-%%.html”;
$cachefile = “cache/”.$filename1;
$cachetime = 3 * 60 * 60; // Cache Süresi
if (file_exists($cachefile))
{
if(time() – $cachetime < filemtime($cachefile)) { readfile($cachefile); exit; } else { unlink($cachefile); } } ob_start(); ?>
Cache girecek birinci bölüm…

cache dışındaki içerik……………
…………………………………………..

2. CACHELENEN ALAN
(birinci alandan farklı bir html dosyasında tutulur)
…………………………………
…………………………………

cachesiz olarak devam eden içerik……….

Yukarıdaki örnekte sizi açmadıysa veya fazla yer kaplayacağını düşünüyorsanız istatistik sayfalarınızı yada sürekli değişecek olan kısımlarınızı ayrı bir php sayfasına alarak include ile sayfa içerisine dahil ederek böylece kodlarınızın değişecek olan kodlarınızın cache sistemine dahil olmamasını sağlayabilirsiniz.

Örneğimiz

İstatistik yada ayrı tutacağımız kodlarımızı

istas.php dosyası içerisine alıyoruz ve sayfamız içerisine çağırıyoruz.Kalan kodlarımızı olduğu gibi cache sistemine dahil ediyoruz böylece sayfa çağırıldığı zaman istatistik yada dinamik değişecek olan içeriğimiz cache’den ayrı olarak kayıt ediliyor.

Kullanımı ;

include “istas.php”;


Başka yöntemler isterseniz sizlere önereceğim en güzel örnekler olarak serialize ve unserialize konularını araştırmanızı öneriyorum.

www.hostingtc.com’a katkılarından dolayı teşekkür ederiz.

-bilgisayar.com’dan sayglar sevgiler dilerim sizlere bir nebzede olsa yardımcı olabilmişimdir.

3.584 Responses to “Siteleriniz İçin Cache Sistemi Yapımı Anlatımı”

Sayfalar: « 103411 10 9 8 7 6 5 4 3 2 [1] Show All

  1. 5
    Harlan Sabatelli Says:

    This is getting a bit more subjective, but I much prefer the Zune Marketplace. The interface is colorful, has more flair, and some cool features like ‘Mixview’ that let you quickly see related albums, songs, or other users related to what you’re listening to. Clicking on one of those will center on that item, and another set of “neighbors” will come into view, allowing you to navigate around exploring by similar artists, songs, or users. Speaking of users, the Zune “Social” is also great fun, letting you find others with shared tastes and becoming friends with them. You then can listen to a playlist created based on an amalgamation of what all your friends are listening to, which is also enjoyable. Those concerned with privacy will be relieved to know you can prevent the public from seeing your personal listening habits if you so choose.

  2. 4
    Pearlene Griego Says:

    The new Zune browser is surprisingly good, but not as good as the iPod’s. It works well, but isn’t as fast as Safari, and has a clunkier interface. If you occasionally plan on using the web browser that’s not an issue, but if you’re planning to browse the web alot from your PMP then the iPod’s larger screen and better browser may be important.

  3. 3
    celine Says:

    I’ve recently started a web site, and the information you provide on this website has helped me a lot. Thanx for all of your time & work.

  4. 2
    Komplety Wypoczynkowe Says:

    Hello.This article was extremely fascinating, especially because I was looking for thoughts on this topic last Sunday.

  5. 1
    Angy Says:

    Hello. I noticed your site title, “Siteleriniz İçin Cache Sistemi Yapımı Anlatımı | BURSA BÄ°LGÄ°SAYAR” doesn’t really reflect the content of your site. When writing your blog title, do you believe it’s most beneficial to write it for Web optimization or for your audience? This is something I’ve been battling with simply because I want good rankings but at the same time I want the best quality for my website visitors.

Sayfalar: « 103411 10 9 8 7 6 5 4 3 2 [1] Show All

Leave a Reply

 Characters available