WordPress web site sahiplerinin en çok karşılaştığı sorunlardan biri olan yüksek CPU kullanımı, web sitenizin performansını olumsuz yönde etkileyen ve çözülmemesi durumunda ziyaretçilerinizin web sitenizde sürekli hata almasına yol açan bir durumdur.
WordPress‘te aşırı CPU kullanımına bağlı olarak web sitesinin mevcut hosting paketinizdeki kaynağın tamamını çok kontrolsüz bir biçimde sonuna kadar kullanıyor olması; sitenizin sürekli çökmesi, 500 Internal Server Error gibi problemlerle beraber arama motorlarındaki sıralamalarda da sorunlar yaşamanıza ve sıralama kaybetmenize neden olabilecek kadar önemli bir problem yaratmaktadır.
Bu rehberde WordPress yüksek CPU kullanımı sorununu nasıl çözebileceğinize yönelik detaylı bilgiler paylaşacağız.
Başlarken: Öncelikle WordPress’te yüksek cpu kullanımına neden olabilecek ilk şeyin kullandığınız eklentiler olabileceğini unutmayın. Kullandığınız / yeni eklediğiniz eklentileri sırasıyla devre dışı bırakarak sitenizin kaynaklarını tüketen eklentinin hangisi olduğunu saptayabilirsiniz. Ayrıca makalenin sonunda wordpress’te en çok kaynak tüketen eklentilerin listesine ulaşabilir, listedeki eklentilerden kullandıklarınız varsa ilk iş olarak buradan başlayabilirsiniz.
İçerik Tablosu
1 – JPEG PNG Meta Verilerini Sıkıştırın ve Kaldırın
Bir web sayfasının yüklenmesi söz konusu olduğunda görüntüler en büyük darboğazlardan biridir, bu nedenle görüntülerden gereksiz meta verilerini kaldırarak, daha fazla sıkıştırmak önemlidir. Bu, hem görselin hızlı bir şekilde servis edilebilmesine olanak tanır, hem de kaliteden feragat etmeden görsel boyutundan tasarruf etmenizi sağlar. Görsellerden meta verileri kaldıran PNG Gauntlet – Stripper – JPEGmini gibi eklentileri kullanarak görsellerinizin meta verilerini temizleyebilir, bu sayede görsel kalitesinde kayıp yaşamadan olarak dosya boyutunu küçültebilirsiniz.
Ayrıca, WordPress sitenize her görüntü yüklediğinizde görüntü optimizasyonu yapan pek çok eklenti vardır. Aşağıdaki eklentiler en çok kullanılan görsel sıkıştırma eklentileridir. Bu eklentilerle ücretli / ücretsiz olarak görsellerinizi çok başarılı bir biçimde sıkıştırabilirsiniz.
2 – Paralel İndirme Özellikli Bir CDN Kullanın
Web sitenizi hızlandırmanın en iyi yollarından biri CDN kullanmaktır. WordPress Temanızın resimlerini bir CDN sunucusunda barındırarak sunucunuzun CPU yükünü önemli ölçüde azaltabilirsiniz. Özellikle görseller için yapılan istekler yüksek CPU kullanımına yol açabiliyor. İçerik Dağıtım Ağı olarak da bilinen bir CDN, resimlerinizi dünyanın her yerindeki birden çok sunucuda barındırır ve bir kullanıcı bir görüntü istediğinde, onlara en yakın sunucu aracılığıyla teslim edilir.
Bazıları, tools.pingdom.com ile yaptığım teste dayanarak, gerekli ek DNS bağlantısı üzerinde tartıştı, sitem öncekinden daha hızlı. İleriye dönük en iyi çözüm, İçerik Dağıtım Ağı olarak da bilinen bir CDN kullanmaktır. Aşağıdaki CDN servislerini kullanarak sitenizde CDN’i aktif edebilirsiniz.
Ayrıca bazı CDN servislerinde Paralel indirme özelliği vardır. Bu, CDN sunucusunun görüntüleri birden çok alt etki alanı aracılığıyla teslim etme yeteneğine sahip olduğu anlamına gelir. Aynı anda, görüntünün image01.domain.com, image02.domain.com, image03.domain.com ve image04.domain.com gibi 4 alt alan üzerinden hızlıca teslim edilmesini sağlar ve oldukça hızlı bir yöntemdir.
3 – Çerezsiz (Cookie olmadan) Bir Alan Adından Statik İçerik Çekmek
Görüntülere çerez (cookie) eklenmeden sunulması, görüntülerin bir CDN veya alt etki alanı aracılığıyla sunulmasını gerektirir. Genellikle images.alan-adiniz.com biçimindedir. İşin püf noktası, WordPress’e www.alan-adiniz.com’dan tanımlama bilgileri sunmasını ve resimler.alanınız.com’daki tanımlama bilgilerini kaldırmasını söylemektir. Bu işlevi kullanabilmek için Bir CDN’ye ihtiyacınız olacak ve görüntüleri alt etki alanındaki CDN aracılığıyla sunacaksınız, ardından aşağıdaki kodu wp-config.php dosyanıza ekleyin. Bu kod, alt alanınız için tüm çerezleri (cookie) kaldıracaktır.
define( 'COOKIE_DOMAIN', 'www.your-domain.com' );
4 – Önbelleğe Alın, CSS’yi Optimize Edin ve JavaScript’i Sıkıştırın
Gereksiz kodları ve satır sonlarını kaldırarak CSS dosya boyutunu % 50 küçültme fırsatınız olabilir. Yine de bu, benzersiz bir ziyaretçi web sitenizi her ziyaret ettiğinde style.css dosyanızın indirilmesi nedeniyle büyük bant genişliği tasarrufuna dönüşür. Eskiden ( old good days 🙂 ), css’yi manuel olarak sıkıştırmanız ve birleştirmeniz gerekiyordu. Bugün, işi yapan çeşitli eklentiler mevcut ve kullanması oldukça basit.
Ayrıca, tüm web yazı tiplerini yüklemek için eşzamansız (async) yüklemeyi kullanın. Mümkünse, ağır yazı tiplerini yüklemekten kaçının ve her tarayıcıyla uyumlu varsayılan Arial veya Verdana’yı kullanın. Çoğu önbellek eklentisi bu özelliğe sahiptir.
5 – Veritabanını Optimize Edin
WordPress web sitenizden bir eklenti / temayı sildikten sonra bile, bazı kayıtların veritabanınızda kalabileceğini biliyor musunuz? Boşta kalan tablolar ve cron görevleri gibi artık veriler veritabanınızda boşa yer kaplar. Bildiğiniz gibi, tüm eklentiler / temalar WordPress veritabanınızın temizliği ile ilgilenmez. Eklentileri / temaları kaldırdığınız sürece, artık veriler veritabanınızda birikecek ve web sitenizin performansını etkileyecektir.
Tıpkı Windows PC’niz gibi, zaman geçtikçe, siz yazılımı yükleyip kaldırdıkça kayıt defteri şişer. Aynı şey, bir eklentiyi her yükleyip kaldırdığınızda WordPress kurulumunuz için de geçerlidir.
MySQL’deki (WordPress’in kullandığı veritabanı) tablolar, zaman içinde veriler eklendikçe, kaldırıldıkça, taşındıkça verimsiz hale gelecektir. MySQL’den tablolarını ara sıra optimize etmesini istemek sitenizin mümkün olduğunca hızlı çalışmasını sağlayacaktır. İşte hosting panelinize giriş yapmanızı gerektirmeden bu işi yapan 2 eklenti. Aşağıdaki eklentileri kullanarak veritabanınızı artık verilerden temizleyebilir, performansını artırabilirsiniz.
6 – MySQL’den Gereksiz Verileri Manuel Olarak Kaldırma
Çoğu MySQL Optimizasyon eklentisi, basit temizleme işlemi gerçekleştirir, bu MySQL’inizin bozulmasını önlemek içindir. İlk adımı gerçekleştirdikten sonra, manuel olarak daha derin bir temizlik yapmanız gerekebilir. “Wp_commentmeta” akismet eklentisini kullanıyorsanız, bu eklentinin yakaladığı – wp_comments ile hiçbir ilişkisi olmayan “önemsiz” yorumları silmek için aşağıdaki komutu kullanın. Önemsiz olarak işaretlenmiş yorumlar, kaldırdığınız yorumlardan alınan veriler vb. gibidir.
DELETE FROM wp_commentmeta WHERE comment_id
NOT IN (
SELECT comment_id
FROM wp_comments
)
Wp_commentmeta Tablosundaki Akismet İlgili Meta Veriler – Bir spam gönderen her yorum bıraktığında, Akismet bunun bir kaydını, IP adresi gibi kayıtları ve daha fazlasını kaydeder. Bu veriler bazıları için yararlı olabilir, ancak bu tüm yükün ana kaynağıdır. Doğru olarak, wp_commentmeta 2KB veya daha az olmalıdır, Akismet’in varlığından dolayı, aldığınız spam miktarına bağlı olarak 10MB veya daha fazla olabilir. Bu basit sorguyu gerçekleştirerek tüm istenmeyen verileri kaldırın.
DELETE FROM wp_commentmeta WHERE meta_key
LIKE "%akismet%"
Yorum Aracısını Kaldırma – Varsayılan olarak, blogunuza birisi yorum yaptığında, tarayıcı, IP adresi vb. Gibi küçük miktarda bilgiyi yakalar. Bu veriler, çoğumuz için istatistik amacıyla kullanışlıdır, bu gibi verileri Google Analytics de kullanır, bu nedenle de bu verileri sitenizde saklamanın bir anlamı yoktur. Bu verileri toplu olarak kaldırabilirsiniz.
update wp_comments set comment_agent ='' ;
Geri İzlemeler (Trackback) ve Pingleri Kaldırma – Artık kimse geri izleme kullanmıyor, ping de öyle. Technorati’yi hatırlıyor musun? Evet, ping ve trackback’ler resmi olarak ölüdür ve tüm ping kanalları kapatılarak gereksiz özellik ile birlikte gömülür. Bu sorguyu kullanarak toplu olarak kapatın.
UPDATE wp_posts SET ping_status = 'closed';
Tüm Kullanılmayan Etiketleri Silin – Etiketler, Bulut Etiketleri ve daha pek çoğu, blog yazarlarının büyük çapta kötüye kullanımı nedeniyle öldü. Etiketler artık amaçlanan mesajı sıralamaya veya iletmeye yardımcı olmuyor. Kategoriler hala en iyi seçenek olarak kullanabileceğiniz yöntemdir. Çok sayıda artık ve kullanılmamış etiketiniz varsa, veritabanınızdan bunları temizlemek için aşağıdaki basit sorguları mysql veritabanınız üzerinde gerçekleştirebilirsiniz.
DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 );
DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms);
DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);
Besleme (Feed) Önbelleğini Silme – Kötüye kullanım nedeniyle kullanılmayan başka bir özellik. Beslemenin popüler bir özellik olduğunu söyleyebiliriz. Ancak yine de feed kullanımı mobil internetin önemli olduğu dünyada tercihinize göre kullanmak istemeyeceğiniz bir özellik olabilir. WordPress tarafından oluşturulan tüm gereksiz önbelleklenmiş geçici feedleri veritabanınızdan silebilirsiniz.
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient%_feed_%')
Tüm gönderi revizyonlarını ve meta verilerini silin – Sayfa / Gönderi revizyonu çok kullanışlı bir özelliktir, ancak çok sık blog yazarsanız önemli bir yer kaplayabilir. sürekli güncellediğiniz bir sayfanız varsa veya araştırma yazısı hazırlarken sürekli sayfayı kaydedip, eklemeler yaparak ilerliyorsanız WordPress sizin için kaydettiğiniz her versiyon için bir kopya oluşturur ve bunu veritabanında saklar. Zamanla site içeriğinize bağlı olarak bu revizyon dosyaları birikir ve yük oluşturur. Revizyonları kaldırarak büyük bir tasarruf elde edebilirsiniz. Revizyonları aşağıdaki sorgu ile toplu olarak kaldırabilirsiniz.
DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);
7 – Resimleri ve Videoları Lazy Load Yöntemiyle Kullanma
Lazy Load, bir sayfadaki resimleri ve / veya iç çerçeveleri yalnızca kullanıcı tarafından görünür olduklarında (sayfada o alana geldiklerinde) görüntüler. Bu, HTTP istek mekanizmasının sayısını azaltır ve yükleme süresini iyileştirir. Aşağıdaki eklentiler vasıtasıyla lazy load özelliğini aktif hale getirebilirsiniz. Ayrıca çoğu tema lazy load özelliğini varsayılan olarak sunmaktadır.
8 – GZip Sıkıştırma
GZip sıkıştırması, çoğu cache eklentisi tarafından otomatik olarak uygulanabilen bir özelliktir. Blogunuzda Gzip sıkıştırmasını etkinleştirerek, ortalama olarak dosyaları % 60 – 75 oranında küçültebilirsiniz.
Daha küçük dosya boyutu, daha hızlı indirme anlamına gelir, yani CPU’nuzun diğer bazı şeyler için daha fazla işlem gücüne sahip olabileceği anlamına gelir. WordPress’te GZip’i etkinleştirmek için, aşağıdaki kodu header.php’ye ekleyebilirsiniz, sayfada en üst kısma ekleyerek kullanabilirsiniz. Ayrıca diğer başka bir yöntem olarak “Gzip Sıkıştırması Nedir?” konulu içeriğimizi inceleyerek daha detaylı bilgi alabilirsiniz.
<?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>
Alternatif olarak, bu basit Gzip kodunu .htaccess dosyanıza ekleyebilirsiniz.
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
9 – Varsayılan WordPress Nesne Önbelleğini Etkinleştirin
Eğer bir önbellek eklentisi kullanıyorsanız bunu atlayın, muhtemelen bu özellik web sitenizde aktif olacaktır.
WordPress Nesne Önbelleği olarak bilinen bir özellikle birlikte gelir, ne yazık ki varsayılan olarak etkin değildir, bu nedenle bu özellik pek bilinmez. Herhangi bir WordPress Önbellek eklentisini etkinleştirdiğinizde, bu kod otomatik olarak htaccess’inize eklenir. Ancak aşağıdaki adımları izleyerek manuel olarak da ekleyebilirsiniz.
- Adım 1 – wp-config.php dosyanızı açın,
- Adım 2 – Aşağıdaki kodu yapıştırın.
define('ENABLE_CACHE', TRUE);
- 3. Adım – Önbellek dizinini oluşturun
/wp-content/cache/
- Adım 4 – ‘Önbellek’ klasörü yazılabilir iznini 755 veya 777 olarak değiştirin
Son kullanma zamanını ayarlamak için bu satırı ekleyebilirsiniz:
define(‘CACHE_EXPIRATION_TIME’, 3600);
10 – Süre Sonu Başlığını, Önbelleği ve Çerezleri Ayarlayın
Her zaman olduğu gibi, çoğu önbellek eklentisi bunu zaten halletmektedir. Aksi takdirde, Expires başlıklarını belirli dosyalara ve hatta dosya türlerine göre ayarlayabilirsiniz. Ardından, tarayıcı web sitesine geldiğinde, belirli dosya türlerini en son ne zaman indirdiğini görebilir. Yakın zamanda bir giriş olduysa, cache süresine bağlı olarak bunları önbellekten gösterecek, siteyi bir süredir ziyaret etmediyseniz, web sunucusundan en yeni sürümü indirecektir. Aşağıdaki kod, Apache sunucusu için olası tüm dosyaları ve yapılandırmaları içerir, Ngnix yapılandırmasıyla çalışmaz. .Htaccess dosyanıza aşağıdaki kodu ekleyerek aktif edebilirsiniz.
# ----------------------------------------------------------------------
# Expire Header
# ----------------------------------------------------------------------
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset UTF-8
# Force UTF-8 for a number of file formats
< IfModule mod_mime.c >
AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml
< /IfModule >
# FileETag None is not enough for every server.
< IfModule mod_headers.c >
Header unset ETag
< /IfModule >
# Since we’re sending far-future expires, we don’t need ETags for static content.
# developer.yahoo.com/performance/rules.html#etags
FileETag None
# Send CORS headers if browsers request them; enabled by default for images.
< IfModule mod_setenvif.c >
< IfModule mod_headers.c >
# mod_headers, y u no match by Content-Type?!
< FilesMatch "\.(cur|gif|png|jpe?g|svgz?|ico|webp)$" >
SetEnvIf Origin ":" IS_CORS
Header set Access-Control-Allow-Origin "*" env=IS_CORS
< /FilesMatch >
< /IfModule >
< /IfModule >
# Allow access to web fonts from all domains.
< FilesMatch "\.(eot|otf|tt[cf]|woff2?)$" >
< IfModule mod_headers.c >
Header set Access-Control-Allow-Origin "*"
< /IfModule >
< /FilesMatch >
< IfModule mod_alias.c >
< FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$" >
< IfModule mod_headers.c >
Header unset Pragma
Header append Cache-Control "public"
Header unset Last-Modified
< /IfModule >
< /FilesMatch >
< FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$" >
< IfModule mod_headers.c >
Header unset Pragma
Header append Cache-Control "public"
< /IfModule >
< /FilesMatch >
< /IfModule >
# Expires headers (for better cache control)
< IfModule mod_expires.c >
ExpiresActive on
# Perhaps better to whitelist expires rules? Perhaps.
ExpiresDefault "access plus 1 month"
# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
ExpiresByType text/cache-manifest "access plus 0 seconds"
# Your document html
ExpiresByType text/html "access plus 0 seconds"
# Data
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
# Feed
ExpiresByType application/rss+xml "access plus 1 hour"
ExpiresByType application/atom+xml "access plus 1 hour"
# Favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"
# Media: images, video, audio
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# HTC files (css3pie)
ExpiresByType text/x-component "access plus 1 month"
# Webfonts
ExpiresByType application/x-font-ttf "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType application/x-font-woff2 "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
# CSS and JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
< /IfModule >
# Gzip compression
< IfModule mod_deflate.c >
# Active compression
SetOutputFilter DEFLATE
# Force deflate for mangled headers
< IfModule mod_setenvif.c >
< IfModule mod_headers.c >
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
# Don’t compress images and other uncompressible content
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp)$ no-gzip dont-vary
< /IfModule >
< /IfModule >
# Compress all output labeled with one of the following MIME-types
< IfModule mod_filter.c >
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
< /IfModule >
< IfModule mod_headers.c >
Header append Vary: Accept-Encoding
< /IfModule >
< /IfModule >
# ----------------------------------------------------------------------
# Fonts
# ----------------------------------------------------------------------
# Add correct content-type for fonts
AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType font/x-woff .woff
AddType image/svg+xml .svg
# Compress compressible fonts
AddOutputFilterByType DEFLATE font/ttf font/otf image/svg+xml
# Add a far future Expires header for fonts
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType font/x-woff "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
# ----------------------------------------------------------------------
# No Cookies
# ----------------------------------------------------------------------
< FilesMatch "\.(js|css|jpg|png|jpeg|gif|xml|json|txt|pdf|mov|avi|otf|woff|ico|swf)$" >
RequestHeader unset Cookie
Header unset Cookie
Header unset Set-Cookie
< /FilesMatch >
11 – Sayfa / Gönderi Revizyonlarını Devre Dışı Bırakmak
WordPress’te oluşturulan sayfa veya gönderi revizyonları, belki de en can sıkıcı özelliktir, mysql veritabanının birkaç ay içinde şişirilmesine neden olmakla kalmaz, çok sayıda gereksiz giriş oluşturur ve veritabanı alanlarını kaplar. Aşağıdaki kodu wp-config.php içinde girerek revizyon özelliğini kapatabilirsiniz.
define('WP_POST_REVISIONS', false);
Ancak revizyonun kapatılması yerine, revizyon sayısının sınırlandırılmasını tavsiye ederiz. Bu, tarayıcının çökmesi durumunda yedek görevi görür.
define( 'WP_POST_REVISIONS', 1 );
12 – PHP Belleğini (PHP Memory Limit) Artırmak
Paylaşımlı bir hosting kullanıyorsanız bu ayarlar işe yaramayabilir, ancak hosting şirketinize bağlı olarak kullanabilirsiniz. Genellikle 64MB fazlasıyla yeterlidir. Aşağıdaki kodlardan birini wp-config.php dosyanızın içine ekleyerek kullanabilirsiniz.
define('WP_MEMORY_LIMIT', '64M');
define('WP_MEMORY_LIMIT', '96M');
define('WP_MEMORY_LIMIT', '128M');
13 – Cron Job’ları Devre Dışı Bırakmak
Bu işlemi genellikle tavsiye etmiyoruz, çünkü cron jobları devre dışı bırakırsanız yaptığı işi manuel olarak yapmanız gerekecek! Bu bazı eklentileri bozabilir. WordPress Cron job, WordPress sitenize her erişildiğinde çalışan, yoğun kaynak gerektiren bir görevdir. WordPress cron jobların verimliliğini optimize etmenin en iyi yolu, WP-cron’u devre dışı bırakmak ve hosting yönetim paneliniz aracılığıyla saatte bir çalıştıracak normal bir cron job tanımlamaktır. Eğer çok etkin bir siteniz yoksa 12 saat veya günde bir kez olarak ayarlayabilirsiniz.
define('DISABLE_WP_CRON', true);
Wp-config.php’yi değiştirerek WP-cron’u devre dışı bırakabilirsiniz.
14 – Hotlinking ve Leaching’i Devre Dışı Bırakmak
Hotlinking, bir bant genişliği “hırsızlığı” biçimidir. Diğer siteler, kendi makalelerinizden sitenizdeki resimlere doğrudan bağlantı verdiğinde, sunucunuzun giderek daha fazla yüklenmesine neden olur. Yasak veya özel resim seçeneğiyle görüntülerin bağlantısını devre dışı bırakın, aşağıdaki gibi başka alanlar da ekleyebilirsiniz.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?alan-adiniz.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?linkedin.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?stumbleupon.com [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?google\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?yahoo\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?bing\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?facebook\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?pinterest\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?twitter\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?instagram\.tld [NC]
RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?feedburner\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?google\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?yahoo\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?bing\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?facebook\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?pinterest\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?twitter\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?instagram\.tld [NC]
RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?feedburner\.tld [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
not: RewriteCond %{HTTP_REFERER} !^https://([a-z0-9]+\.)?google\.tld [NC]
örneğindeki kırmızı .tld (top level domain) alan adı uzantısını belirtmek için yazılmıştır. Hangi kaynak için kullanılacaksa o uzantı yazılmalıdır. Örneğin: RewriteCond %{HTTP_REFERER} !^http://([a-z0-9]+\.)?google\.com [NC]
15 – Keep Alive Hizmetini Aktifleştirmek
Keep Alive, tarayıcı ile sunucu tarafı arasında web sitesi performansını ve hızını artıran kalıcı bir bağlantı oluşturmak için kullanılan bir hizmettir. Keep Alive olmayan bir bağlantı, çeşitli isteklerle kesintili olarak çalışır. Basit çözüm Keep Alive’ı açmaktır ve bu başlığı mevcut .htaccess dosyamızda geçersiz kılmamız gerekir. İşte, başlığınızı geçersiz kılan .htaccess dosyasına eklemeniz gereken kod.
Header set Connection keep-alive
16 – Gravatar’ı Önbelleğe Almak
Yorumların bulunduğu her sayfa, Gravatar sunucusuna yorum başına bir çağrı yapar. Tek bir arama sadece 100 ms sürerken, yüzlerce yorum içeren bir sayfada büyük yavaşlamalardan bahsedebiliriz. Bu da WordPress’in Yüksek CPU kullanmasına sebep olabilir. Sayfa yüklemeleri 20 saniye veya daha uzun sürebilir.
17 – Dış Kaynak Yorum Sistemi
Yorum sistemini üçüncü bir tarafa yaptırmak, hositng CPU yükünüzü büyük ölçüde azaltacaktır, bu da spam bot saldırı sıklığını azaltacaktır.
- Facebook Yorum Sistemi
- Disqus – Bu en popüler yorum sistemlerinden biridir, yorumları dışa aktarabilirsiniz ve birçok sosyal medyada çalışır.
18 – Kötü Botları Engellemek
En büyük kaynak tüketicilerden biri, e-postaları toplayan ve web sitenize spam yorumları bırakan spam botlardır. Aşırı kaynak tüketimine ve CPU aşımına neden olduklarından en iyi yol, gereksizce kaynakları tüketmeden önce onları durdurmaktır. Aşağıdaki, tüm gelen trafiği kontrol eden ve aşırı uzun istek dizeleri gibi kötü eylemleri ve kötü istekleri engelleyen 2 eklentiyi kullanmayı deneyebilirsiniz.
19 – Apache Performansını Arttırın: .htaccess’i devre dışı bırakın
Yalnızca VDS ve VPS İçin Geçerlidir – Son olarak, kök erişiminiz varsa, .htaccess’i devre dışı bırakmalı ve yeniden yazma işlemini doğrudan httpd.conf dosyasına koymalısınız. Alternatif olarak, Plesk gibi bazı barındırma yazılımları kendi sistemlerinde bu özelliği içerir. Bu, Apache’nin her dizini ve dosyayı aramasını gerektirmediğinden performansı büyük ölçüde artıracaktır.
En Çok CPU Tüketen WordPress Eklentileri
Better WordPress Google XML Sitemaps
Broken link checker
Contact Form 7
Contextual Related Posts:
Disqus Comment System
Google XML Sitemaps
Jetpack
NextGEN Gallery
Revolution Slider
s2Member Framework
Similar Posts – Best Related Posts Plugin for WordPress
Slimstat Analytics
Vaultpress
Visual Composer
WooCommerce
WordPress Popular Posts
WP Statistics
WPML
WordPress Hızınızı Test Edin
Yukarıdaki optimizasyonları yaptırktan sonra nihai sonucu test etmek önemlidir.
Paylaşımlı bir hosting hizmeti asla bir VPS (Sanal Özel Sunucu) veya VDS sunucu kadar hızlı olmayacaktır. Mümkünse bir sunucu almayı kiralamayı düşünebilirsiniz. WordPress temalarına gelince, bazı temalar kötü kodlanmıştır, çok fazla yazı tipi ve js kütüphanesi kullanır vb. Mümkünse daha sade ve yalın kodlanmış bir tema satın alsbilirsiniz.
Aşağıdaki web site hız testi uygulamaları aracılığıyla web sitenizin performansını ölçebilirsiniz.
Makalemizi paylaşarak WordPress aşırı CPU tüketimi sorununu yaşayan kişilerin de makalemizdeki yönergeleri izleyerek çözüme kavuşmalarını sağlayabilirsiniz.