2

Q1) CMSを設計していますが(そうではありません!)、キャッシングが優先されています。文字通りすべてがキャッシュされます。DB行、DB IDクエリ、構成データ、処理済みデータ、コンパイル済みテンプレート。現在、2層のキャッシュがあります。

1つは、apc、eaccelerator、xcache、memcachedなどのオペコードキャッシュまたはメモリキャッシュです。そこにエントリが見つからない場合は、セカンダリスローキャッシュで検索されます。つまり、phpインクルードです。

オペコードキャッシュは、var_exportされたデータの配列を含むphpファイルに対してrequire_onceを実行するよりも実際に高速ですか?私の開発ボックス(XAMPPの5.3)が前述のプログラムのいずれかをインストールするとエラーをスローし続けるため、私のテストは決定的ではありません。

Q2) CMSには、すべてのファイルをロードするのではなく、オンデマンドで自動ロードされる多数のヘルパークラスがあります。ほとんどの場合、それぞれに前に要件があるため、自動読み込みを実行する必要はありませんが、これは問題ではありません。ページスクリプトには最大50/60のヘルパーファイルを含めることができるため、サイトにプレッシャーがかかると、これが発生するすべてのI/Oのためにサイトが座屈するだろうと感じています。私が提案しようとしていることの必要性を排除する出力キャッシュが配置されていること、そしてまたオペコードキャッシュがこの意味をなさないことを今のところ無視してください。私がやろうとしたのは、スクリプトの実行に必要なすべてのヘルパーファイルを1つのファイルに結合することです。これは達成可能であり、うまく機能しますが、技術的に同じコードが使用されている場合でも、メモリ使用量が大幅に増加するという副作用があります。

これについてどう思いますか?

4

4 に答える 4

1

何をキャッシュしたいのか(そしてその理由)がわからないようです。

「opcode cache」と「require_once」を比較することはできません。オペコード キャッシュは、必要なコードと他のコードをキャッシュします。

于 2012-02-18T14:35:46.927 に答える
1

APC のようなコンパイラ キャッシュを使用すると、ヘルパー ファイルが取得され、オペコードに変換された後にキャッシュされるため、役立つはずです。これは、ファイルがキャッシュされるだけでなく、すでにオペコードに含まれているため、必要になるたびに解析してコンパイルする必要がないことを意味します。

于 2010-03-31T18:11:03.107 に答える
0

まず、ファイルが頻繁にアクセスされると、オペレーティング システムがファイルをメモリにキャッシュすることに注意してください。

また、使用しないでくださいrequire_once。よりも大幅に低速ですrequire。オートローダーを使用していない場合は、使用する必要があります。最新の php アプリケーションに手動でファイルを含める理由はありません (ほとんど例外はありません)。

50 ~ 60 個のヘルパー ファイルはクレイジーです。これらを組み合わせる方法はありませんか?またはのように、それらすべてを関連するヘルパー クラスに入れることはできませんOutputHelperCacheHelper? そうすれば、クラスをインクルードするだけでよく、これもオートローダで処理する必要があります。ファイルごとに1つの関数を配置するようなことをしているように思えます。

requireオペコード キャッシングは、メモリ使用量と実行速度を大幅に削減しますが、ステートメントにどのような影響があるかはわかりません。

于 2010-03-31T18:05:16.480 に答える
-1

私はryeguyに同意します。require_once は、すべてのインクルードをログに記録してチェックする必要があるため、require または include よりも低速です。require/include (クラスの場合) を 1 つだけ実行する場合は、require_once または include_once は必要ありません。

オートローディングは最適化に最適です。必要なときにのみクラスにロードするため。したがって、アプリに 500 個のクラスがあるが、特定のページ/スクリプトを実行するには 15 個しか必要ないとします。次に、それらの 15 のみがロードされます。いいですね。

大きなフレームワークでピークを取る場合。オートローダーの使用に移行したことがわかります。Zend Framework バージョン 1 のこの例のように、最後の瞬間に require_once を使用していました。

require_once 'Zend/Db/Exception.php';
throw new Zend_Db_Exception('Adapter name must be specified in a string');

Zend Framework バージョン 2 では、代わりに自動ローダーを使用する予定です。これは最速であり、コーディングも最も簡単だと思います。

于 2012-02-18T14:00:05.830 に答える