Sorgu veri Yapı html tablolar ...

6 Cevap php

Benim sınırlı deneyim / bilgi ile MySQL sorguları anında HTML tabloları oluşturmak için aşağıdaki yapıyı kullanıyorum:

$c = 0;
$t = count($results);

$table = '<table>';

while ($c < $t) {
   $table .= "<tr><td>$results[0]</td><td>$results[1]</td> (etc etc) </tr>";
   ++$c;
}

$table .= '</table>';

Bu tabii ki, çalışıyor. Komut tabloyu oluşturur iken Ama 300 + satır ile tablolar için pageload bir fark gecikme var. Şu anda maksimum sonuç listesi sadece yaklaşık 1,100 satır olduğunu ve beklemek uzun değil, ama bir bekleme açıkça var.

Benim WHILE'nden daha hızlı olan bir HTML tablosu çıkış için başka yöntemler var mı? (PHP sadece lütfen ...)

6 Cevap

Benim WHILE'nden daha hızlı olan bir HTML tablosu çıkış için başka yöntemler var mı?

Potansiyel olarak evet. PHP çiftleşmiş dildir. Gibi kullanın, onunla mücadele etmeyin! Ve IMO daha okunabilir - Yerli çiftleşmiş zahmetle elle birbirine yapışmasını dizeleri daha hızlı olması muhtemeldir.

<table>
    <?php foreach($results as $result) { ?>
        <tr>
            <td><?php echo htmlspecialchars($result[0]); ?></td>
            <td><?php echo htmlspecialchars($result[1]); ?></td>
        </tr>
    <?php } ?>
</table>

(htmlspecialchars kullanımını unutmayın. Bu işlevi kullanmak istemiyorsanız every time HTML'E düz metin eklemek, kod potansiyel lider, HTML-enjeksiyon kusurları vardır cross-site scripting açıkları. Siz h do echo htmlspecialchars bazı yazarak önlemek için gibi kısa bir isimde bir fonksiyon tanımlayabilirsiniz, ancak must dizeleri HTML-kodlar.)

Ancak: bu güzel ve daha güvenli iken, bu uygulamada önemli ölçüde daha hızlı olması pek mümkün değildir. Istemci tarafı render yavaşlık neredeyse kesinlikle daha neden olacak:

  1. ağ iletim tablo çok veri için hızlandırır. Zaten değil varsa, zlib.output_compression, mod_deflate veya web sunucusu için diğer sıkıştırarak filtre ile dağıtma bu artırabilir.

  2. Büyük tablolar için hızlarını render. Sen <table> elemanı üzerinde CSS stil table-layout: fixed ayarını ve sütunlar için açık width stilleri ile <col> öğeleri ekleyerek bu artırabilir sabit bir genişliğe sahip olmak istiyorum.

First, probably the slowness is a result of the HTML rendering and not the PHP script. Second, it is not very usable to build very large tables it is better to use paging.

Birkaç yolla PHP tarafında script performansını artırabilirsiniz:

  1. ob_start kullanın (); ve ob_get_clean (); - Bu şekilde veri seferde html geçilecek:

    ob_start();
    // your code here
    echo ob_get_clean();
    
  2. dizi kullanmak ve yaylılar için katılın:

    $str = array();
    $str[] = 'add the strings';
    echo implode($str);
    

BR.

Ben denemek istiyorum ilk şey - dizeleri bitiştirmek yok. Ben kullanılan her dilde her zaman sürekli bir araya dizeleri ekleme ve sonunda bir büyük dize tükürerek için bir performans ceza biraz olmuştur.

Eğer yapabilirsen, yerine birden echo ifadeleri kullanmayı deneyin.

Denemek için başka bir - benim kendi deneyimlerine dayanarak, bir for döngü (not for each), bir {[(3) daha hızlıdır eminim }]. Ben yıllar boyunca gözlenen ettik, sadece ne bu yedeklemek için herhangi bir sayı veya kanıt var korkuyorum.

This is browser issue, not PHP. Save your table into HTML and open it - the result would be the same.

Sadece böyle büyük HTML tabloları kaçının. SO sorular liste ile yapıyor gibi, küçük sayfalarına içine masa bölmek için bazı sayfalamayı, ie kullanmak öneririm

Bu doğru yönde bir adım olabilir.

http://eaccelerator.net/

Bir xml dosyası yüklemek. Aşağıda mantıktır.

Bir tablo güncellendi aldığında bilirsin. Bir tablo Yaz kullanıcı xml dosyasından sayfa yükleme verileri yükler file.When bir xml görüntülenmesine sahip olduğu tüm güncellenmiş aldığında. Kullanıcı sayfası yüklenirken zaman sorguları ve iterate çalıştırmak zorunda değilsiniz Bu şekilde döngüler. Daha hızlı bu yoldur. kontrol edin ve eğer çalışırsa geri gönderebilir.

If you feel the above logic is still slow and you have even more data do the following - When the page loads first load 100 tables data. Then fire a ajax request and get the next 100 nodes from xml file and display it. Once this is finished again fire a ajax request get the next 100 nodes from the xml file and show it in the page and so on..