PHP Templating Döngü Sonuçları

3 Cevap php

Yani burada iş biz sistemi çiftleşmiş yetiştirilen bir ev var, bu hafif ve bugüne kadar bizim için harika çalışıyor.

Biz vuruyorlar duvar biz bir şablon üzerinde döngü edebilmek istiyor. Kullanım durumda arama sonuçları gibi bir şeydir. Biz bu yapabileceğini yollar düşünmeye çalışıyoruz. Biz şu anda üç yol geldim. Ilk eski güzel döngü içinde html depolamak ve daha sonra üzerinde döngü ve html içine değişkenleri koymak için concat kullanıyor. Biz düşündük ikinci yolu tekrar tekrar bir dosyayı dahil edildi. Ve üçüncü yol, bir kez include dosyası, çıkışını yakalamak için çıktı buffereing kullanmak buna metin echo "eklemek, ve sonra bunun üzerine eval kullanarak oldu. (Patronum bize bunu yapmanın yaratıcı yollar ile gelmek istedim).

Bu bize tamamen mantığı html ayrı sağlar gibi Eh, ben, defalarca yöntemini içerir tercih ederim. Eval yöntemi de bu yok, ama biraz daha hackish görünüyor. Peki biz bu konuda biraz zaman testler yaptım ve sağ döngü (yöntem bir) içindeki html sahip hızlı olduğunu ve eval yöntemi izledi, ve birden çok kez dahil sonuncu geldi bulundu. Dahil aslında eval yöntemi yaklaşık 5-6 kat daha yavaş oldu. (Biz / dosyayı dahil Dosyaya 1000 kez değerlendirilen ve 100 kez ve sonuç almak için onları ortalama yaptım).

Içeren birden hızlandırmak için herhangi bir yolu var mı? (Biz php eklerim her zaman yeniden dosya sistemini vurmak olduğunu görünür.)

Ya da herkes bu tür bir şey yerine getirmeye bir yol var mı?

3 Cevap

Lütfen testleri gösterdiği gibi, komut optimize etmek için en iyi yolu komut içine zaten dahil HTML kodu üzerinde döngüsü etmektir.

Etki süresi geliyor:

  • eval () kodu doğrulamak için PHP çözümleyici çağırır
  • include () disk erişimi kullanır

Her değiştirilmemiş bir dosyanın disk okuma () sonra düşürdü performans yer alıyor. Bu disk erişimini optimize sonra eval () seçenek olacaktır:

  • include (): intial-ayrıştırıcı + [disk erişim + çözümleyici] * N döngüler;
  • eval (): İlk-ayrıştırıcı + disk erişim + çözümleyici * N döngüler
  • inline HTML: İlk-ayrıştırıcı

Temiz kodunu tutmak için, global değişkenler, veya tek bir nesne veya HTML içine görüntülenecek gerekli tüm verileri, gibi bir şey içeren Array değişkeni kullanın, HTML içeren fonksiyonları oluşturabilirsiniz

function html_comment ($comment)
{
    //global $comment;

    ?>
    <div class="comment">
    	<div class="author"><?php echo $comment['author'] ?></div>
    	<div class="date"><?php echo $comment['date'] ?></div>
    	<div class="date"><?php echo $comment['content'] ?></div>
    </div>
    <?php
}

...
foreach ($comments as $comment)
    html_comment($comment);

Son sayfa önbelleğe. Ne demek bütün "bloklar" (döngüler, bunları aramak istediğiniz ne olursa olsun adet) almak ve önbellek tek bir PHP dosyası içine katılmak olduğunu ve sadece o andan itibaren sayılabilir. Bu şekilde, sadece, diyelim ki, 25 kez istek başına bir kez dosya sistemini isabet yerine ediyoruz.

Eski bir soru, biliyorum.

Her neyse, ben şablon içinde bir basit veya foreach döngü sahip öneririm. Bunda yanlış bir şey yok. (- Aptal bir örnek bu da daha kolay satırlar çıktı sütunlarda çıktı, diyelim ki, çıkışını değiştirmek için yapar gibi) Öncelikle, bazı sunum kod döngü beri gözlerimde hala sunum mantıktır. İkincisi, PHP hala bir çiftleşmiş dildir. Bir şablonun içinde bazı basit kontrol yapıları kullanarak yanlış bir şey yoktur. Smartys gibi sistemleri kullanarak sadece (öğrenmek için başka bir sözdizimi ile) soyutlama başka bir katman ekleyerek, yani PHP gücü çok şey var (ve böylece yükü oldukça bir sürü oluşturur). (A sidenote üzerine: Benim için o inner-platform effect, bir anti-pattern) benim gözünde saçma.