-2

注:この質問は少し長いです

私は次のような構造を持つPHPベースのシステムを持ってService-Dao-Modelいます:

Service Factory > Foo Service > Core Service > Abstract Service > Service Interface
Dao Factory > Foo Dao > Core Dao > Abstract Dao > Dao
Foo > Core Model > Abstract Model

少しずつ説明させてください。最初にAbstract&Interfaceクラスで抽象関数を定義してコードを一元化し、次にCore Service、Core Dao、CoreModelでデフォルトの動作を実装しようとしています。

次に、カスタム関数をFoo Service、Foo Dao、FooModelで記述します。最後に、ServiceFactoryとDaoFactoryは、ファクトリパターンでオブジェクトを作成する責任があります。

その他の情報:すべてのクラスには、にlog4phpオブジェクトがアタッチされています__construct()

現在の開発状況では、初期化フェーズで約65のPHPクラスをロードしました。タイマー(タイミングmicrotime(true))を追加すると、PHPがクラスのロードに最も時間がかかる(0.02119秒)ことがわかりました。次はDB結果セットをオブジェクト値(0.00608秒)に変換し、最後はDBクエリ時間(0.00223秒)です。クラスの読み込み時間がDBクエリ時間の10倍であるとは信じられません!

質問:クラスのロード時にPHPの初期化時間を改善するにはどうすればよいですか?

バージョン:PHP 5.2.16、MySQLiPHP拡張機能を介してMySQL5.1localhostサーバーに接続します

UPDATE eAcceleratorは共有ホスティングにプリインストールされています!Zend Engine v2.2.0 with eAccelerator v0.9.6.1

psコードは必要に応じて共有できます。

4

1 に答える 1

0

クラスの読み込み時間が非常に遅い場合は、何らかの自動読み込みを使用していると思います。SymfonyのAPCクラスローダーに似たアプローチを考えてみましょう。

http://symfony.com/doc/current/components/class_loader.html https://github.com/symfony/ClassLoader

その背後にある考え方は、APCにクラスパスをキャッシュするため、自動ロードのインクルードパスがすべてのリクエストでトラバースされないようにすることです。とにかく、実際のphpの読み込みがDBよりも遅い場合、さらにはORMレイヤーよりも遅い場合は、アーキテクチャ上の問題があると思います...私の経験から、読み込み時間は通常逆です。PHPのどの部分が特に遅いか。使用できる別のアプローチもsymfonyのアイデアです。ここでは、デプロイ時にすべてのクラスを1つのファイルにマージし、ファイルシステムコールを減らすデプロイスクリプトがありますが、それがあなたのケースで実用的であるかどうかはわかりません。速度の向上。基本的に、ファイルシステムを操作するたびに非常に遅くなるので、できるだけ避けてください。

于 2012-12-10T04:49:54.757 に答える