ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHPチュートリアルの読み込みが遅い場合の解決方法
ここ数日間、現在の PHP フレームワークをテストしたところ、フレームワーク層が PHP ファイルをロードするのに時間がかかることがわかりました。最終的に、require_once を使用しないと、全体のロード時間が長くなることがわかりました。 eaccelerator を仮想マシンでテストすると、EA を使用すると 50 ~ 60 ミリ秒に達する可能性がありますが、この消費量は依然として比較的大きいです。
ここ 2 日間でたまたまヒップホップに関する記事を見たので、試してみることにしました。結局、ファイルを変更するには、プロジェクト全体を 1 回コンパイルする必要があることがわかりました。 、そしてそれが生成するプログラムはhttpプロトコルです。今必要なのはfastcgiサーバーだけで十分であり、私が書いたさまざまな拡張機能はまったく使用できないため、このアプローチは基本的に拒否されます。
HipHop は動作しませんが、読み込みが遅いのは require_once が原因なので、スクリプトを書いて現在のすべてのコードを 1 つの大きなファイルにマージするだけです (フレームワークは RPC なので、 1 つのエントリは、index.php です。他のコードはすべてクラスと関数です。直接の呼び出しロジックはないため、マージは将来的には影響しません)。具体的な操作は以下の通りです:
1. すべての require_once 行を削除し、空行に置き換えます
2. ファイル先頭の
3. マージされたファイル内の各ファイルのオフセットを記録し、マージされたファイルの最後にこの情報を出力します。これは、マージの完了後にログに出力される情報はマージされた情報であるため、ログを修正するために使用されます。ファイルと行数はオフライン ログ チェックには役に立たないため、マージされた行数に基づいてログを修正するためにログ出力クラスを変更する必要があります。
終わってから実際に計測してみたところ、eaを使わない場合は基本的にフレームワークの消費量は3~5ms、eaを使う場合は5~6msであることが分かりました。結果の op_array はカテゴリに保存され、zend_compile が呼び出されるたびにこれらのものがコピーされて返されます。このプロセスは zend_compile の実際のコンパイルよりも高速ではなく、多くの追加チェックがあるため、php- を使用することをお勧めします。 CGIを直接。
さらに、テスト中にPHPで非常に奇妙な現象を発見しました
クラス A は B を拡張します
{
}
クラス B{}
このコードは問題ありません
でも
クラス A 拡張 B{}
クラス B 拡張 C{}
クラス C{}
このようなコードは失敗しますwww.2cto.com
注: 後で autoload メソッドをテストしたところ、1 つまたは 2 つのクラスだけが自動的にロードされる場合、特定のリクエストの実行には約 20 ミリ秒かかりますが、1 つのクラスへの入力には約 5 ミリ秒しかかかりません。
無錫雲より抜粋