lostyazilim
tr.link

Wordpress sorgularını anlamak? Wordpress optimizasyon ipuçları hakkında.

5 Mesajlar 1.516 Okunma
lstbozum
tr.link

FatihToprak FatihToprak www.fatihtoprak.com Kimlik Onayı
  • Üyelik 13.06.2011
  • Yaş/Cinsiyet 39 / E
  • Meslek Web Developer
  • Konum İstanbul Avrupa
  • Ad Soyad F** T**
  • Mesajlar 577
  • Beğeniler 65 / 67
  • Ticaret 0, (%0)
WordPress sorgularınızı hafifletmek adına eskiden bu yana çok sayıda makale yazmıştım. Ancak her öğrendiğim yeni metod ile daha farklı performans çıktısı sağladığım gerçeğini de buraya yazmadan edemeyeceğim. Şu sıralar bilindik bir projenin wordpress temasını optimize ediyorum. Aşırı kaynak tüketiminden dolayı Ahmet Orhan zor anlar yaşıyormuş ve durumu optimizasyon çözümü ile aşmak sürecindeyiz.

Bu esnada, değerli usta Fatih Hayrioğlu‘nun blogunun yeni yapısını değiştirmesine istinaden daha doyurucu optimizasyon araçları amaçlı araştırmalarım da devam ediyor elbet. Bu gün an itibarı ile, keşfi tamamladığım ve somutlaştırdığım ipucunu makaleleştirme kararı aldım. Orta düzey wordpress programcıları için çok şey ifade edeceğini düşündüğüm yazıyı okumanızı / faydalı olmasını umuyorum.

Thomas Griffen ‘ın yakın geçmişte yazdığı bir yazı ve SE üzerinden edindiğim bilgiler ile bana çok faydalı ipuçları veren Daniel Sachs‘a sonsuz teşekkürler.

Sorgumuzu hafifletmek adına önceleri hatırlarsınız, bu yazımda transient api metodunu açıklamıştım size. Bu ipucuna ek olarak , sorgularımızın daha minimize halini, get_posts için çağrılan değerleri kapatarak deneyeceğiz.

Örnek olarak ;

$Sorgu = get_posts( array( 'posts_per_page' => 1 ) );
yapılı sorgumuzu print ettiğimiz zaman bu $sorgu değişkeninin sorgu yapılan değerleri şu şekilde sonuç veriyor bize ;

Array
(
[0] => WP_Post Object
(
[ID] => 1
[post_author] => 1
[post_date] => 2012-09-25 21:44:47
[post_date_gmt] => 2012-09-25 20:44:47
[post_content] => Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!
[post_title] => Hello world!
[post_excerpt] =>
[post_status] => publish
[comment_status] => open
[ping_status] => open
[post_password] =>
[post_name] => hello-world
[to_ping] =>
[pinged] =>
[post_modified] => 2012-10-16 17:22:34
[post_modified_gmt] => 2012-10-16 17:22:34
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://localhost :8888/trunk/?p=1
[menu_order] => 0
[post_type] => post
[post_mime_type] =>
[comment_count] => 1
[filter] =>
)
)

24 farklı objeyi nitelemiş oluyoruz anlayacağınız. Dolayısı ile posts_per_page => 5 dediğimiz zaman ise 24×5 kez bu işlemi tekrarlamış oluyoruz. Sonuç olarak işin temelinde, bize sorgumuz için gerekecek ve ihtiyacımız olan ne varsa yalnızca onu almak, onu sorgulatmak en temel nedenimiz olmalı ki gereksiz değerleri (kullanmayacağımız için) fazladan yük etmeyelim.

$Sorgu = get_posts( array( 'posts_per_page' => 1, 'cache_results' => false ) );
$Sorgu değişkenimizi bu parametreler ile tanımladığımız zaman

[PHP]cache_results' => false

değeri ile, wp_cache aracılığı ile keşlenen kısımlar ile ilgilenmediğimizi belirtiyoruz. Akabinde aynı mantık ile hareket eden ;

'update_post_meta_cache' ve 'update_post_term_cache'
değerlerini de elbette false, konuma getirip, sonucumuzun (işlemin) süresine bakalım birlikte.

Cache edilen (belleklenen) sorgu ve belleklenmeyen sorgunun yüklenme süresi
function Poz_Belleklenmeyen_Sorgu() {
$Zamanlama = microtime( true );
$Sorgu = get_posts( array( 'posts_per_page' => -1 ) );
return number_format( microtime( true ) - $Zamanlama, 10 );
}

function Poz_Belleklenen_Sorgu() {
$Zamanlama = microtime( true );
$Sorgu = get_posts( array( 'posts_per_page' => -1, 'cache_results' => false ) );
return number_format( microtime( true ) - $Zamanlama, 10 );
}

Poz_Belleklenmeyen_Sorgu : 0.014947224
Poz_Belleklenen_Sorgu (‘cache_results’ değeri false yapılınca): 0.004860735
Aradaki fark: 0.010086489

Sonuç olarak farkın bariz belirginliği ufak sorgulu $değişken’ler için pek ihtiyaç olmasa da yüklü ve trafiği bol çalışmalar için gayet olması gerekendir.

SQL_CALC_FOUND_ROWS kullanımını iptal etmek
WordPress sayfalama metodu için SQL_CALC_FOUND_ROWS sql yapısını kullanıyor. Eğer sayfalama kullanmak istemiyorsak sorgumuzda boş yere sorgu yapmayı da elbetteki istemeyiz. Kullanımı;

$Sorgu = new WP_Query( array( 'posts_per_page' => 1, 'no_found_rows' => true ) );
Bu yapımızın da zaman değerlerini hemen çıktı alalım bakalım farkımız ne olacak;

function Sayfalamaile_Sorgu() {
$Zaman = microtime( true );
$Sorgu = new WP_Query( array( 'posts_per_page' => -1 ) );
return number_format( microtime( true ) - $Zaman, 10 );
}

function Sayfalamaolmdan_Sorgu() {
$Zaman = microtime( true );
$Sorgu = new WP_Query( array( 'posts_per_page' => -1, 'no_found_rows' => true ) );
return number_format( microtime( true ) - $Zaman, 10 );
}

Sayfalama ile sorgumuz: 0.015301085
Sayfalama olmadan sorgumuz: 0.014417219
Avantajımız: 0.000883865

Sonuç olarak performans bu şekilde indirgenebilir. Array dizi değişkeninde üstte gösterdiğim 24 farklı değeri almak yerine yalnızca ilgilendiklerimizi alabiliriz. Mesela bir örnek alarak konuyu toplayalım isterim ;

$Sorgu = get_posts( array( 'posts_per_page' => 1, 'fields' => 'ids' ) );
Burada post id’mizi almış olduk. Tekli değer çağrışımları için fields array parametresini kullanabiliriz.

Bir örnek yapmak gerekir ise;

$Poz = array(
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC',
'no_found_rows' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
);

query_posts( $Poz ); while ( have_posts() ) : the_post(); ?>



  • Ve çıktı sonrası bu yapıyı fonksiyonlaştırıp transient api ile kullandığınızda farkı sizlerde farkedeceksiniz.

    WordPress ile nice güzel projelere…

    Kaynak : http://www.fatihtoprak.com/wordpress-sorgularinizi-hafifletin-bellekleyin-ve-en-ust-duzey-performans-saglayin-ipucu-104.html

    Not: Konu ile alakalı yorumlarınızı blog üzerinden de eksik etmeyin lütfen.
    Sinan masaLL eppursimuove

    kişi bu mesajı beğendi.

    wmaraci
    reklam

    Estail Estail Üyeliği Durdurulmuş Banlı Kullanıcı
    • Üyelik 19.10.2012
    • Yaş/Cinsiyet 29 / E
    • Meslek Öğrenci
    • Konum Ankara
    • Ad Soyad ** **
    • Mesajlar 89
    • Beğeniler 9 / 19
    • Ticaret 0, (%0)
    Anlatım baya yalına indirgemişsin güzel bir makale olmuş takipteyim.
    FatihToprak

    kişi bu mesajı beğendi.

    FatihToprak FatihToprak www.fatihtoprak.com Kimlik Onayı
    • Üyelik 13.06.2011
    • Yaş/Cinsiyet 39 / E
    • Meslek Web Developer
    • Konum İstanbul Avrupa
    • Ad Soyad F** T**
    • Mesajlar 577
    • Beğeniler 65 / 67
    • Ticaret 0, (%0)

    Estail adlı üyeden alıntı

    Anlatım baya yalına indirgemişsin güzel bir makale olmuş takipteyim.


    Amaç herkesin anlayabilir düzeyde farketmesini sağlamak. kullandığımız sisteme yabancı olmamak lazım. (: Teşekkürler.
     

     

    masaLL masaLL WM Aracı Kullanıcı
    • Üyelik 14.08.2011
    • Yaş/Cinsiyet 41 / E
    • Meslek mühendis
    • Konum
    • Ad Soyad ** **
    • Mesajlar 64
    • Beğeniler 20 / 10
    • Ticaret 0, (%0)
    faydalı bir makale olmuş. emeğinize sağlık.
    FatihToprak

    kişi bu mesajı beğendi.

    wmaraci
    wmaraci

    FatihToprak FatihToprak www.fatihtoprak.com Kimlik Onayı
    • Üyelik 13.06.2011
    • Yaş/Cinsiyet 39 / E
    • Meslek Web Developer
    • Konum İstanbul Avrupa
    • Ad Soyad F** T**
    • Mesajlar 577
    • Beğeniler 65 / 67
    • Ticaret 0, (%0)

    masaLL adlı üyeden alıntı

    faydalı bir makale olmuş. emeğinize sağlık.


    @Masal teşekkürler. Umarım herkes kendi sorgularını anlayarak bellekler ve Wordpress için geliştirmeler yaparak daha zevkli Wordpress dünyasını yaşar (: Takipte kalın. İyi forumlar.
     

     

    wmaraci
    wmaraci
    Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
    Site Ayarları
    • Tema Seçeneği
    • Site Sesleri
    • Bildirimler
    • Özel Mesaj Al