» » » » DLE'yi optimize etme

DLE'yi optimize etme

Evan
Evan Üye 4-08-2018, 14:51
DataLife Engine, çok nadir de olsa performans sorunları ile karşılaşmaktadır ve bu sorunlar mySQL kaynaklı oluyor. Sander-Development ise bu sorunların önüne geçmek için sistemin mySQL veritabanına bindirdiği yükü yaklaşık bir buçuk saatlik bir zaman diliminde analiz etmiş. Şimdi sistemde yapılmasını önerdiği optimizasyonlara geçelim.

Bu işlemleri gerçekleştirirken DataLife Engine 13.0 ile gelen eklenti desteğini kullandığınızı varsayıyor olacağım. Ancak siz yine de normal olarak PHP dosyasını açarak düzenlemeler yapabilirsiniz. Fakat eklenti yöneticisi ile işlem yaparsanız sürüm yükselttiğinizde tekrar kurulumla uğraşmayacaksınız.

Genel öneriler


İlk olarak "Yayın Tarihi Gelmemiş Makaleleri Sitede Yayınlanması" özelliğini devredışı bırakmanızı tavsiye ediyoruz. Bu işlemi gerçekleştirmek için aşağıdaki adımları takip edin:
  1. Yönetici Kontrol Panelini açın.
  2. Sistem Ayarlarına girin.
  3. Makale sekmesini görüntüleyin.
  4. Yayın Tarihi Gelmemiş Makaleleri Sitede Yayınlanması seçeneğini devredışı bırakın.

Eğer temanızda Topnews, takvim vb. özellikleri de kullanmıyorsanız mutlaka yine Sistem Ayarları içerisinden kapatın.

2. not detected



Görseldeki resimde GC tablosundaki değerler hariç her şey aslında açık. GC tablosunda yer alan değer, sorgu gerçekleştirilme sayısı.
Bu sorgular, mevcut olmayan kategorilere erişmeye çalışırken ortaya çıkmış. Bu çok büyük bir sorun değil elbette ancak düzeltmemek için bir neden yok.

  1. Yönetici Kontrol Panelini açın.
  2. Tüm Bölümlere tıklayın.
  3. Eklentileri Yönet sayasını görüntüleyin.
  4. Eklenti ekle butonuna tıklayın.
  5. Eklenti adına not detected yazın.
  6. Dosya Eylemleri sekmesine girin.
  7. Dosya Ekle butonuna tıklayın.
  8. Dosya adı formuna engine/modules/show.short.php yazın.
  9. Eylem ekle butonuna tıklayın.
  10. Bul ve üstüne ekle seçeneğini seçin.
  11. Bul değeri:
    if( $allow_active_news ) {
  12. Üstüne ekle değeri:
    if ($do == 'cat' && !(int)$category_id) {  $allow_active_news = false; }
  13. Kaydedin.

3. SELECT COUNT(*) as count FROM dle_post



Burada oluşan sorguların sayısına bir bakın. Bu sonuçlar önbelleklemenin etkin olduğu bir siteden alındı ancak yine de çok yüksek.

Öncelikle kategorilerdeki makalelerin sayısını hesaplama özelliğini devredışı bırakalım.
  1. Yönetici Kontrol Panelini açın.
  2. Sistem Ayarlarına girin.
  3. Optimizasyon sekmesini görüntüleyin.
  4. "Kategorideki makalelerin sayısını hesapla" seçeneğini devredışı bırakın.

Şimdi ise yine bir düzenleme yapmamız gerekiyor.
  1. Yönetici Kontrol Panelini açın.
  2. Tüm Bölümlere tıklayın.
  3. Eklentileri Yönet sayasını görüntüleyin.
  4. Eklenti ekle butonuna tıklayın.
  5. Eklenti adına SELECT COUNT yazın.
  6. Dosya Eylemleri sekmesine girin.
  7. Dosya ekle butonuna tıklayın.
  8. Dosya adı formuna engine/modules/show.short.php yazın.
  9. Eylem ekle butonuna tıklayın.
  10. Bul ve üstüne ekle seçeneğini seçin.
  11. Bul değeri:
    $count_all = $db->super_query( $sql_count );
  12. Üstüne ekle değeri:
      if ($do == 'cat' && isset($cat_info[(int)$category_id]['newscount'])) {    $count_all = array(     'count' => (int)$cat_info[$category_id]['newscount']    );   } else 
  13. Kaydedin.

Bu düzenleme yukarıda gerçekleştirilen sorguların tamamını ortadan kaldırmaktadır. Ancak sadece kategoriler için. Yine de bu büyük bir sorgu değerini ortadan kaldırıyor.

4. Üçüncü madde üzerine düşünmek


Sorunları ortadan kaldırdık ancak merak etmemiz gereken bir soru olduğunu düşünüyorum: Önbellekleme aktifken neden bu sorguların sayısı bu kadar yüksek? Buradaki değişken DataLife Engine'in sürüm numarasına bağlı olarak değişiyor. Örneğin 10.6 ve daha eski sürümlerde yalnızca gezinmenin ilk 5 sayfası önbelleğe alınıyor, geri kalanlar önbelleklemeye dahil değil. Daha sonraki sürümlerde bu sayfa 10'a çıkartıldı. Güncel 13.0 sürümünde ise bu rakamı elle belirlemek mümkün. Bu ayarı şuradan değiştirebilirsiniz:
  1. Yönetici Kontrol Panelini açın.
  2. Sistem Ayarlarına girin.
  3. Optimizasyon sekmesini görüntüleyin.
  4. Önbelleğe alınacak sayfa sayısı alanına istediğiniz değeri girin.

Bu doğru bir adım, ancak buradaki değeri akıllıca kullanmanız gerekmektedir. Örneğin 10-20 kategoriye sahip bir siteniz varsa 20-30 sayfayı önbelleğe alabilirsiniz. Ancak çok fazla kategoriye sahipseniz önbelleğe alınacak dosyaların değeri ile oynamanızı tavsiye etmiyoruz.

Neyse, konumuza geri dönelim: Neden bu kadar çok sorgu var? Cevap oldukça basit: önbellekleme. Yani önbellekleme temizlenmesi. Örneğin yeni bir yorum eklendiğinde tüm önbellekleme işlemleri sıfırlanmaktadır. Eğer isterseniz tüm istatistiklerin anında shortstory'de görülmesini engelleyip önbelleklemeyi arttırabilirsiniz. Bu bana kalırsa çok önemli değil, yapıp yapmamak size kalmış.
  1. Yönetici Kontrol Panelini açın.
  2. Tüm Bölümlere tıklayın.
  3. Eklentileri Yönet sayasını görüntüleyin.
  4. Eklenti ekle butonuna tıklayın.
  5. Eklenti adına Önbellekleme yazın.
  6. Dosya Eylemleri sekmesine girin.
  7. Dosya ekle butonuna tıklayın.
  8. Dosya adı formuna engine/modules/addcomments.php yazın.
  9. Eylem ekle butonuna tıklayın.
  10. Bul ve değiştir seçeneğini seçin.
  11. Bul değeri:
    clear_cache( array( 'news_', 'comm_'.$post_id, $cprefix ) );

    Sürüme bağlı olarak bulmanız gereken kod bu da olabilir:
    clear_cache( array( 'news_', 'rss', 'comm_'.$post_id, $cprefix ) );
  12. Değiştir değeri:
    clear_cache( array( 'comm_'.$post_id, $cprefix ) );
  13. Kaydedin.
Bu sayede bir yorum eklendiğinde artık sadece güncel haberlerin önbelleği ve yorumları kendiliğinden silinir.
  1. Yönetici Kontrol Panelini açın.
  2. Tüm Bölümlere tıklayın.
  3. Eklentileri Yönet sayasını görüntüleyin.
  4. Eklenti ekle butonuna tıklayın.
  5. Eklenti adına Önbellekleme yazın.
  6. Dosya Eylemleri sekmesine girin.
  7. Dosya ekle butonuna tıklayın.
  8. Dosya adı formuna engine/ajax/rating.php yazın.
  9. Eylem ekle butonuna tıklayın.
  10. Bul ve değiştir seçeneğini seçin.
  11. Bul değeri:
    clear_cache( array( 'news_', $cprefix ) );

    Sürüme bağlı olarak bulmanız gereken kod bu da olabilir:
    clear_cache( array( 'news_', 'rss', $cprefix ) );
  12. Değiştir değeri:
    clear_cache( array( $cprefix ) );
  13. Kaydedin.
Şimdi ise oylamadan sonra yalnızca haberin kendi önbelleği temizlenmiş olacak.

Orijinal makalede bir madde daha vardı ancak vaktim olmadığı için o kısmı çeviremiyorum. Umarım bu kadarı da sizin işinize yarar.
Shortstory Uzun zamandır DataLife Engine'in optimizasyonu için bir şeyler arayıp duruyordum. Bu makalede Sander'in hazırladığı optimizasyon rehberini temel alarak bir içerik hazırladım. Umarım ihtiyacınızı karşılar.
Bilgilendirme
Yorum Ekleyebilmeniz için Sitemize Kayıt Olmanız Gerekmektedir.
3 751
MaRZoCHi 4 Ağustos 2018 19:23
Orijinal makaleye bakmak isteyenler: https://sandev.pro/web/141-optimizaciya-dle.html

Güzel bir anlatım olmuş. Düzenlemeleri plugin olarak verse daha güzel olacakmış diyecektim ki yorum gelmiş benden önce :)

Teşekkürler @Evan

--------------------
+2
176
Evan 4 Ağustos 2018 17:23
Ana başlığa eklemeyi unutmuşum; eğer bağlantıdaki XML dosyasını indirip aşağıdaki adımları takip ederseniz yalnızca Yönetici Kontrol Panelinde yapmanızın tavsiye edildiği adımları uygulamanız yetecektir. Eklenti panelinden başka bir adım yapmanıza gerek kalmayacak.
1. Yönetici Kontrol Panelini açın.
2. Tüm Bölümlere tıklayın.
3. Eklentileri Yönet sayasını görüntüleyin.
4. Eklenti yükle butonuna tıklayın.
5. Dosyayı buraya tıklayarak indirin.
6. Açılan pencereden indirdiğiniz dosyayı seçin.
7. Eklentiyi yükle butonuna tıklayın.

İşlem tamamlandı. Ancak tekrar hatırlatalım, makale içerisinde tavsiye edilen adımları uygulamanız da gerekmektedir.
+2
İSTATİSTİKLER