oldukça js ve css link daha php dosyalarını gerektiren kötü bir uygulamadır?

4 Cevap php

Ben bir kaç php dosyaları içinde bu gibi parçacıkları koymak ve sonra benim ana sayfa bunları gerektirir, bunun yerine "saf" css ve js dosyalarını kullanarak istiyorum. Zaten benim HTML DOM için aslında bunu demek istedim.

Bu:

<script type='text/javascript'>
var foo = <?php echo $bar; ?>;
</script>

or Bu:

<style type='text/css'>
.foo{
background-image:url('<?php echo $bar; ?>image.png');
}
</style>

Bu gerçekten kötü bir uygulamadır?

ve, eğer, böyle bir yaklaşımın artılarını ve eksileri nelerdir?

Update:

Bu gün ben sadece tema sisteminde js PHP değişkenleri geçen kolları ve AZ ve SASS gibi CSS preprocessors destekleyen Drupal kullanıyorum. Bu soru büyüttüm kullanım durumları hem modern çerçeveler / önişlemcilere göre oldukça iyi işlenir.

4 Cevap

CSS bir sorun olmamasına rağmen AJAX ile bir HTTP yanıt olarak göndermek istiyorsa, sorun olurdu.

<script type='text/javascript'>
var foo = <?php echo $bar; ?>;
</script>

AJAX güvenlik nedenleriyle Javascript izin vermez.

En iyi uygulama, ayrı bir dosyaya Javascript tutmaktır. Senaryonun bu şekilde istemci tarafında önbelleğe alma de trafik açısından sizin yararınıza olacaktır.

PHP tercüman aracılığıyla Javascript koyarak muhtemelen iyi bir fikir değildir. Aynı şekilde, CSS

  • Bu istemci tarafında kod yazma sunucu tarafı kod sahip antipattern teşvik
  • (Onlar PHP kod tam olarak başlamak eğer) zor izolasyon JS ve CSS test yapar
  • Bu PHP çıktı büyük yapar
  • Müşteriler, bir sayfanın yalnızca bir bütün nesne bölümünü önbelleğe olmaz

Son bölümü genişletmek için - Javascript ve CSS (HTML kıyasla) büyük alabilirsiniz. Eğer istemci tarayıcı önbelleğini onları varsa, onları indirmenize gerek yoktur.

Ana belgede yükü (özellikle SSL ile) azaltır ayrı bir istek var demektir, ama müşteri hala dosyayı indirmek gerekiyor dahil, doğru. Istemci önbellekten gelen olması genellikle daha hızlıdır.

Diğer taraftan, kod

<script type='text/javascript'>
var foo = <?php echo $bar; ?>;
</script>

Bu veriler, Javascript değil bir kod parçası, bu yüzden değişebilir gibi görünüyor. Ayrıca doğru $ bar kaçmak isteyebilirsiniz.

Ben bu konuda ille de kötü bir şey olduğunu sanmıyorum. Bazı insanlar için bir göz yara olacak, ama bu sorun değil. Sadece bir minimumda bu entegrasyonu tutmak için emin olmak, gerçekten css, javascript ve html serpiştirilmiş php bir şey istemiyorum.

Sadece JS veri geçmek için çalışıyoruz varsayarak, MarkR adlı konu (buna cevap nasıl göremiyorum) aşağıdaki gibidir:

Eğer her iki dünyanın en iyi sahip olabilir bir yolu belli bir değere (örneğin sürüm / saat) için belli bir çerez için ve bunun için denetler böylece PHP bit bazı mantık dahil olacaktır. Gibi:

if (!isset($_COOKIE['warm']) && $_COOKIE['warm'] !== 'today') {
    echo '<script type=\'text/javascript\'>';
        echo "var foo = $bar;";
    echo '</script>';
}

Istemci tarafında ilk global foo bakmak istiyorsunuz, ve o var eğer o alıp önbelleğe (örn. localStorage) ve foo nesneden zaman veya sürüm ya da özellik ile bir cookie olacaktır. Foo mevcut değilse, o zaman önbelleği (örneğin localStorage) kontrol olur. Orada mevcut değilse, o zaman bunun için bir AJAX çağrısı yapmak istiyorum.

Bir önbellek özledim / ilk kez ziyaretçi üzerinde ekstra isteği kaydetmek ve tekrarlar üzerinde bir önbelleğe alma parası kazanmak Bu şekilde. Onunla deliriyorum, ama küçük bir önemli veri nesneleri (önyükleme, kullanıcı profili, pano bilgi, vb) için iyi olmalı düşünmemeli.

(Edit) Açık olmak gerekirse, kolayca ulaşılabilir ve sürdürülebilir bu yaklaşım tutmak için merkezi fikri PHP var foo dışarı yazınca hem denebilecek bir yerde JS $ çubuğu oluşturur sunucu tarafı kod tutmak ve oluşturulurken JSON yanıt. Aynı şekilde, istemci tarafı var, önbellek, ya da AJAX geldi olsun, $ bar ayrıştırma için tek fonksiyon kullanmak istiyorsunuz.