2

「純粋な」cssおよびjsファイルを使用する代わりに、これらのスニペットをいくつかのphpファイル内に配置してから、メインページでそれらを要求したいと思います。つまり、私はすでにHTMLDOMに対してこれを本質的に行っています。

これ:

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

またはこれ:

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

それは本当に悪い習慣ですか?

もしそうなら、そのようなアプローチの長所と短所は何ですか?

アップデート:

最近は、テーマシステムでPHP変数をjsに渡す処理を行い、LESSやSASSなどのCSSプリプロセッサをサポートするDrupalを使用しています。この質問で私が提起した両方のユースケースは、最新のフレームワーク/プリプロセッサによって非常にうまく処理されます。

4

4 に答える 4

5

PHPインタープリターを介してJavascriptを配置することは、おそらく良い考えではありません。同様に、CSS

  • これは、サーバー側のコードにクライアント側のコードを記述させるというアンチパターンを促進します。
  • JSとCSSを分離してテストするのが難しくなります(PHPコードでいっぱいになり始めた場合)
  • PHP出力が大きくなります
  • クライアントはページの一部をキャッシュせず、オブジェクト全体のみをキャッシュします

最後の部分を拡張するには-JavascriptとCSSは(HTMLと比較して)大きくなる可能性があります。クライアントブラウザにそれらをキャッシュさせる場合は、それらをダウンロードする必要はありません。

確かに、メインドキュメントに含めることは、オーバーヘッドを削減する個別の要求がないことを意味します(特に、SSLの場合)が、クライアントはファイルをダウンロードする必要があります。通常、クライアントキャッシュから取得する方が高速です。

一方、あなたのコード

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

これはJavascriptコードではなくデータの一部のように見えるため、異なる場合があります。$barを正しくエスケープすることもできます。

于 2010-02-22T07:29:31.060 に答える
2

CSSは問題ではありませんが、これをAJAX経由でHTTP応答として送信したい場合は問題が発生します。

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

AJAXは、セキュリティ上の理由からJavascriptを許可しません。

ベストプラクティスは、Javascriptを別のファイルに保存することです。そうすれば、スクリプトのクライアント側のキャッシュは、トラフィックの観点からも有利になります。

于 2010-02-22T09:17:55.943 に答える
1

これについて必ずしも悪いことはないと思います。一部の人にとっては目障りになるでしょうが、それは大丈夫です。この統合を最小限に抑えるようにしてください。css、javascript、およびhtmlに多くのphpが散在することは本当に望ましくありません。

于 2010-02-22T07:24:34.220 に答える
0

MarkRのスレッド(返信方法がわかりません)に従って、JSにデータを渡そうとしていると仮定します。

両方の長所を活用する1つの方法は、PHPビットにロジックを含めて、特定のCookieをチェックし、特定の値(バージョン/時間など)を持つようにすることです。好き:

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

クライアント側は最初にfooグローバルを探し、それが存在する場合はそれを取得してキャッシュし(たとえば、localStorage)、時間、バージョン、またはfooオブジェクトのプロパティを使用してCookieを設定します。fooが存在しない場合は、キャッシュ(localStorageなど)をチェックします。そこに存在しなかった場合は、AJAX呼び出しを行います。

このようにして、キャッシュミス/初めての訪問者に追加のリクエストを保存し、リピートでキャッシュのメリットを得ることができます。それに夢中になるべきではありませんが、小さな重要なデータオブジェクト(ブートストラップ、ユーザープロファイル、ダッシュボード情報など)には問題ないと思います。

(編集)明確にするために、このアプローチを簡単に達成および保守できるようにするための中心的なアイデアは、PHPがvarfooを出力するときと生成するときの両方で呼び出すことができるJSの$barを生成するサーバー側コードを1か所に保持することですJSON応答。同様に、クライアント側は、var、cache、またはAJAXからのものであるかどうかに関係なく、$barを解析するために1つの関数を使用します。

于 2012-09-21T05:37:20.927 に答える