1

この質問によって、私は PHP の内部の仕組みをもう少しよく理解することを目指しています。

50K のライブラリーがあるとします。このライブラリには、あちこちで使用できる便利な関数が多数含まれています。また、これらの機能がサイトのページの 10% で必要とされている、または使用されていると仮定します。しかし、あなたのホームページには間違いなくそれが必要です。

さて、問題は...このライブラリを指すグローバルインクルードを使用する必要があるかどうかです-全面的に-すべてのページ(ライブラリを必要としない90%を含む)がそれを取得するか、選択的に追加する必要があります必要なページにのみ参照が含まれていますか?

この質問に答える前に、「なぜ」私がこの質問をするのかを指摘させてください...

その参照を含めると、PHP がそれをキャッシュしている可能性があります。したがって、私が心配しているパフォーマンスへの影響は、毎回ではなく、1 回限りの取引である可能性があります。一度邪魔にならないと、その後の負荷は思ったほど悪くないかもしれませんこれはすべて、PHP が展開するスマート キャッシング メカニズムによるものです。私はこれについて深い知識を持っていないため、質問が...

とにかくフロントページにはそのライブラリが必要なので、議論は、そのライブラリをメモリ内で暖かく新鮮に保ち、全面的に提供してみませんか?

この質問に答えるときは、便宜上の観点からではなく、キャッシング/パフォーマンスの観点から厳密にアプローチしてください。これは、議論がプログラミング スタイルやすべきこととすべきでないことに移行することを避けるためです。

ありがとうございました

4

3 に答える 3

1

あなたが言及していると思うキャッシングは、APCのようなものからのオペコードキャッシングでしょうか? これにより、PHP が毎回ソースを解釈する必要がなくなります。使用している include または require ごとに、まだいくつかのヒットがあります。1 つのパラダイムは、手続き型関数を廃止し、 を介してロードされたクラスを使用すること__autoload()です。これにより、大規模なアプリでオンデマンド戦略を簡単に使用できます。また、心配な場合はこれを測定する必要があるというウィルに同意します。時期尚早の最適化は役に立ちません。

于 2012-08-27T20:27:29.207 に答える
1

それを測定してください。

OSもそれをキャッシュするため、最初のヒットの後はキャッシュの利点はおそらくわずかですが、それはI / Oヒットのみを保存します(確かに、これは何もありません)。ただし、処理ヒットは引き続き発生します。50K のコードを「Hello World」ページに含めた場合でも、その 50K のソースをロードして解析するために CPU とメモリのペナルティを支払うことになります。処理のその部分は、ほとんどの場合、キャッシュされません。

一般に、現在の CPU は非常に安価であるため、「節約する価値」がない可能性があります。でもだからこそ、自分で判断できるように、実際に測定する必要があります。

于 2012-08-27T20:21:00.183 に答える
1

パフォーマンスについてご心配いただき、誠にありがとうございます。

手短に言えば、最高のパフォーマンスを得るには、必要なページだけに条件付きでファイルを含めることになるでしょう。

PHP のオペコード キャッシュは、両方のインクルード ファイルをキャッシュ形式で保持するため、他のタイプのキャッシュを使用する場合のように、キャッシュを「ウォーム」に保つことを心配する必要はありません。キャッシュは、メモリ制限 (50K スクリプトの問題ではない) が発生するか、ソース ファイルが更新されるか、手動でキャッシュをクリアするか、サーバーが再起動されるまで残ります。

とはいえ、オペコード (PHP バイトコード) のキャッシュは、PHP 解析プロセスの一部にすぎません。スクリプトが実行されるたびに、バイトコードが処理され、スクリプト内で定義され、必要に応じて使用される関数、クラス、オブジェクト、およびその他のインスタンス変数が構築されます。これはすべて合計されます。

この場合、単純な変更でパフォーマンスが大幅に向上する可能性があります。環境に優しく、すべてのサイクルが重要です:)

于 2012-08-27T21:21:48.407 に答える