Daha once burada paylastigim uygulamanin daha basit, daha hizli ve stabil versiyonunu paylasacagim arkadaslar. Aslinda bunu daha once yazmayi dusunuyordum ancak yogun is temposu, yorgunluk, yogunluk v.s derken epey bir gecikmeme neden oldu.
Bu uygulamanin faydalarindan bahsedeyim biraz:
File cache uygulamalarindan daha iyidir.
Mysql ile cache tuttugumuz icin daha verimli ve daha hizlidir.
sisteminizdeki yuksek sorgulu alanlari hedef aldigimiz icin sorgu sayisinda buyuk bir dusus gosterir.
500 sorguyu 2 sorguya indirgeyebilir, sitenin hizini salise bazina kadar cekebilir.
kullanmazi, ozellestirilebilmesi kolaydir.
Daha onceki yazimda wordpress in options tablosunu kullanarak cache ye alacagimiz alandaki bilgileri yedekliyorduk. Ancak bu sefer uygulama alanindaki fonksiyonumuzu degistiriyoruz ve wordpress in bu ise uygun diger bir fonksiyonunu kullaniyoruz: get_transient
Bu seferki kod kalibimiz cok kucuk ve uygulanabilirligide cok kolay. Bunun icin asagidaki kodlara bakabilirsiniz:
$cache_ismi = "sidebarcache"; $cache_zamani = 60 * 10; // 60*10=600 buda 10 dakikaya esittir heralde :) // Cache varmi yokmu kontrolunu yaptiriyoruz. eger yoksa sorgu yaptirip, ciktiyi DBye kaydeiyoruz. if(false === get_transient($cache_ismi)){ ob_start(); /******* Cache Alinacak sorgular, kodlar v.s... *******/ // Burda ciktiyi DB ye kaydediyoruz.. set_transient($cache_ismi, ob_get_contents(), $cache_zamani); ob_end_flush(); // Eger cache varsa DBden bilgileri cekip ekrana yazdiriyoruz. }else{ // Echo ile DBdeki cache bilgilerini ekrana yazdiriyoruz. echo get_transient($cache_ismi); }
Kod kalibimiz yukardadir, goreceginiz gibi bir onceki makalemdekinden cok kolay, cok basit ve uygulanabilirligi cok kolaydir. Ozellikle kisa ve kucuk olmasi isimizi daha cok kolaylastiriyor.
Bu kod kalibini birden fazla alanda kullanabilirsiniz. Bunun icin cache_ismi kismini her alan icin degistirmeni yeterli olacaktir. yinede yapmaniz gerekenleri kisaca aciklayayim, daha onceki makalemde anlamayan arkadaslar vardi.
Oncelikle kod kalibinda goreceginiz en bastaki bu alani cache alacagimiz alana gore duzenleyin:
$cache_ismi2 = "cache2"; $cache_zamani2 = 60 * 10; // 60*10=600 buda 10 dakikaya esittir heralde :)
daha sonra asagidaki isimlerini duzenledigimiz alanlari guncelleyelim:
// Cache varmi yokmu kontrolunu yaptiriyoruz. eger yoksa sorgu yaptirip, ciktiyi DBye kaydeiyoruz. if(false === get_transient($cache_ismi2)){ ob_start(); /******* Cache Alinacak sorgular, kodlar v.s... *******/ // Burda ciktiyi DB ye kaydediyoruz.. set_transient($cache_ismi2, ob_get_contents(), $cache_zamani2); ob_end_flush(); // Eger cache varsa DBden bilgileri cekip ekrana yazdiriyoruz. }else{ // Echo ile DBdeki cache bilgilerini ekrana yazdiriyoruz. echo get_transient($cache_ismi2); }
Son olarak kod icindeki bu alana cache alinmasini istediginiz kodlari ekleyin:
/******* Cache Alinacak sorgular, kodlar v.s... *******/
Bunlardan sonra islemi basari ile gerceklestirmis olacaksiniz. Daha net anlayabilmeniz icin basit bir sidebar.php dosyasindaki kodlari cache almayi gosterecegim. Boylece sidebarda istediginiz kadar bilesen kullanabilirsiniz, cunku sorgu sayisi ciddi anlamda optimize edilecektir.
Ornek sidebar.php icin wordpress in default temasi olan Twenty_Ten temasinin sidebar.php dosyasini ela alacagim. Ornek sidebar.php dosyasi asagidaki gibidir:
< ?php /** * The Sidebar containing the primary and secondary widget areas. * * @package WordPress * @subpackage Twenty_Ten * @since Twenty Ten 1.0 */ ? > < ?php /* When we call the dynamic_sidebar() function, it'll spit out * the widgets for that widget area. If it instead returns false, * then the sidebar simply doesn't exist, so we'll hard-code in * some default sidebar stuff just in case. */ if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ? > < ?php get_search_form(); ? > < ?php _e( 'Archives', 'twentyten' ); ? > < ?php wp_get_archives( 'type=monthly' ); ? > < ?php _e( 'Meta', 'twentyten' ); ? > < ?php wp_register(); ? > < ?php wp_loginout(); ? > < ?php wp_meta(); ? > < ?php endif; // end primary widget area ? >
< ?php // A second sidebar for widgets, just because. if ( is_active_sidebar( 'secondary-widget-area' ) ) : ? >
< ?php endif; ? >
Simdi bu kodlara benim yukarida ekledigim kalip kodunu uyguluyorum ve asagidakileri elde ediyorum:
< ?php /** * The Sidebar containing the primary and secondary widget areas. * * @package WordPress * @subpackage Twenty_Ten * @since Twenty Ten 1.0 */ /* EKLEDIGIM BIRINCI KISIM BASLANGIC */ $cacheSIDEBAR = "cacheSIDEBAR"; $cache_zamani = 60 * 10; // 60*10=600 buda 10 dakikaya esittir heralde :) // Cache varmi yokmu kontrolunu yaptiriyoruz. eger yoksa sorgu yaptirip, ciktiyi DBye kaydeiyoruz. if(false === get_transient($cacheSIDEBAR)){ ob_start(); /* EKLEDIGIM BIRINCI KISIM BITIS */ ? >
< ?php // A second sidebar for widgets, just because. if ( is_active_sidebar( 'secondary-widget-area' ) ) : ? >
<?php endif; /* EKLEDIGIM IKINCI KISIM BASLANGIC */ // Burda ciktiyi DB ye kaydediyoruz.. set_transient($cacheSIDEBAR, ob_get_contents(), $cache_zamani); ob_end_flush(); // Eger cache varsa DBden bilgileri cekip ekrana yazdiriyoruz. }else{ // Echo ile DBdeki cache bilgilerini ekrana yazdiriyoruz. echo get_transient($cacheSIDEBAR); } /* EKLEDIGIM IKINCI KISIM BITIS */ ?>
Ekleme yaptigim yerleri gorebilirsiniz. Suanda bu sidebar dosyasinin yapacagi sorgu sayisi 1 yada 3 u gecmeyecektir. Ne kadar sorgu olursan olsun, isterse 500-1000 sorgu sonunda cacheye aldigindan sonraki belirledigimiz sure icinde her giren kisi sadece sisteme 2-3 sorgu bindirecektir. Buda wordpressin hostu yordugundan sikayetci arkadaslar icin bulunmaz bir nimet olacaktir :)
Yeni yazi eklendiginde yada duzenlendiginde CACHE temizleme (otomatik)
Sitenize yeni yazi eklediginizde yada bir yaziyi guncellediginizde cachelerin bosaltilmasini ve yeniden guncel hali ile cache alinmasini kolaylastirmak icin functions.php dosyasina asagidaki kodlari ekleyin:
function kuaza_cachesilhepsini(){ delete_transient( 'CACHE1' ); delete_transient( 'CACHE2' ); delete_transient( 'sidebarCACHE' ); } add_action('publish_post', 'kuaza_cachesilhepsini'); add_action('update_post', 'kuaza_cachesilhepsini'); add_action('delete_post', 'kuaza_cachesilhepsini');
Bu kodlar ne is yapar?: sitenize yeni yazi eklediginizde, duzenlediginizde yada sildiginizda ALINAN CACHE iceriklerini temizler. Boylece yeni yazi ekledikten sonra sitenize girenler yeni yazilarinizi cache suresinin bitmesini beklemeden gormus olurlar.
Kullanimi ise basitdir!: delete_transient( ‘CACHE1’ ); seklinde eklediginiz cache isimlerini sirasi ile alt alta ilk fonksiyona ekleyin. Bu kadar. eklediginiz cache isimleri ile eslenen cache icerikler: yeni yazi yazildiginda, silindiginde yada guncellendiginde silinecektir.
Bu eklemenin gerekli olabilecegini dusundum, cunku cache suresini 24 saat belirten arkadaslarin bu caheleri bosaltmazi icin DB ye girmesi gerekecektir. Bu yeni eklemem ile bu dertden kurtarmis oluyorum sizi. Bu yuzden degerimi bilin :)
Konuyu kavrayabilmeniz icin detaylara onem verdim, yoksa cok kucuk bir kod kalibidir, onceki makale gibi anlamayanlarin cikacagini zannetmiyorum ama yinede anlamayan arkadaslar olursa yorum yapmalari yeterlidir, her konuda yardimci olmaya calisacagim, hor gormeyecegim :D
“WordPress SQL cache uygulamasi – YENI” için 37 yanıt
Konuda belirtmeyi unuttum arkadaslar: Makaleci.com da dahil olmak uzere bir cok sattigim temada ve ilerde yapacagim temalarda bu dokumandaki uygulamalari kullaniyorum. Hatda suanda sitenin en altindaki bu ibareyi gorebilirsiniz: 52/0,415 (anlami 52 sorgu, 0,415 salisede gerceklesti – Ana sayfa daha dusuktur, cunku okuma sayfalarinda cache kullanmiyorum)
Allah razı olsun kardeşim bu süper birşey çok sagol
rica ederim, kolay gelsin.
Merhaba,
Ben kodları aynen uyguluyorum ancak kodlar temada çıkıyor niye? :(
kodlari php taglari icinde eklemeyi unutma :) < ?php ? > bosluklari kapat :)
Çok teşekkürler, sadece footer.php yi uyguladım, 250 sorgudan 100 sorguya düştü :) Bu footer ne çok sorgu üretiyormuş :)
Ayrıca, benim analitcs kodlarım da footer içerisinde, sayaç sayımlarını etkiler mi acaba?
An itibari ile 250 sorgu 6 saniyede yüklenirken, artık 19 sorgu 0,634 Saniyede yükleniyor :)) Eline sağlık gerçekten beni büyük dertten kurtardın
Sayac kodlarini etkilemez, cunku sayac kodlarinda html, kaydederkende html kaydediyor zaten :) Ama yinede test et, etkii olursaki sanmiyorum o zaman o kodlari cache disinda birakirsin :) Bu arada footer in o kadar sorgu harcamasi cok ilginc, ama cok fazla alan varsa ki bazi sitelerde footer da cok sey bulunur, normaldir. Sitenin hizlanmasina sevindim. Konuya ek olarak yararli olabilecek bir kac sey ekledim sonlara dogru onlarida uygulamanizi siddetle tavsiye ediyorum, kolaylik olmasi acisindan cok gerekli :)
Hocam ben birşeyi merak ediyorum.Cache şart mıdır ? Ben temayı cache li olarak satışa sunsam iyi mi olur kötü mü ?
Anlatım şahane..
wp cachesiz sorun olur, sistemi, hostu yorar, alacak kiside bunu bileceginden celiskide kalmaz, cazip gelir :)
// Rastgele Galeriler //
have_posts()) : $alt1->the_post(); ?>
<a href="” title=””>
ID, “alt1”, true) ): ?>
<img src="ID, “alt1″, true); ?>” alt=”” width=”300″ height=”95″ class=”size-full wp-image-3402″ />
hocam kodum böyle ama, nasıl eklersem ekliyim. hiç bi etkisi olmuyo. nasıl düzenlemem gerekiyo?
hocam, yorumda hepsi gitmiyor. burdan bakabilirsiniz kodlara => http://pastebin.com/LSCt6Cc6
hocam sağ sidebarda bir yeri cacheledim ama, ikinci defa başka biyeri cacheleyemiyorum. Sorgu ilk başta 12 düşürdüm. Ama şimdi nereye cache uygulasam, 30 hep.
mesela burayıda cachelemek istiyorum = http://pastebin.com/ajQ0ArUB
ama olmuyor?
Cacheismi kismini degistirrin her defasinda. Ayni isimde cache birden fazla yerde kullanamazsiniz.
uyguluyorum hatta sidebar.php yi tiwenty temasna anen alıp koyuyorum fakat sidebar kısmı bembeyaz oluyor.
Kodda kopyala yapısır yapınca bozukluk olmuş. şimdi de gorünüyor ama sorgu sayısı hiç değişmiyor.
Çalışmalarınız çok güzel olmuş gerçekten emeğinize sağlık fakat bu genel olarak bir eknetiye dökülse olmazmı yani w3 total cache benzer bir eklenti yapsanızda sadece kişiler plugins atıp çalıştırsa ?
hocam örnek veriyorum, kodum şu adreste http://pastebin.com/mrBr0auX
cacheliyorum ama, 50 olan sorgu sayısı 65 oluyo. Daha fazla arttırıyo. Localhostta çalışıyorum. Bunun etkisi var mıdır? yada neyi yanlış yapıyorum.
Cache süresini çok kısa tutmuşşun 6 saniye çok az :) 5*1 yerine 5*60 yapmanız daha mantıklı…
Merhaba
İşlemi harfien yerine getirdim fakat ekleme yaptığım kısımda bir sorun oluştu.
İçerik hiç değişmiyor.
URL (slug) değişiyor. Title değişiyor fakat sitede başlık ve açıklama değişmiyor. Sorun ne olabilr?
Nereye uyguladınız ? single.php yemi ? cachenin mantığı zaten değişmemesi, belirlediğimiz süre sonunda kendisi yeni bilgilerle güncellenecek.
Evet single.php ye uyguladım. atıyorum 60 dakika süre verdim. 60 dakika boyunca tüm içerik aynı görünecek ondan sonra normal haline mi gelecek?
Hocam kodlar için teşekkürler bu kodların bulunduğu ir sitede wp-super cache yada diğer cache eklentilerinden biri kullanılırsa herhangi bir çakışmada yada sorun meydana gelir mi acaba birbirlerini etkilerler mi teşekkürler
herhangi bir cakisma soz konusu olmaz..
Merhaba bu cache sistemini stabil sayfalar için kullanıyorum ancak kategori kısmında kullanmak istediğimde 2. sayfaya geçişte yine aynı konuları gösteriyor (cache yokken sorun yok) bu sorunu nasıl aşabiliriz
Kategori id sini yada slug ismini bir degiskene atayip cache ismine dahil edin, boylece her sayfa icin yeni isim ureteceginden olusturulan cachelerde o isimde olacaktir.
Ufak bir örnek gösterebilir misiniz php bilgim okadar yok malesef,
bu şekilde db şişmez mi? sonuçta her sayfa için farklı kayıt edecek. bunu söylüyorum ama benim bu kodlardan anlayabildiğim bu çıktıyı db ye kayıt ettiği. doğrumu anlıyorum?
birde bu dediğiniz değişkene atama ile ilgili bir örnek verirseniz çok sevinirim.
binlerce kayit olmadiktan sonra sorun olmayacaktir, ayrica file cache den daha iyi performans saglayacaktir :)
Merhaba hocam, anlatımınız ve konuyu derlemeniz çok başarılı öncelikle bunun için size çok teşekkür ederim, yorum atmamdaki asıl sebep ise sidebar örneğindeki gibi kodları wp dosyalarımının için uyguluyorum fakat kodlar ekrana basılıyor php blockları içinde olmasına rağmen yinede yanlış yapıyor olabilirim nerede yanlış yapıyor olabilirim ?
dikkat edin ornek kodlarda hata olabilir eklenti kaynakli, ilk kisimdaki verdigim kodlari kullanin..
Üstat her cache alışında db de yeni bir kayıt mı oluşturacak?
Yoksa bir önceki cache alanına mı kayıt edecek?
Yeni bir alansa db nin şişmesini önlemek için ne yapabiliriz?
Oldukça faydalı bir konu olmuş, anlatım da gerçekten mükemmel :) Fakat bir sorunum var. Single.php’ye cache uyguladım. Post’u düzenleyip kayıt ettiğimde (update işlemi) cache silme işlemi gerçekleşmiyor. Sorun ne olabilir?
Fonksiyona eklemeniz gereken kodlari ekledinizmi acaba ? Cunku ordaki kodlar silme ve guncelleme gibi islemleri gerceklestiriyor.
Selam,
Ben tam yapamadım, isimlendirmelere falan nasıl kafamıza göre isim verecez cachelere, nereye nasıl ekleyecez. Direkt kodları ekledim site kendin geçti. :(
Isimleri bolum bolum ayarlayabilirsiniz. Cache alacaginiz alana gore degistirebilirsiniz. En ustdeki kalibi kullanabilirsiniz. Tek yapacaginiz, yazdigim kisma cache alinmasini istediginiz php sorgularini yada kodlarini eklemeniz.