2009-10-12 16 views
23

Sadece uzmanların beyinlerini php çıktı arabelleğe almak istiyorum. Bir nedenden ötürü uygulamak istediğim zamanlar var, ama her zaman etrafta dolaşmak için kodumu yeniden düzenlemeyi başardım.PHP çıktı arabellekleme - kötü bir fikir gibi geliyor, değil mi?

Kullanmaktan kaçınıyorum çünkü kaynaklara mal olacakmış gibi geliyor. Yani, kodlayıcıya böyle harika bir esneklik sunabilirlerse, neden her zaman çıktıyı tamponlamıyorlar? Buraya gelebileceğim tek cevap şudur: arabelleğe alma değil, muazzam kaynakları korur ve iyi kodlama uygulamasıyla buna ihtiyacınız olmaz.

Buradan uzak mıyım?

cevap

19

Deneyimlerimden, performans üzerinde önemli bir etkisi yoktur. Aynı zamanda konuyla ilgili tutarlı cevaplar da bulamıyorum - bazı insanlar performansa karşı herhangi bir darbe olmadığını iddia ederken, bazıları da küçük ama anlamlı bir etkiye sahip olduğunu söylüyor. Hatta php.net üzerinde, arabelleğe almanın performansını birden fazla çıktı işleviyle karşılaştırdığına dair bir yorum olduğunu, bunun doğrulandığını ya da herhangi bir şeyi doğrulamamış olduğunu söyleyebilirim.

Sanırım, arabellek yapıp yapmamanızın, uygulamanızın kullanım amacı ile daha çok ilgisi var. Çıktıyı, göndermeden önce sıkıştırmak istiyorsanız veya çıktının kodunuzda ne zaman ve nerede gerçekleşeceğini tam olarak kontrol etmek istiyorsanız, çok fazla anlam ifade eder. Tamponlama eklemek için çok fazla çaba sarf etmediğinden, bunu denemeniz gerekebilir - gerekiyorsa onu çıkarmak nispeten kolaydır.

+1

Vay canına ilk duyduğum şey ... performansta potansiyel artış. Haklısın, özellikle de gelişim aşamasındayken onunla oynamalıyım. – Aaron

+1

Performansın artırılmasının mantıklı bir nedeni var - php "işlemden kopuyor" değil, bu nedenle işlem çok daha hızlı oluyor çünkü sürekli - aynı veri aktarımı için de geçerli. Tabii ki, bir seferde daha fazla bellek kullanacak gibi görünüyor, ama daha kısa bir süre için tutar. Muhtemelen çok daha fazla gerektiren bir çerçeveleme/kütüphane yüklüyorsanız, bu yüzden "normal" kaynak kodu miktarını çıkardıkça önemli bir fark olmamalı ... :-) –

8

Bunun tersini düşünüyorum. Gerçekten ihtiyacınız olan bir duruma girmediğiniz sürece, çıktıyı tamponlamak kötü bir fikirdir. Örneğin, büyük miktarda çıktı oluşturacak bir komut dosyası.

Çoğu durumda, bilinmeyen bir miktar (ucuz) belleği kurtarmak için bir grup programlayıcı zamanının yakılması, kaynak israfına benzer.

+0

Bir düşünce var ... bunu kullanın, ancak çıktı büyük olduğunda kapatmak için bir yol var. İyi nokta dostum! – Aaron

+1

Çok fazla çıktısı olan bir komut dosyası için "kapatmak için en kolay yol" (bir grup csv verisi veya bir şey gönderen bazı raporlar düşünün) sadece ob_end_flush(); senaryonun en üstünde. Çıkışı() ile floş(); – timdev

4

Çıktı arabelleğini kullanma Son PHP projem için bir ev yapımı MVC arka ucu için hafif bir şablonlama sistemi yapabildim. Onu seviyorum ve çok faydalı buluyorum.

Kaynaklarla ilgili olarak: kaynak yoğun değil. Kullandığı küçüklükten endişe ediyorsanız, PHP iş için doğru araç değildir. PHP'yi seviyorum ama en hafif seçenek değil. Herhangi bir makul modern sunucu olsa da, bu önemli değil.

+0

@Dinah, PHP'nin süper hafif olduğu izlenimi altındaydım ... ama muhtemelen ColdFusion için kullanıyorum. Daha ne hafif? – Aaron

+1

@ Aaron C veya ASM. PHP, C, C++, Java, C# gibi diğer herhangi bir Masaüstü dilinden genellikle daha yavaş olan esnek bir dildir. Ancak, diğer betik dilleri ile karşılaştırıldığında, hala oldukça hızlı olabilir. – phihag

4

İçeriğin başlıklardan önce çıktığı bir durumdaysanız, bir arabelleğe almanız veya sayfanın üstbilgilerden önce bu içeriğin çıkarılmasıyla ilgili hata yapması gerekir. Bu bana paylaşılan kütüphaneler ile başlamıştı ve içeri girebilmek için uygun bir düzeltme yapmamak için yeterli zaman yoktu. Bu bir TODO/FIXME işareti var ve sonra geri dönüp daha sonra uygun hale getirin.

İlgili konular