Modüller, en iyi kodlama uygulamaları ve doğru sunucu yapılandırmasıyla Drupal 9 Performansını İyileştirme

Yayınlanan: 2020-08-11

Yığınlarda belleğe sahip en güçlü sunucuya sahip olabilirsiniz, ancak bu, yüksek performanslı bir web sitesi sağlamak için yeterli mi? Drupal ile web sitesini işletmenizin büyümesiyle uyumlu şekilde ölçeklendirmek kolaydır. Aslında, Drupal bu konuda harikadır. Ancak web sayfalarında, işlevlerde ve içerikte ani bir artış, performansını etkileyebilir. Drupal 9 şimdi burada ve bir profesyonel gibi bu zorluğun üstesinden gelmek için hazır! Daha yalın, daha temiz ve daha güçlü kılan eski koddan Drupal 8'in iyiliği ile birlikte gelir. Kesinlikle işe yarayan Drupal 9 performans iyileştirme teknikleri hakkında daha fazlasını keşfedin.

Web sitesinin performansı, iş başarısının anahtarıdır. Yavaş yüklenen web siteleri işletmeler için zararlı olabilir. Daha iyi performansa sahip bir web sitesi, daha iyi SEO'ya yardımcı olur, ziyaretçinin dönüşüm oranını artırır ve toplu olarak işin büyümesine yardımcı olan ziyaretçilere daha iyi kullanıcı deneyimi sağlar. Yavaş yüklenen web siteleri tam tersini yapar ve iş başarısızlığının nedeni haline gelir.

drupal-9-performans optimizasyonu


Web sitesi performansını etkileyen birçok şey vardır. Onlardan bazıları:

• Servis sağlayıcınız (Barındırma, DNS vb.)
• Sunucuya yapılan istek sayısı
• Teknik sorunlar veya kötü programlama uygulamaları
• Önbelleğe alma tekniği
• Yanlış sunucu yapılandırması
• Ağır görüntü ve video dosyaları

Performansı artırmak için Drupal 9 Çekirdek ve Özel Modüller

Drupal 9'da web sitenizin performansını iyileştirmeye yardımcı olabilecek birçok katkıda bulunan ve çekirdek modül vardır. Belirli kodlama uygulamalarını izleyerek ve uygun sunucu yapılandırmasıyla site performansını önemli ölçüde artırabilirsiniz.

Çekirdek Modüller

• Büyük Boru

Drupal Big Pipe modülü, ekstra yapılandırma olmadan işleri daha hızlı hale getirir. Drupal çekirdeği ile paketlenmiş olarak gelir. Önbelleğe alınabilirlik meta verilerini kullanarak ön uç algılanan performansını iyileştirir ve böylece işleme hattını iyileştirir.

• Dahili Dinamik Sayfa Önbelleği

Bu Drupal 9 modülü, dinamik içeriği önbelleğe almaya yardımcı olur. Hem anonim hem de kimliği doğrulanmış kullanıcılar için yararlıdır. Bu modül Drupal 7'de mevcut değildir. Kullanıcılar tarafından talep edilen sayfalar, ilk istendiğinde saklanır ve daha sonra aynı sayfa istendiğinde yeniden kullanılabilir.


• Dahili Sayfa Önbelleği

Dahili Sayfa Önbelleği modülü, anonim kullanıcılar için verilerin önbelleğe alınmasına yardımcı olur. Bu modül çekirdekte mevcuttur ve varsayılan olarak etkindir.

Yapılandırma Yolu: admin/config/development/performans

Burada önbelleği temizleyebilir, tarayıcı ve proxy önbellek maksimum yaşını ayarlayabilir ve toplama ayarlarını etkinleştirebilir / devre dışı bırakabilirsiniz.

Advagg modülü
Dahili Sayfa Önbellek Modülü

Katkıda Bulunulan Modüller

  • Gelişmiş CSS/JS Toplama

    Advagg modülü, aşağıdakiler gibi birçok başka alt modülle birlikte gelir:
  • AdvAgg Cdn: Genel CDN'den varlıkların (CSS/JS) yüklenmesine yardımcı olur
  • AdvAgg CSS/JS Doğrulayıcı: CSS ve JS dosyasını doğrular
  • AdvAgg External Minifier: Javascript ve/veya CSS'yi bir komut satırı küçültücüsü ile küçültür.
  • AdvAgg Minify CSS : 3. taraf küçültücü ile css dosyalarının küçültülmesine yardımcı olur
  • AdvAgg Minify JS : 3. parti mi ile js dosyalarının küçültülmesine yardımcı olur
  • AdvAgg Değiştirici: Birinin CSS ve JS dizisini değiştirmesine izin verir. (Uyumluluk sorunu olabilir)
  • AdvAgg Eski Internet Explorer Uyumluluk Arttırıcı

Yapılandırma Yolu: /admin/config/development/performance/advagg

Bu modül ayrıca gzip ve brotli gibi dosya sıkıştırma tekniklerini de destekler. Bu modül, http isteklerinin sayısını azaltmaya yardımcı olur, böylece site performansını önemli ölçüde artırır.

  • ateşli

Drupal 9 Blazy modülü, bant genişliğinden tasarruf etmek ve daha yüksek hemen çıkma oranlarını önlemek için görüntülerin geç yüklenmesini sağlar. Tembel yükleme, görüntüleri yalnızca kullanıcıya görünür alandayken yükleyen bir tekniktir. Bu çoklu servis tekniği zamandan ve veriden tasarruf sağlar.

Yapılandırma yolu: /admin/config/media/blazy

Burada Blazy'yi etkinleştirebilir/devre dışı bırakabilir, yer tutucu efektini yapılandırabilir ve ayrıca görüntünün kullanıcıya ne kadar erken görüneceğini belirleyen ofseti ayarlayabilirsiniz.

Blazy modülü

Blazy modülü
  • CDN

Drupal 9 CDN modülü, CDN'nin Drupal web sitelerine kolay entegrasyonuna yardımcı olur. İçerik teslim hızını artırmak için CDN sunucusundan statik içerik sunmaya yardımcı olur. Bunun dışında, bu modülün yapılandırılması da kolaydır.

Yapılandırma yolu: /admin/config/services/cdn

CDN-Modülü
CDN Modül Ayarları

Burada CDN'yi etkinleştirebilir/devre dışı bırakabilir, eşleme URL'si sağlayabilir ve sonsuza kadar dosya önbelleğe almayı işaretleyebilir/işaretini kaldırabilirsiniz.

En İyi Kodlama Uygulamaları ile Performans İyileştirme

  • dizi_key_exist() üzerinde isset() kullanma

isset() yöntemi, array_key_exist() yönteminden önemli ölçüde daha hızlıdır. isset ve array_key_exist arasındaki temel fark, array_key_exists'in bir dizide bir anahtar olup olmadığını size kesinlikle söylemesidir. Oysa isset yalnızca anahtar/değişken varsa ve boş değilse true değerini döndürür. Bu konuda daha fazla bilgi için kıyaslama karşılaştırması için burayı kontrol edin.

  • entityQuery() kullanma

entityQuery() , uygun varlık depolaması için sorgunun oluşturulmasını ve yürütülmesini işlemek için bir depolama denetleyicisine bağlıdır. Bu, entityQuery() aracılığıyla yürütülen herhangi bir sorgunun depolamadan bağımsız olması avantajına sahiptir. Dolayısıyla, gelecekte alternatif bir varlık deposuna geçmenin gerekebileceği katkıda bulunan bir modül yazıyor veya bir web sitesinde çalışıyorsanız, tüm sorgularınız herhangi bir değişiklik gerekmeden şeffaf bir şekilde yeni depolama arka ucunu kullanır. entityQuery() , sorguları özel kodda elle veya entityQuery() Görünümleri arka ucu aracılığıyla yazarken kullanılabilir.

  • Döngü yerine loadMultiple() yöntemini kullanma

10 nid'iniz (düğüm kimlikleri) varsa ve her bir düğümü yüklemek için bunun üzerinden geçiyorsanız, veritabanına 10 sorgu yapıyorsunuz. loadMultiple() kullanılırken, yalnızca bir veritabanı sorgusuna indirgenir.

  • Önbelleğe almak

Drupal 9'da Önbellek API'sini kullanarak oluşturucuyu, yanıt dizisini veya nesneyi önbelleğe alabilirsiniz. Drupal 9'da üç adet oluşturulabilirlik önbelleğe alma meta verisi vardır.

  1. Önbellek etiketleri

    Önbellek etiketleri, Drupal varlıklarına veya yapılandırmalarına bağlı olduğunda verileri önbelleğe almak için kullanılır. Bunun sözdizimi önbellek öğesidir: tanımlayıcı örneğin düğüm:5, kullanıcı:3.
  2. Önbellek bağlamı

    Sözdizimi:
    • ebeveynleri çocuklardan ayıran dönemler
    • çoğul olarak adlandırılmış bir önbellek bağlamı, bir parametrenin belirtilebileceğini gösterir; kullanmak için: iki nokta üst üste ekleyin
    Örnek: user.roles, user.roles:anonim, vb.
  3. Önbellek maksimum yaşı

Önbellek maksimum yaşı, zamana duyarlı verileri önbelleğe almak için kullanılır.

  • Kuyruk çalışanı / Toplu

Büyük miktarda veriyi php zaman aşımı olmadan işlemek için toplu işleme veya kuyruk işçisi kullanılabilir. Kuyruk çalışanındaki öğeler yalnızca cron çalıştığında çalışır ve küçük bir süre boyunca çalışır. İki tür kuyruk çalışanı vardır: güvenilir ve güvenilmez. Güvenilir kuyruk çalışanı, kuyruktaki öğenin en az bir kez çalışmasını sağlarken, güvenilir olmayan bir kuyruk, bellek hatası veya diğer kesintiler nedeniyle öğeleri atlayabilir. Toplu işleme, cron çalışmasını beklemeden işleme sırasında hiçbir hata oluşmaması için koşullandırılmış toplu işte tüm öğeler bitene kadar öğeleri işler.

Daha iyi Sunucu Yapılandırması ile Performansı Artırma

  • Apache yerine Nginx kullanmak

Nginx ve Apache, her ikisi de yaygın olarak kullanılan web sunucularıdır. Nginx, performans karşılaştırmasında Apache'ye göre bir avantaja sahiptir. Ayrıca apache'den daha hızlı ve daha verimlidir. Nginx, 1.000'e kadar eşzamanlı bağlantı çalıştıran bir kıyaslama testine göre Apache'den 2,5 kat daha hızlı performans gösteriyor.

  • HTTP/1.1 üzerinden HTTP/2.0

HTTP/2.0, diğer kaynakları engelleyen HTTP/1.1'den farklı olarak çoğullamayı destekler. Bir kaynak yüklenemezse, HTTP/2.0, aynı anda birden çok akış verisi göndermek için TCP bağlantısını kullanır. HTTP/2.0, HTTP/1.1'den daha gelişmiş başlık sıkıştırma teknikleri kullanır

 HTTP/2.0 için Nginx yapılandırması
sunucu {
    443 ssl http2'yi dinle; //http2 ayarları
    ssl_sertifika sunucusu.crt;
    ssl_certificate_key server.key;
}
  • Sıkıştırılmış İçerik Sunma

 Yanıtları sıkıştırmak genellikle iletilen verilerin boyutunu önemli ölçüde azaltır. Bununla birlikte, sıkıştırma çalışma zamanında gerçekleştiğinden, performansı olumsuz yönde etkileyebilecek önemli miktarda işlem yükü de ekleyebilir. 
Sıkıştırılmış içerik sunmak için Nginx yapılandırması:
sunucu {
    gzip açık;
    gzip_static açık;    
    gzip_types metin/düz metin/css uygulaması/json uygulaması/x-javascript metni/xml uygulaması/xml uygulaması/xml+rss metni/javascript;
    gzip_proxied herhangi;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_versiyon 1.1;    
    ...
}
  • MySQL yerine MariaDB

mariaDB, MySQL'e kıyasla hızı artırdı. MySQL'den daha hızlı önbelleğe alma ve indeksleme sağlar. Bu durumda MySql'den neredeyse %24 daha hızlıdır. MariaDB'nin MySQL'den daha iyi olduğu başka önemli ölçütler de vardır. Bu nedenle performans açısından MySQL yerine MariaDb tercih edilmektedir.

  • CDN

CDN, içerik dağıtım ağı anlamına gelir. İçeriği daha hızlı sunmak için birlikte çalışan, dünyaya yayılmış bir sunucu kümesidir (diğer bir deyişle, varlık noktaları veya PoP'ler). CDN, site içeriğinin önbelleğe alınmış sürümünü depolar ve içeriği mevcut en yakın sunucudan teslim eder. Popüler CDN sağlayıcılarından bazıları Cloudflare, Amazon cloudfront, Google cloud cdn vb.'dir.