İpuçları

Joomla 4 Performans Ayarı - Temel Ayarlar

Joomla 4 Performans Ayarı - Temel Ayarlar

Bu dizinin ilk bölümünde, sitenizin performansını ayarlamanın neden hem felsefi hem de pratik nedenlerle yapmanız gereken bir şey olduğunu ve nereden başlayacağınızı açıkladım. O yazı zorunluluk gereği biraz genel oldu. Bu serinin ikinci bölümünde, yeterli miktarda performansın kilidini açmak için Joomla'da yapabileceğiniz bazı temel şeylere odaklanacağız.

Temel Sistem Ayarları

Bir site kurarken, tasarım ve işlevselliğe o kadar kapılırız ki, bazı çok temel ve oldukça basit sistem ayarlarının sitelerimizin performansı üzerinde büyük bir etkisi olabileceğini unuturuz. Siteyi teslim etmeden önce Genel Yapılandırma'daki birkaç basit anahtar ve birkaç basit sunucu kontrolü, dünyadaki tüm farkı yaratabilir.

Önbelleğe Almak

Bir sitenin sunucu tarafında geçirilen zamanın çoğu, ziyaretçiye gösterilecek sayfanın oluşturulmasıyla ilgilidir. Joomla, WordPress'in aksine yerleşik bir önbelleğe alma sistemine sahiptir. Joomla 1.0 ve 1.5'teki ortalamanın altında önbelleğe alma deneyimine alıştıkları için insanların buna yeterince kredi vermediğini hissediyorum. Bu 10-15 yıl önceydi.

Sitenizin Genel Yapılandırma bölümüne gidin ve önbelleğe almayı "AÇIK - Aşamalı Önbelleğe Alma" olarak ayarlayın. Aşamalı önbelleğe alma seçeneği, sayfanızı oluşturmak için kullanılan her uzantının çıktısının ayrı ayrı önbelleğe alınmasını sağlayan Joomla yerleşik önbelleğe almanın daha iyi uygulanmasıdır. Bir istek geldiğinde, sayfa mümkün olduğunca bu önbelleğe alınmış içerik parçalarından birleştirilir. Bu, önceden oluşturulmuş, optimize edilmemiş bir şablonda kaybedilen performansın bir kısmını azaltmak için bile işe yarayabilir. Herkese açık, giriş yapılmamış sayfalarınızı daha hızlı hale getirmek için kesinlikle çalışacaktır - tam olarak sitenizin arama motoru sıralamasıyla en alakalı olanı.

Önbelleğe alma arka ucuyla ilgili olarak, çoğu site, iyi, ticari, paylaşılan veya sanallaştırılmış bir ana bilgisayarda çalışan memcached veya Redis'e benzer performansta dosya önbelleğini kullanmaktan kurtulabilir - çok daha az bellek kullanımıyla, bu nedenle çok daha ucuzdur. Duygularınıza bir yere kadar katılıyorum. Gerçekten çok büyük veya aşırı yoğun bir siteniz varsa, önbelleğe alma arka ucunuz olarak özel bir memcached veya Redis sunucusu kullanmak mantıklıdır. Muhtemelen bunu okuyorsanız, aslında bu tür bir siteye sahip değilsiniz ve çok daha sıradan bir siteyi hızlandırmak istiyorsunuz. Yüzlerce düzine binlerce benzersiz aylık ziyaretçi sırasına göre trafik almamıza rağmen, kendi iş sitem bile bu kategoriye giriyor. Bu size, özel bir önbelleğe alma sunucusu kullanarak önbelleğe almanın fayda sağlayacak site ölçeği hakkında bir fikir vermelidir.

HTML Sıkıştırma

Joomla'da en çok gözden kaçan seçenek için bir yarışma olsaydı, Gzip Sayfa Sıkıştırma kazanırdı. Henüz yapmadıysanız, devam edin ve etkinleştirin.

Bu seçenek, siteniz tarafından tarayıcıya gönderilen HTML içeriğinin GZip ("deflate" olarak da adlandırılır) algoritması kullanılarak sıkıştırılmasını sağlar. Bu, istemciye aktarılan verilerin toplam boyutunu önemli ölçüde azaltır. Veri aktarımında kazanılan sürenin sitenizin performansı üzerinde önemli bir etkisi vardır.

Siteyi yavaşlatmıyor mu? Hayır gerçek değil. Joomla tarafından oluşturulan HTML sayfaları, birkaç düzine kilobayt boyutundadır. Bu boyutun yaklaşık üçte biri ile yarısı arasında sıkıştırmak kesirli bir milisaniye sürer. Bir ev sahibi ve ziyaretçileriniz arasındaki tipik aktarım hızları ile bu, birkaç milisaniyelik zaman kazanıldığı anlamına gelir. Bu durumda kaybettiğinizden iki ila üç kat daha fazla zaman kazanırsınız.

JavaScript ve CSS Sıkıştırma

Birçok şablon ve üçüncü taraf eklenti, statik dosyalarınızı (JavaScript ve CSS) anında sıkıştırarak zaman kazanmayı amaçlar. Bu tür özellikleri kullanmamanızı şiddetle tavsiye ederim. Statik dosyaları sıkıştırmak aktarım süresinden tasarruf sağlarken, net performans kaybı yaşarsınız.

Bu sezgisel olmayan sonucun nedeni, sunucuların statik ve dinamik içeriği nasıl sağladığı hakkında konuşmayı gerektirir. Düzgün kurulmuş bir web sunucusu, bellekte sıklıkla kullanılan statik içeriği önbelleğe alır. Ayrıca, dosyaların bellek eşlemesi gibi İşletim Sisteminin gelişmiş özelliklerini kullanır. Bunlar, statik içeriğin çok hızlı bir şekilde teslim edilmesini sağlar.

Statik dosyalarınızı sıkıştırmak için bir PHP betiği kullandığınızda, web sunucusunun isteği PHP yürütülebilir dosyasına teslim etmesi gerekir. En iyi senaryoda (PHP FastCGI Process Manager, diğer adıyla PHP-FPM, yeterince büyük bir süreç havuzu ve PHP OPcache etkinleştirilmiş), bu hala süreçler arası iletişim yapmak ve PHP ayrıştırıcının durumunu sıfırlamak için biraz zaman harcar. Komut dosyasının değişmemiş olarak onaylanması, önceden derlenmiş ikili gösteriminin yüklenmesi ve yorumlanması, PHP ikili tarafından yürütülmesi, statik dosyanın açılması, içeriğinin sıkıştırılması ve istemciye teslim edilmek üzere Apache'ye gönderilmesi gerekir. Bütün bunlar onlarca milisaniye sürer. Birkaç yüz kilobayttan fazla büyük bir dosyayı sıkıştırmıyorsanız, kaybettiğiniz zaman çok daha fazladır - bir veya iki büyüklük sırası! - daha küçük bir teslimat yaparak kazanılan zaman miktarına, sıkıştırılmış dosya bu nedenle, net bir kayıptır.

Bunu web sunucunuzun kendisi aracılığıyla yapmanızı şiddetle tavsiye ederim. Apache kullanıyorsanız, .htaccess dosyanıza aşağıdakileri ekleyebilirsiniz:

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/plain text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript image/svg+xml
</IfModule>

<IfModule mod_gzip.c>
 mod_gzip_on Yes
 mod_gzip_dechunk Yes
 mod_gzip_keep_workfiles No
 mod_gzip_can_negotiate Yes
 mod_gzip_add_header_count Yes
 mod_gzip_send_vary Yes
 mod_gzip_min_http 1000
 mod_gzip_minimum_file_size 300
 mod_gzip_maximum_file_size 512000
 mod_gzip_maximum_inmem_size 60000
 mod_gzip_handle_methods GET
 mod_gzip_item_include file \.(html?|txt|css|js|php|pl|xml|rb|py|svg|scgz)$
 mod_gzip_item_include mime ^text/plain$
 mod_gzip_item_include mime ^text/xml$
 mod_gzip_item_include mime ^text/css$
 mod_gzip_item_include mime ^application/xml$
 mod_gzip_item_include mime ^application/xhtml+xml$
 mod_gzip_item_include mime ^application/rss+xml$
 mod_gzip_item_include mime ^application/javascript$
 mod_gzip_item_include mime ^application/x-javascript$
 mod_gzip_item_include mime ^image/svg+xml$
 mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
 mod_gzip_item_include handler ^cgi-script$
 mod_gzip_item_include handler ^server-status$
 mod_gzip_item_include handler ^server-info$
 mod_gzip_item_include handler ^application/x-httpd-php
 mod_gzip_item_exclude mime ^image/.*
</IfModule>

Web sunucunuz statik medya dosyalarını sıkıştırmada çok daha hızlıdır. Bir dahaki sefere daha hızlı teslimat için sıkıştırılmış dosyaları bellekte önbellekte tutabilir.

Joomla 4 ayrıca, statik dosyalarınızı GZip ile önceden sıkıştırmanıza izin vererek, önceden sıkıştırılmış dosyaları web sunucunuzun talep üzerine sıkıştırmasını sağlamak yerine teslim ederek bahsi yükseltir. Bu şekilde çalışır. Diyelim ki JavaScript dosyanız var media/com_example/js/something.min.js. GZip ile sıkıştırın media/com_example/js/something.min.js.gz. Bir tarayıcı dosyayı istediğinde, web sunucusu, GZip ile sıkıştırılmış kaynakları destekleyip desteklemediğini görmek için HTTP başlığını media/com_example/js/something.min.js kontrol edecektir. Olursa, normal, sıkıştırılmamış dosya yerine dosyayı Accepts teslim eder .media/com_example/js/something.min.js.gzmedia/com_example/js/something.min.js 

Bunun ön koşulu, htaccess.txt Joomla ile birlikte gönderilen dosyayı .htaccess. Alternatif olarak, kendi .htaccess dosyanızı yönetiyorsanız, dosyanızda aşağıdaki kodun bulunduğundan emin olun:

## These directives are only enabled if the Apache mod_headers module is enabled.
## This section will check if a .gz file exists and if so will stream it
##     directly or fallback to gzip any asset on the fly
## If your site starts to look strange after enabling this, and you see
##     ERR_CONTENT_DECODING_FAILED in your browser console network tab,
##     then your server is already gzipping css and js files and you don't need this
##     block enabled in your .htaccess
<IfModule mod_headers.c>
        # Serve gzip compressed CSS files if they exist
        # and the client accepts gzip.
        RewriteCond "%{HTTP:Accept-encoding}" "gzip"
        RewriteCond "%{REQUEST_FILENAME}\.gz" -s
        RewriteRule "^(.*)\.css" "$1\.css\.gz" [QSA]

        # Serve gzip compressed JS files if they exist
        # and the client accepts gzip.
        RewriteCond "%{HTTP:Accept-encoding}" "gzip"
        RewriteCond "%{REQUEST_FILENAME}\.gz" -s
        RewriteRule "^(.*)\.js" "$1\.js\.gz" [QSA]

        # Serve correct content types, and prevent mod_deflate double gzip.
        RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
        RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]

        <FilesMatch "(\.js\.gz|\.css\.gz)$">
                # Serve correct encoding type.
                Header append Content-Encoding gzip

                # Force proxies to cache gzipped &
                # non-gzipped css/js files separately.
                Header append Vary Accept-Encoding
	</FilesMatch>
</IfModule>

Joomla 4, dağıtımındaki tüm statik JavaScript ve CSS dosyaları için önceden sıkıştırılmış .gz dosyaları sağlar. Bu .htaccess hilesini etkinleştirmek, sitenizi minimum çabayla daha da hızlı hale getirecektir. Harika, değil mi?

Statik Medya Önbelleğe Alma 

Statik medyanın boyutunu sıkıştırma ile azaltmak, savaşın yarısıdır ve öncelikle ilk kez gelen ziyaretçiler için önemlidir. Birisi sitenize geri döndüğünde, tarayıcılarının ağa hiç çarpmadan tarayıcının önbelleğinden statik medya sunması mantıklıdır. Apache kullanıyorsanız, .htaccess dosyanızda aşağıdaki kodu kullanabilirsiniz:

<IfModule mod_expires.c>
 # Enable expiration control
 ExpiresActive On

# CSS and JS expiration:
 ExpiresByType text/css "now plus 1 year"
 ExpiresByType application/javascript "now plus 1 year"
 ExpiresByType application/x-javascript "now plus 1 year"

# Image files expiration: 1 month after request
 ExpiresByType image/bmp "now plus 1 year"
 ExpiresByType image/gif "now plus 1 year"
 ExpiresByType image/jpeg "now plus 1 month"
 ExpiresByType image/jp2 "now plus 1 month"
 ExpiresByType image/pipeg "now plus 1 month"
 ExpiresByType image/png "now plus 1 month"
 ExpiresByType image/svg+xml "now plus 1 month"
 ExpiresByType image/tiff "now plus 1 month"
 ExpiresByType image/vnd.microsoft.icon "now plus 1 month"
 ExpiresByType image/x-icon "now plus 1 month"
 ExpiresByType image/ico "now plus 1 month"
 ExpiresByType image/icon "now plus 1 month"
 ExpiresByType image/webp "now plus 1 month"
 ExpiresByType text/ico "now plus 1 month"
 ExpiresByType application/ico "now plus 1 month"
 ExpiresByType image/vnd.wap.wbmp "now plus 1 month"
 ExpiresByType application/vnd.wap.wbxml "now plus 1 month"
 ExpiresByType application/smil "now plus 1 month"
 
 # Font files expiration: 1 week after request
 ExpiresByType application/vnd.ms-fontobject "now plus 1 week"
 ExpiresByType application/x-font-ttf "now plus 1 week"
 ExpiresByType application/x-font-opentype "now plus 1 week"
 ExpiresByType application/x-font-woff "now plus 1 week"
 ExpiresByType font/woff2 "now plus 1 week"
 ExpiresByType image/svg+xml "now plus 1 week"

# Audio files expiration: 1 month after request
 ExpiresByType audio/ogg "now plus 1 month"
 ExpiresByType application/ogg "now plus 1 month"
 ExpiresByType audio/basic "now plus 1 month"
 ExpiresByType audio/mid "now plus 1 month"
 ExpiresByType audio/midi "now plus 1 month"
 ExpiresByType audio/mpeg "now plus 1 month"
 ExpiresByType audio/mp3 "now plus 1 month"
 ExpiresByType audio/x-aiff "now plus 1 month"
 ExpiresByType audio/x-mpegurl "now plus 1 month"
 ExpiresByType audio/x-pn-realaudio "now plus 1 month"
 ExpiresByType audio/x-wav "now plus 1 month"

# Movie files expiration: 1 month after request
 ExpiresByType application/x-shockwave-flash "now plus 1 month"
 ExpiresByType x-world/x-vrml "now plus 1 month"
 ExpiresByType video/x-msvideo "now plus 1 month"
 ExpiresByType video/mpeg "now plus 1 month"
 ExpiresByType video/mp4 "now plus 1 month"
 ExpiresByType video/quicktime "now plus 1 month"
 ExpiresByType video/x-la-asf "now plus 1 month"
 ExpiresByType video/x-ms-asf "now plus 1 month"
</IfModule>

Makul bir soru, Joomla ve/veya üçüncü taraf uzantılarını güncellerseniz ne olacağıdır. Statik dosyalar — JavaScript, CSS, resimler, güncellemenin bir parçası olarak değişir. Tarayıcının eski dosyayı kullanmasını istemiyoruz. En iyi ihtimalle site garip görünecek, en kötü ihtimalle ziyaretçi için bozulacaktır. Sorgu parametreleriyle medya sürümü oluşturmanın devreye girdiği yer burasıdır. Sitenizin kaynak koduna bakarsanız aşağıdaki gibi satırlar göreceksiniz:

<link href="/media/plg_system_webauthn/css/button.min.css?f15d039055248502c1a41bc99a31c0f3" rel="stylesheet">

Buna ?f15d039055248502c1a41bc99a31c0f3 medya sürüm oluşturma sorgusu denir. Statik dosya her değiştiğinde değiştiği sürece, soru işaretinden sonrakiler önemli değildir. Joomla - ve doğru yazılmış üçüncü taraf uzantıları - bunu CSS ve JavaScript dosyaları için otomatik olarak yapar. Makalelerinize resimler, videolar vb. gibi başka statik içerikler eklerseniz, bir sürüm oluşturma sorgusu eklemeyi unutmayın. Gibi basit bir şey ?20211205111300 (bir soru işaretinin ardından yıl, ay, gün, saat, dakika ve saniye - bu sorguyu yazdığınız zaman) fazlasıyla yeterli.

HTTPS ve HSTS 

HTTPS'nin sitenizi güvence altına almakla ilgili olduğu, pahalı olduğu, yavaş olduğu ve e-ticaret veya başka bir şey yapmıyorsanız gerçekten buna ihtiyacınız olmadığı konusunda yaygın bir yanılgı var. Başka bir yanlış anlama ise sitenizi yavaşlatmasıdır.

Bu efsaneler 1990'ların sonlarında ortaya çıktı. Yirmi yıldan fazla bir süre önce bunlar açıkça yanlıştır.

HTTPS bugünlerde oldukça zorunlu. HTTPS kullanmazsanız, siteniz ziyaretçilerinize güvensiz olduğunu söyleyen ve ziyaretçileri korkutup kaçıran büyük, kırmızı bir uyarıyla görünür. Arama motorları tarafından cezalandırılacaktır. Yalnızca bu iki sorunu çözmek için HTTPS kullanmalısınız. Kumbarayı kırmanıza bile gerek yok. Let's Encrypt sayesinde TLS sertifikaları artık ücretsiz. Barındırma kontrol panellerinin çoğu Let's Encrypt ile entegre olur; bu, barındırma kontrol paneli sorununuzu tam anlamıyla yaşayabileceğiniz ve ücretsiz bir TLS sertifikası yükleyip otomatik olarak yenileyebileceğiniz anlamına gelir. Sizin tarafınızdan sıfır bakım var. HTTPS ayrıca son on küsur yılda piyasaya sürülen herhangi bir modern CPU'nun kullandığı şifreleme işlemleri için donanım hızlandırmasına sahip olduğundan süper hızlıdır.

Hazır buradayken, Genel Yapılandırmanızda "HTTPS'yi Tüm Siteye Zorla" seçeneğini ayarlamayı unutmayın. Bu, Joomla sitenizin her zaman HTTPS üzerinden teslim edilmesini sağlayarak bu süreçte oturum açma işlemlerini daha güvenli hale getirir. Bunu yaptıktan ve HTTPS'nin sitenizde harika çalıştığını onayladıktan sonra, .htaccess'inize aşağıdakileri ekleyin:

<IfModule mod_headers.c>
 Header always set Strict-Transport-Security "max-age=31536000" env=HTTPS
</IfModule>

Bu, HSTS (HTTP Strict Transport Security) adlı bir özelliği etkinleştirir. Kısacası, ziyaretçiniz ne söylerse söylesin, tarayıcınıza sitenizin HTTP sürümüne asla bağlanmaya çalışmamasını söyler. Bu, tarayıcı tarafında gerçekleştiğinden, alan adınızı adres çubuğuna önek olmadan yazan https://veya> önek içeren bir bağlantıyı tıklayan bir http://ziyaretçi, önce düz HTTP sürümünü ziyaret etmek zorunda kalmadan her zaman sitenizin HTTPS sürümüne ulaşır ve Joomla tarafından yönlendirilir. Bu, özellikle mobil veya uydu İnternet gibi yüksek gecikmeli bağlantılarda çok daha hızlıdır.

Yapabileceğiniz başka bir optimizasyon, sitenizi HSTS Ön Yükleme Listesine göndermektir. HSTS yalnızca biri sitenizi ilk kez ziyaret ettikten sonra çalışır, ancak sitenizin HSTS Ön Yükleme Listesinde olması, tarayıcının sitenizi ziyaretçiniz ilk kez ziyaret etmeden önce HSTS kullanan sitenizi bildiği anlamına gelir. Bu nedenle, tarayıcı onu asla düz HTTP üzerinden yüklemeye çalışmayacaktır. Yine, bu, yüksek gecikmeli bağlantılar için kolay ve ücretsiz bir zaman tasarrufu sağlar. Sevilmeyecek ne var?

HTTP/2 Sunucu İtme

Geçmişte Joomla'yı daha hızlı hale getirmekten bahsederken, insanlara siteleri daha hızlı hale getirmek için HTTP/2 Server Push'u nasıl etkinleştireceklerini söylerdim. Ancak, Google Chrome geliştiricileri zaten bunun için desteğin kaldırılmasını önerdi ve bunun HTTP/3 protokolü için hiçbir şekilde uygulanmayacağını belirtti. Bu nedenle, şu anki tavsiyem bununla bile uğraşmamanız.

Devam Edecek

Bu, beş bölümlük bir dizinin ikinci bölümüdür. Bölüm 3: Temel Ayarlar, Statik Medya Optimizasyonu üzerine olacaktır.

Kaynak: Joomla.org - Nicholas K. Dionysopoulos

Önerilen Makaleler

Her hafta ilham alın

En son Joomla haberleri hakkında hiçbir bilgiyi kaçırmamak için bültenimize abone olun.