[s2container-php5:137] Re: Daoクラスが大量にあった場合にパフォーマンスが悪いのです

KURODA Eishi [E-MAIL ADDRESS DELETED]
2008年 7月 14日 (月) 20:03:23 JST


こんにちは、黒田です。

私もパフォーマンスについては苦労しています。
とりあえず、S2DaoでBeanMetaDataをリクエスト毎に毎回作るのに時間が掛かっていたので、
個人的にBeanMetaDataをキャッシュするような機構を作り、最初の一回だけ生成するようにしたのですが
それで少し改善しました。その時の詳細は下記です。
http://d.hatena.ne.jp/e-kuroda/20080311
で、それをtrunkに反映させようと思っていたのですが、そのままになってます・・・。
ちなみにその後、APCを使うようしたりと更に高速化してます。

しかし、S2Dao.PHP5の方もさることながら、
根本的には、コンテナに大量のコンポーネントを詰め込むと、
リクエストの度にS2Containerのコンテナ組み立てに物凄く時間が掛かるんですよね。
これがどうにも出来ず、いつも必要最小限のコンポーネントだけを使うように苦労しています。

S2Container.PHP5は基本的にJavaからのポーティングで、PHP用の考慮はそんなにされていないと思われるので、
それだとパフォーマンス的にかなり厳しいのかなと思います。
コンテナへの登録/取得機能がシンプルに削ぎ落とされた高速動作モードがあったりすると良いなあ、
などと思っているのですが。
ちゃんとしたことは分からないですが、生成されたコンテナを見ていると、
取得を柔軟にするために、登録時に殆ど無駄なキーで大量に登録しているような感じもするので、
機能を削ればもっと速くなりそうな気がします。
私は、正規表現をstr〜系の関数に置き換えたり、
沢山あるfor文をforeachに置き換えたり(少なくともPHP5.1以降だとforよりforeachの方が結構速いので)と、
小手先の変更を施して使っていますが、やはり遅いです・・・。
上手くキャッシュ使えないかとも考えたのですが、難しそうでした。

黒田

On Mon, 14 Jul 2008 17:23:29 +0900
"masami sakamaki" <[E-MAIL ADDRESS DELETED]> wrote:

> お世話になります。masasと申します。
> 
> Daoクラスが大量になった場合にパフォーマンスが悪く困っております。
> ご存じの方がいれば教えていただければと思い、メールさせていただき
> ました。
> 
> Daoクラスが大量(356個)にありすべてをDiconファイルに記述します。
> この状態で
> $container = S2ContainerFactory::create('app.dicon');
> とすると1.5秒前後かかります。これは仕方のないこのなのでしょうか?
> Daoクラスを100個にした場合でも0.7秒前後かかっております。
> 
> 何か回避する方法などがありましたら、教えていただければ幸いです。
> 
> よろしくお願いいたします。
> 
> 
> 
> 
> _______________________________________________
> S2Container-PHP5 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/s2container-php5




S2Container-PHP5 メーリングリストの案内