HTML oluşturma: jQuery, istemci tarafında vs PHP sunucu-tarafı

6 Cevap php

Bu bir tasarım sorunudur. Daha sonra kullanıcı tarafından manipüle edilecek bir HTML tabloya gitmek için gereken veri var. Temelde kullanıcı tablo satırları öğeleri seçmek mümkün olacak.

İki seçeneğiniz var - her iki durumda da ben veri almak için AJAX kullanarak ediyorum:

  1. Sunucu tarafında PHP kullanarak HTML kodu oluşturmak, bu HTML olarak istemciye gönderir. Kullanıcı daha sonra JavaScript (jQuery, esas olarak) kullanarak tablo yönetir.

  2. Daha sonra HTML oluşturmak hem jQuery kullanmak ve daha sonra kullanıcı tarafından manipüle, JSON kullanarak istemciye ham veri gönderme.

From a design/ease of coding/beauty point of view, which approach is recommended? Thanks for any insight.

6 Cevap

Neden PHP HTML oluşturmak için:

  • JavaScript içeriği, davranış değil tanımlamak gerekir.
  • JavaScript oluşturma fazla biçimlendirme (multi-line dizeleri PHP kadar kolay değildir) gerektirir.
  • Bu HTML çeşitli yerlerde (PHP & JS) oluşturulur ise korumak zordur.
  • Eğer HTML oluşturmak için jQuery DOM işleme işlevlerini kullanabilirsiniz, ancak uzun vadede bacak kendinizi çekiyoruz.
  • Bu (hesaplamalı anlamda) tarayıcıda daha sunucuda HTML oluşturmak için hızlı.
  • Döngü PHP ile daha kolay - Bu tablo biçimlendirme oluşturmak kolaydır.
  • Kullanıcı JavaScript sayfa yük çıktı eğer biçimlendirme devre dışı bıraktıysa eğer combatibility çeşit korumak.

Neden jQuery HTML oluşturmak için:

  • Bazı bant genişliği kaydetmek istiyorum.
  • Bağlama olaylar basit olabilir.

Yani, ben PHP HTML üreten, ilk seçenek yanayım.


Visual comparison of the two methods, creating a simple table.  

Option 1, using PHP:

// PHP

$html = '<table>';    
foreach($data as $row) {
    $html .= '<tr>';
    $html .= '<td><a href="#" class="button">Click!</a></td>';
    $html .= '<td>'.$row['id'].'</td>';
    $html .= '<td>'.$row['name'].'</td>';
    $html .= '</tr>';
}
$html .= '</table>'; 
echo $html;
?>

// jQuery

$('#container').load('handler.php', function() {
    $('#container a.button').click(function() {
        // Do something
    });
});

 

Option 2, using jQuery:

// PHP

echo json_encode($data);

// jQuery

$.ajax({
    url: 'handler.php',
    dataType: 'json',
    success: function(data) {
        var table = $('<table />');

        var len = data.length;
        for(var i = 0; i < len; i++) {
            var row = $('<tr />');
            var a = $('<a />').attr('href', '#').addClass('button');

            row.append($('<td />').append(a));
            row.append($('<td />').html(data[i].id);
            row.append($('<td />').html(data[i].name);

            table.append(row);
        }

        table.find('.button').click(function() {
            // Do something
        });

        $('#container').html(table);
    }
});

Görüş kodlama / güzellik noktasının bir tasarım / kolaylığı, ben kesinlikle PHP yaklaşımı ile gitmek söyleyebilirim.

Benzer bir tartışma, bu parçacığı belirtilmeyen bazı iyi noktaları Why is it a bad practice to return generated HTML instead of JSON? Or is it? gerçekleşti.

Oluşturulan HTML sayfası HTML aynı ise daha az kod çoğaltılması ile aynı HTML oluşturmak için mevcut çiftleşmiş kodunuzu kaldıraç mümkün olabilir.

Daha kompakt olma eğilimindedir ve bu düğümleri oluşturmak ve gitmek gibi onlara olay işleyicileri gibi HTML olmayan özellikleri atamak için izin verir gibi Aksi takdirde, JSON genellikle daha sık görülür.

Eğer bir HTML dizesi oluşturarak yeni düğümleri oluşturmak, ancak, herhangi bir <, & veya tırnak doğru kaçtı sağlamak için HTML kodlaması kullanmak zorunda. htmlspecialchars PHP gibi JavaScript bunu yapmak için yerleşik bir işlevi var; tek yazmak oldukça önemsiz, ama kimse rahatsız görünüyor. Sonuçta biz sunucu tarafı XSS ​​şeyler sabitleme bazı ilerlemeler yapmaya başlamışlardı gibi, istemci tarafı cross-site betik güvenlik açıklarıyla dolu jQuery uygulamalar olduğunu.

Aynı şekilde zorlayıcı argümanlar muhtemelen ikisi için yapılmış olabilir, ama 2 ile giderseniz muhtemelen boru aşağı daha az veri gönderme olacak.

Ben gerçekten istemci tarafında birlikte bu gibi şeyler koyarak fikir gibi. Ben (herkes bu yaklaşım seviyor gerçi), istemci tarafı görünümü şablonlarını çünkü JavaScriptMVC Bunun için iyi bir Framework (2.0 Sürüm jQuery dayalı) olarak bulundu.

Yalnız istemci tarafı görüşlerini oluşturmak için oldukça karmaşık buluyorum jQuery ile olsa (ki bunun için ne demek olduğunu değil çünkü), böylece aynı derecede dinamik uygulama tutabilir eğer PHP sunucu tarafında her şeyi birlikte koyarak daha iyi olabilir bu şekilde.

Her iki seçenek de artı ve eksi puan var, ancak andras içeriği aranabilir / endeksli gerekip gerekmediğini belirten iyi bir nokta yapar. Ben mimarlık üretmek daha kolay olacağına inanıyorum ben şahsen thhough seçeneği 1 için tercih olacaktır.