Wordpress bellek tüketimine yakından baktım. Sitemde, 20MB RAM'in tahsis edildiği her sayfa için, sadece tüm eklentilerin çalışabileceği rahat bir ortam hazırlamak için tahsis edilmiş gibi görünüyor.
İyileştirilecek tek bir nokta yok, hafızanın çoğunu yiyen tek bir kötü adam yok. Tüketim, pek çok php modülüne yayılmıştır.
Wordpress'in ortamını sadece bir kez belleğe başlatmasını ve ardından her bir isabet için tekrar kullanmasını nasıl sağlayabiliriz? Yavaş PHP'nin her kullanıcı tıklamasında 20 MB yemesini istemiyorum - çok fazla bellek içeren bir sunucuda bile, tüm bu işleri halletmek birkaç saniye sürüyor. Temel olarak, yeniden kullanılabilecek salt okunur bellek parçalarına ihtiyacınız olacak.
Ayrıca ... neden 20 MB? Bu konuda herhangi bir görüş bildiren var mı?
Düzenleme: Geliştirme makinemde çalışan Wordpress'in WinCacheGrind çıktısı (paylaşılan barındırmadan çok daha hızlı). Gördüğünüz gibi, sadece ana sayfanın HTML kodunu oluşturmak için bir saniyeden fazla süren bir işlem sürüyor. Bunu paylaşılan barındırma tarafından yavaşlatın ve sorun için bir tarifiniz olsun. Çoğu zaman alan yöntemi seçtim. Bunu optimize etmeye nasıl devam edersiniz?
Düzenleme: İşte bu fantastik functions.php profilleme aracından sorgu istatistikleri .
Yük: 12 sorgu - 532ms - 19.1MB - 43 önbellek isabet / 53 Sorgu: 15 sorgu - 563ms - 19.0MB - 72 önbellek isabet / 86 Ekran: 21 sorgu - 705ms - 19.2MB - 234 önbellek sayısı / 257
Düzenleme: Seni korkutmak için garantili bir şey görmek ister misin? Bu satırları index.php'nin sonuna ekleyin:
echo "<pre>\n";
print_r(get_defined_vars());
echo "</pre>\n";
Şu anki gönderinin gövdesinde bellekte depolanan kaç kez olduğunu saymaya çalıştım. 20 örnek saydım. Sonra PHP'nin referans sayımı olduğunu fark ettim, bu yüzden kopya sayısı sadece üçe düştü: ikisi WP_Query'de, biri nesne önbelleğinde. Daha fazla araştırıyorum.
Bu nedenle WordPress'in bellek sorunlarını hedeflemede yeniden düzenlemeye ihtiyacı olduğunu düşünüyorum. Artık hafıza tüketimini, yaptıklarının karmaşıklığı için suçlayamazsınız. Sadece bir sürü yanlış yapar .
Düzenleme: Bunu anlamaya çalışırken bir gün sonra, benim bulgularım:
1) Tüm hafızanın% 88'i, bir çağrı türü gerektirir veya include veya include_once'dan gelir:
2) php dosyası çoğunlukla, bir isteğin sunulmasının ilk bölümünde (şaşırtıcı olmayan bir şekilde), tüm hafızanın yendiğini içerir:
3) İstek sırasında yürütülen tüm fonksiyonları göstermek ilginçtir. Toplam 12000'den fazla arama var. Onları daha görünür kılmak için titrettim (Seviye ekseni temelde yığının derinliğidir):
4) Aklıma gelebilecek tek yol, içerilen .php dosya miktarını en aza indirmektir. Geldikleri dosya başına işlevleri bölersem, birçok dosyanın en fazla bir veya iki kez isabet ettiğini görebilirsiniz. Gerekmediğinde bunları atlamanın bir yoluna ihtiyacımız var. Örneğin, uzak veritabanı yedekleme eklentim, hiç kullanılmayacak şekilde yüklenir ve kaydedilir. İşte dosya adıyla bölünen yukarıdaki arsa:
Bloglarımın hafızasını% 30 veya daha fazla kesmemize neden olacak yeniden yapılanmalar için :) itibarımıza değer bir ödül sunuyorum.
Düzenleme: WP 3.1'i yükledim, eski sürümle karşılaştırmak burada.
Mavi WP 3.1, kırmızı 3.0.4'tür. Yeni WP daha hızlı, ancak daha fazla hafıza da yiyor.
İşte dosyaya göre bir liste.
Bu, "All In One SEO pack" tarafından ne kadar hafıza tüketildiğini fark etmeme izin verdi - bir cadde istediklerimi elde etmek için eklentinin işlevselliğinin sadece bir kısmını kullanmak olacaktır. Ayrıca, kendi eklentilerim oldukça kötü görünüyor.
Koşullu yüklemeyi, örneğin comment.php (blogumdaki yorumlara izin vermiyorum) ve diğerleri üzerine yüklemeyi denemek istiyorum. Kaldırılan tüm kodları sildim. Kses.php dosyasını yalnızca talep üzerine global tablolarını yüklemek için kestim. L10n'yi basitleştirdim (yerelleştirme yapmam), işlevlerini dizeleri hemen arama yapmadan döndürür hale getirdim. Hala keyfi bir şekilde kurduğum% 30 işaretinden uzaktayım.
Düzenleme: APC'yi varsayılan ayarlarla (32 MB opcode önbellek) indirdim ve etkinleştirdim. İşte karşılaştırma:
Kod yüklemesinin büyük oranda hızlandığını ve kodun hafızada daha az yer kapladığını görebilirsiniz (muhtemelen sadece orijinal kaynak koduyla değil sadece opcodlarla uğraştığımız için). Hafıza tüketimi ise yine de oldukça yüksektir.