Drupal önyüklemesini önbelleğe alma


10

Herkesin Drupal'da önyükleme işlemini "önbelleğe" almaya çalışıp çalışmadığını merak ediyorum.

Normalde, Drupal her istek üzerine 7 önyükleme aşamasını çalıştırır, ancak belki de dağıtılmış bir üretim sisteminde, bunlardan bazıları veya hepsi ile "ortadan kalkabilir"?

Aklımdaki olası öneriler şunlar olabilir:

  1. Önyükleme durumunu seri hale getirme ve memcache'ye yapıştırma
  2. Bir komut dosyası, bootstrap.inc için belirli bilgileri dosyaya sabitleyecek bir yama oluşturabilir.
  3. İnanıyorum David Strauss Libevent üzerinde bootstrapped Drupal çalışır durumda tutmak için çalışmıştır.
  4. Başka delilik mi?

Hangi girişimler var ve hangilerinin (bir şekilde) güvenilir olduğu biliniyor?


Bu bir şekilde Drupal'ın
Refineo

Yanıtlar:


12

PHP, paylaşılan hiçbir şey mimarisidir. Bunun avantajları ve dezavantajları vardır.

Bir dezavantaj, böyle bir şey yapmanın kolay olmamasıdır. Bir yerde depolanabilecek pek bir durum yok.

Bazı hızlı testler yaptım ve giriş yaptığınızda, boostrap toplam sürenin yaklaşık% 17'sini alıyor gibi görünüyor ve bunun% 50'den fazlası aslında tüm .module ve .inc dosyalarını yüklüyor. Bu, memcache'de depolayabileceğiniz bir şey değil. Ayrıca, memcache veya veritabanı önbelleği kullanırsam çok da önemli değil.

Sayfa önbelleğini etkinleştirirken bazı sonuçlar almaya çalıştım, ancak Xhprof o zaman güvenilir sonuçlar vermiyor gibi görünüyor; her şey çok hızlı görünüyor. Ancak o zaman bile, en büyük kısmı init / çıkış kancalarını yürütmeyi ve göründüğü dosyaları yüklemeyi içerir. Orada ilginç bir sorun buldum: Görünüşe göre .module dosyasındaki varlık denetleyicisi nedeniyle kayıt defterini tetiklediği için Kullanıcı modülü önbelleğe alınmış sayfa yanıtını ciddi şekilde yavaşlatıyor.

Bununla birlikte, David Strauss, Kopenhag'da önyükleme yaptıktan sonra bir bellek görüntüsü oluşturduğu ve ardından sayfa sunulduktan sonra geri döndüğü bazı deneysel çalışmalar gösterdi. Bunun için Drupal 6'yı kullandı. Yukarıdaki sayılara baktıktan sonra, Drupal 7'de bunu yapmanın performans kazanımlarının biraz daha küçük olacağını hayal ediyorum. Bunun bir nedeni, veritabanı bağlantısının tembel yüklenmesi (Ve ilk sorguyu yürütmeden önce örneğin Memcache'i kullanırken önyüklemede oldukça uzağa gidebilirsiniz) ve önbelleğe alınmış çok şey var.

Ne var gerçekten Drupal 7'de kötü bu büyük diziler ve sonsuz recursions ve döngüler ile yüzeyin oluşmasına yol olduğunu. Bu, Drupal 7'ye giren tüm performans çalışmalarını neredeyse geri alıyor. Bakalım Twig çekirdeğe dönüştürürse, Drupal 8'de nasıl göründüğüne bakalım.

Son olarak, bahsedilen avantajlar hakkında. Büyük bir avantaj, bellek pırasalarının oldukça ilgisiz olmasıdır, çünkü her istekden sonra her şey serbest bırakılır. Bellek kullanımının sürekli arttığı ve düzenli olarak yeniden başlatılması gereken birçok Java uygulaması gördüm.


4
Seni @Berdir sitesinde) çok seviyorum;)
Letharion

Alex Bronstein, sprint sırasında, APC ile bile tpl.php dosyalarını dahil etmenin biraz yavaş olduğunu belirtti, ancak bir stat gerektiriyor - ancak Twig sınıfları derliyor, böylece düğüm + birçok yorum gibi sayfalarda bir kazanç olacak. Göreceğiz.

Önbelleğe alınmış sayfalar için, bir sürü yeniden yazma kuralı oluşturup bunları html sayfaları eşliğinde PHP'yi tamamen atlamak için .htaccess'e koyabileceğiniz bir sistem oluşturabileceğinizi tahmin ediyorum. Yine de sorun değmeyebilir: IIS, nginx, giriş yapmış kullanıcılar, ...
Bart

1
@Bart: Boost'u yeniden icat
ettiniz

5

Hayır, https://code.launchpad.net/~fourkitchens/pressflow/6-event adresinde kargo-olayı (şimdi Kellner olarak adlandırılıyor) deneyen David Strauss'du, ancak bundan ciddi bir şey geldiğinden şüpheliyim.

Drupal 7 does bir var, bootstrap çok önceden önbelleğe sahip cache_bootstrapbin bunun için. Memcached içine yapıştırabilirsiniz.

Bazı Drupal kodunu C'ye taşıyarak kod yükünü azaltabilir ve kod yüklemesini azaltabilirsiniz. Damien ve dhthwy, http://drupal.org/project/drupal_php_ext adresinde PHP uzantısı oluşturdu . Veya hiphop yapın. Hiphop ve Drupal 7'nin şu anki durumunu bilmiyorum.

Bununla birlikte, günün sonunda, Drupal 7 (ve tüm katkıları!) İle hiphop çalışması yapmak ve birkaç sunucu kiralamakla karşılaştırmak gibi mühendislik maliyetlerine iyi bir göz atmanız gerekir. Kaydedebilirseniz, sunucularınızın% 5'ini söyleyin ve 100.000 sunucunuz var, gidin, ama Facebook musunuz? Optimizasyonlarla dikkatli ve ekonomik olun.


Teşekkürler, soruyu güncelledim ve adınızı ondan kaldırdım. :) Birçok durumda, performansla başa çıkmanın çok daha etkili yollarının olduğunu, çoğunlukla merak ettiğimi fark ettim.
Letharion

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.