15

なぜ人々 .php は自分 CSS JavaScript ファイルのためにファイルを作らないのですか?

ファイルに追加すると、ブラウザで読み取り可能になります。プロパティをに<?php header("Content-type: text/javascript; charset: UTF-8"); ?>設定することで、cssファイルに対して同じことを行うことができます。Content-typetext/css

PHPのすべての変数とメソッドを他の言語で使用できます。例として、cssのユーザー設定に応じてテーマのメインカラーを変更したり、JavaScriptがドキュメントの読み込み時に使用できるデータをプリロードしたりできます。

このテクニックを使用することの悪い面はありますか?

4

8 に答える 8

18

人々はあなたが思っているよりも頻繁にそれをします。通常、この手法はURL書き換えと組み合わせて使用​​されるため、表示されません。つまり、ブラウザは、静的に提供される.cssファイルとPHPスクリプトによって生成される動的なスタイルシートの違いを認識できません。

ただし、それを行わない理由はいくつかあります。

  • デフォルトの構成では、ApacheはPHPスクリプト出力を「いつでも変更される可能性がある」ものとして扱い、キャッシュを防ぐために適切なヘッダーを設定します(そうでない場合、動的コンテンツは実際には機能しません)。ただし、これは、ブラウザがCSSとjavascriptをキャッシュしないことを意味します。これは悪いことです。これらは、ページが読み込まれるたびにネットワーク経由で再読み込みされます。1秒間に数百ページの読み込みがある場合、これは絶対に重要です。そうでない場合でも、ページの応答性は大幅に低下します。
  • CSSとJavascriptは、一度デプロイされると、変更されることはめったになく、動的にする理由は非常にまれです。
  • PHPスクリプトの実行は(インタプリタを起動するだけの場合でも)静的ファイルを提供するよりもコストがかかるため、どうしても必要な場合を除いて、実行しないでください。
  • 出力するJavascriptが正しく安全であることを確認するのはかなり難しいです。Javascriptの動的な値をエスケープすることは、思ったほど簡単ではありません。これらの値がユーザー提供である場合は、問題が発生します。

そして、セットアップが簡単ないくつかの選択肢があります。

  • いくつかのスタイルシートを作成し、適切なスタイルシートを動的に選択します。
  • クラス名に基づいてスタイルシートルールを作成し、それらをHTMLで動的に設定します。
  • javascriptの場合、静的スクリプトを含める前に、親ドキュメント内で動的部分を定義します。最も一般的なシナリオは、ドキュメント内にいくつかのグローバル変数を設定し、静的スクリプトでそれらを参照することです。
  • ビルド/デプロイメントプロセスの一部として、動的スクリプトを静的ファイルにコンパイルします。このようにして、CSS内でPHPの快適さを得ることができますが、それでも静的ファイルを提供することができます。

PHPを使用してCSSを動的に生成する場合は、次のようにします。

  • キャッシュヘッダーをオーバーライドして、ブラウザとプロキシがそれらをキャッシュできるようにします。キャッシュの有効期限を「never」に設定し、偽のクエリ文字列パラメータ(eg <link rel="stylesheet" type="text/css" href="http://example.com/stylesheet.css?dummy=121748283923">)を追加して、スクリプトが変更されるたびに変更することもできます。ブラウザはこれを別のURLとして解釈し、キャッシュされたバージョンをスキップします。
  • Content-TypeスクリプトのURLの拡張子が.cssになるようにURL書き換えを設定します。一部のブラウザ(IE)は、ヘッダーが正しいにもかかわらず、拡張子が一致しない状況でMIMEタイプが間違っていることで有名です。
于 2012-08-07T20:15:46.860 に答える
10

PHPでJS/CSSスクリプトを生成し、それらをファイルにキャッシュすることをお勧めします。

PHPを使用してすべてのCSS/JSファイルを提供する場合は、PHPをさらに呼び出す必要があります。これにより、静的ファイルを提供するときに不要なオーバーヘッド(CPUとメモリ)が増加します。Webサーバー(Apache / nginx / lighttpd / iisなど)に仕事を任せて、PHPを必要とせずにそれらのファイルを提供する方がよいでしょう。

于 2012-08-07T19:54:53.390 に答える
5

PHPエンジンを実行しても、時間とCPUのどちらでもコストはゼロではありません。また、CSSファイルとJavaScriptファイルは通常ほとんど変更されないため、エンジンを介して実行してまったく何もしないことは無意味です。代わりに、必要に応じてブラウザにキャッシュさせることをお勧めします。

于 2012-08-07T19:54:31.590 に答える
2

これが私が使用した1つの方法です:HTMLページにはへの参照が含まれています/path/12345.stylesheet.css。そのファイルは存在しません。したがって.htaccess、リクエストをにルーティングし/path/index.phpます。そのファイルは、(a)データベース要求を実行し、(b)CSSを作成し、(c)次回のためにファイルを保存し、(d)ブラウザーにCSSを提供します。つまり、次にリクエストがあったときに/path/12345.stylesheet.css、Apacheによって通常どおり提供される物理静的ファイルが実際に存在します。

ああ、スタイルルールが編集されるたびに、(a)静的ファイルが削除され、(b)参照IDが変更されるため、HTMLページには将来的に/path/10995.stylesheet.css、などへの参照が含まれるようになります。(実際、私はUNIXタイムスタンプを使用しています。)

同様の方法で画像のサムネイルを作成します。最初のリクエストでファイルを作成し、今後のリクエストのために静的ファイルを同じ場所に保存します。javascriptで同じことをする機会は一度もありませんが、そうしない根本的な理由はありません。

これは、PHPでのヘッダーのキャッシュについて心配する必要がないことも意味します。各CSSファイル(または画像のサムネイル)の最初の呼び出しのみがPHPを通過し、それがキャッシュ防止ヘッダーで提供される場合、それは大きな問題ではありません。

于 2012-08-07T22:30:35.637 に答える
1

それは悪い考えではなく、それほど珍しいことではありませんが、欠点があります。キャッシュは重要な考慮事項です。コンテンツが同じ場合はブラウザにキャッシュさせる必要がありますが、コンテンツが異なる場合(他の誰かがログインした場合など)に更新する必要があります。クエリ文字列を使用すると、一部のブラウザのキャッシュがすぐに停止するため、HTTPヘッダーだけでなくいくつかの書き換えルールが必要になります。

目立った時間がかかる処理、または何かのロックが必要な処理(たとえば、session_start)は、アセットを待機している間、ブラウザーを保持します。

最後に、そして非常に重要なことに、言語を混合するとコードの編集が難しくなる可能性があります。構文の強調表示と構造ブラウザーは対応できない可能性があり、構文が重複すると、複数の円記号のエスケープなどの醜いものにつながる可能性があります。

javascriptでは、一部のPHPデータを(JSON)変数に変換してから、静的JSコードを実行すると便利な場合があります。また、ブラウザが一度にすべてのJSファイルをダウンロードする前に、複数のJSファイルを連結することにはパフォーマンス上の利点があります。

CSSには、目的により適したLessなどの特定の言語があります。LessPHP(http://leafo.net/lessphp/)を使用すると、PHPスクリプトからの変数とコールバックを使用してLessテンプレートを簡単に初期化できます。

于 2012-08-07T20:17:23.577 に答える
1

場合によっては、JavaScriptまたはスタイルを動的に作成する必要があります。

問題は、Webサーバーが静的コンテンツを提供するように最適化されていることです。phpを使用してコンテンツを動的に生成することは、リクエストごとに生成する必要があるため、大きな打撃となる可能性があります。

于 2012-08-07T19:54:43.920 に答える
0

PHPは、動的コンテンツを生成するためのプロセッサとしてよく使用されます。ページを処理してから送信するには時間がかかります。効率(サーバーとプログラミングに費やす時間の両方)のために、動的JSまたはCSSファイルは、静的ファイルが意図した目標を正常に達成するための可能な方法がない場合にのみ作成されます。

どうしても動的なデータベース駆動型プロセッサの支援が必要な場合にのみ、これを行うことをお勧めします。

于 2012-08-07T19:53:46.410 に答える
0

悪い面:たくさんありますが、ほんの数例を挙げると:

  • 非常に遅くなります。リクエストごとにカスタムスタイルシートを作成すると、サーバーに大きな負荷がかかりますが、必要なものではありません。

  • デザイナーはCSSファイルを作成しますが、プログラマーは作成しないでください(場合によっては許可されるべきではありません)。それは彼らの仕事/彼らの専門ではありません。

  • JSとPHPを混在させることは、私見ですが、最大の間違いの1つです。jQueryは非常に人気のあるlibであり、$記号を使用すると、バグや構文エラーの大きな原因になる可能性があります。それに加えて、JSは他のプログラミング言語とはまったく異なる言語です。それを最大限に活用する方法を知っている人はほとんどいません。PHP開発者に膨大なJSスクリプトを書かせると、涙が出ることがよくあります。
    JavaScriptは、機能的なOO(プロトタイプ)言語です。これらの重大な違いを完全に理解していない人は、結果として悪いコードを書きます。ひどいJSコードをたくさん書いたからです。

  • 実際、なぜこれをしたいのですか?PHPを使用すると、ページの生成中にすべての要素のクラスを変更できます。クラスのcssファイルに対応するスタイルルールがあり、さまざまなファイルを送信したり、ヘッダーやすべての頭痛の種をいじったりすることなく、必要に応じて色が変更されることを確認してください。それはこの練習に付属しています

これを行うべきではない理由をもっと知りたい場合は、少なくともさらに数十を考えることができます。
つまり、これを行うことを考える理由は1つだけです。これにより、クライアント側のキャッシュされたスクリプトによって引き起こされる問題が少なくなります。そもそも問題になるわけではありませんが、ちょっと...

于 2012-08-07T20:02:27.983 に答える