4

Zend Framework と Doctrine に基づく私のアプリケーションには、リクエストごとに 300 個を超えるファイルが含まれています。ほとんど同じファイルです。

これは非常に大きなオーバーヘッドです。(および Memcache)によって部分的に解決されZend_Cacheますが、すべてのページがキャッシュされるわけではありません。

  • この数を減らすには?スピードアップするには?

Doctrine には必要なファイルをコンパイルするオプションがあり、これは実稼働サーバーとアプリの最終バージョンにとって非常に合理的と思われます。

私の計画は、他のライブラリもコンパイルすることです (既にすべてrequire_onceの を取り除いています)。

  • このタスクのためのツールはありますか? たぶん、一部のキャッシュドライバーは自動的にそれを行いますか? それらを設定する方法は?
4

2 に答える 2

2

通常、php ファイル インクルードのオーバーヘッドは、pecl で利用可能な拡張機能であるAPCなどのオペコード キャッシュで対処できます。オペコード キャッシュは通常、コンパイルされたバイトコードをキャッシュすることで機能するため、ソースの読み取りと解析のオーバーヘッドは最初の要求でのみ発生します。これにより、php ファイルでソースをコンパイルする必要性やメリットが大幅になくなります。

于 2010-08-15T19:56:17.757 に答える
1

最適なオプションは、APC または Zend_Accelerator を使用することです。それでも、クラスを 1 つのファイルにマージするこれらの「コンパイル」スクリプトを作成することはできます。これにより、必要な IO が最小限に抑えられます。残念ながら、適切なファイルを参照するように、オートロード プロセスも書き直す必要があります。通常、共通のクラスをまとめることができます (Zend_Form + Elements + Decorators、頻繁に使用されるバリデータ、Request + Response + Router + Controller、Zend_Db + adapters + Zend_Db_Select など)。主に、各リクエストで常に使用されるクラスは、簡単に要約して手動で 1 つのファイルに含めることができます。最善の方法は、デバッグ呼び出しを追加して、含まれているすべてのファイル ( http://www.php.net/get_included_files ) を DB に保存してから、次のようにすることです。

SELECT * FROM files GROUP BY filename WHERE COUNT(filename) = $numOfRequests

結果のすべてのファイルを安全に単一のファイルにマージして、ブートストラップの前に含めることができます:)

于 2010-08-15T21:05:25.473 に答える