PHP-yalnızca "önbellek motoru mı"

4 Cevap php

Benim web uygulamaları için oldukça küçük bir iskelet yazdı ve ben de bunun için küçük bir önbellek eklemek olacağını düşündüm.

Bu oldukça basittir:

  • Geçerli sayfa önbellekte bir dosya olarak var ve dosya çok eski değilse, bunu okumak yerine sayfayı yeniden inşa çıkmak

  • Geçerli sayfa sayfa recalc / önbelleğe alınmış eski ve kaydedin değilse

Ancak, bu konuda kötü bir şey:

  • Bir MySQL sorgusu ile 40 nispeten uzun mesajları aldığı bir sayfa ile benim performans testleri with using the cache, it took even longer to handle a single request (1000 her test) olduğunu söyledi

  • Bu nasıl olabilir?

  • Nasıl sonuçlar üzerinden ilk defa döngü şablona sonuçlarını geçen ve daha sonra hızlı bir filemtime() kontrol ve okuma daha olabilir ikinci kez sonuçları döngü, bir MySQL sorgusu yapıyor olabilir?

  • Ben sadece tam ham PHP önbelleğini kaldırmak ve böylece memcached veya gibi bazı PHP önbellek mevcudiyetine rahatlatmak gerekir?

4 Cevap

Prematüre optimizasyonu tüm kötülüklerin köküdür. Eğer bir önbellek ihtiyacınız yoksa, bir önbellek kullanmayın.

Yani istek başına dinamik içerik sunmak değil içerik varsa, bu tür vernik gibi bir önbelleğe alma proxy kullanarak ve tamamen PHP ve web sunucusu kesmek içine bakmak isteyebilirsiniz, söyleniyor. Orada PHP hatta ilk satırı almak için yükü biraz, ve PHP ile statik dosyaları hizmet biraz kirli.

Sadece elemanları, memcached veya APC önbellek gibi bir şey önbelleğe isterseniz gitmek için yoludur. APC daha hazır (Eğer performansı hakkında tüm bakım eğer APC opcode önbellek için sunucularda yüklü olmalıdır) ve memcached birden webserverlarda tarafından erişilebilir (ve / veya önbelleği var icar seçeneği vardır olmanın avantajına sahiptir Birden önbelleğe)

Ben bu yüzden, senin uygulanmasına bağlı olarak, başka bir sorun var gibi görünüyor sanmıyorum. İşte bu konuda daha büyük kaynakların çift vardır:

http://www.mnot.net/cache_docs/

http://blog.digitalstruct.com/2008/02/27/php-performance-series-caching-techniques/

Olası -

APC ve mysql sorgu önbelleği (varsayılan) kullanıyorsanız, o zaman kodu php zaten idam ve apc de opcode olarak saklanır ve tekrar tekrar aynı sorguyu isabet eğer mysql sorgu önbellek çok veritabanı sonuçlarını önbelleğe edecektir. Bu durumda verilerin çoğu çok dosya okuma yavaş olabilir bellekten gelir. Bu yaklaşımın gerçek yararı mysql bağlantı sayısını tasarruf olacak ama performansı olmayabilir olmasıdır.

Süresi sona kadar sayfa önbellek doğrudan hizmet böylece kalamar gibi bir önbellek proxy kullanma durumunda ideal bir çözüm olmalıdır. Yukarıdaki durum için başka bir optimizasyon sadece mysql ve sorgu önbelleği isabet daha iyi olurdu memcache mysql çıktı boyutu küçük önbelleğe olacaktır. Eğer gerçekten oluşturulan yukarı işareti önbelleğe almak istiyorsanız Son olarak, çıktı tamponlama ob_start () kullanabilir ve memcache doğrudan çıktıyı saklayınız.

Bence değil.

Uygulamanın en yavaş parçası muhtemelen veritabanı trafik.

Bir HTML / PHP önbelleğe alınmış dosya eklerseniz daha hızlı olmalıdır.