5

Doctrine2を使用したSymfony2とDoctrine2を使用したZendFramework2のベンチマークを行っています。

テストは、ベースラインVsのベアZF2およびSF2HelloWorldで構成されました。同じですが、Doctrine2が単純なオブジェクトをロードします。abを使用し、1秒あたりのリクエスト数と1リクエストあたりの時間のみを測定しました。

ベアフレームワークテスト中、HelloWorldZF2のパフォーマンスはSF2のほぼ2倍でした。

ただし、同じテストを行ったがDoctrine2をミックスに追加すると、結果が逆になりました。SF2+D2はZF2+D2の2倍の速度で動作しました。

社内にはSymfony2とZendFrameworkの両方のスキルがあるので、またはのどちらかを選択できます。RAMの使用量については、常により多くのRAMを取得できるため心配していません。しかし、私たちはパフォーマンスに関心があり、最高のツールを支援する必要があります。

いくつかのアイデア:-S2が何らかのキャッシングを行っていると信じています-ZF2 Doctrine2 ORMモジュールが原因である可能性があります-本番環境で使用するキャッシングのタイプがわかりませんか?APC?Xcache?等

Framework + Doctrine loading an object      
Concurrent:100 / Connections: 1000      
    Resp. T ms  Req. Sec
ZF2        60   16
S2         31   32

Framework + Doctrine loading an object      
Concurrent: 25 / Connections: 150       
    Resp. T ms  Req. Sec
ZF2         57  17
S2          30  32


======================

Framework Bare      
Concurrent: 100 / Connections: 1000     
    Resp. T ms  Req. Sec
ZF2         10.5    94
S2          15.3    65.36       

Framework Bare      
Concurrent: 25 / Connections: 150       
    Resp. T ms  Req. Sec
ZF2         10  98
S2          15.4    64
4

2 に答える 2

7

デフォルトでは、DoctrineORMModule統合にはアクティブなキャッシュの種類はありません。

構成でマッピングのキャッシュを設定する必要があります。

'doctrine' => [
    'driver' => [
        'orm_default' => [
            'class' => 'Doctrine\ORM\Mapping\Driver\DriverChain',
            'drivers' => [],
            'cache' => 'apc',
        ],
    ],
],

デフォルトのキャッシュはですarray。それ以外の場合、アノテーションやその他の種類のマッピングの解析は、リクエストごとに行われます。

私はZF2-Doctrine2統合のメンテナーでもあるので、このトピックについてもっと知りたいと思うかもしれません。表示するテスト環境はありますか?

于 2012-12-01T02:49:52.733 に答える
0

オペコード (APC) と DB リクエスト (たとえば Memcache) の適切なキャッシュがあれば、Synmfony と Zend の違いはピーナッツになると思います。

このようなわずかなパフォーマンスの違いのためにフレームワークを選択しないでください。キャッシングと DB の改善により、フレームワークよりもはるかに多くのパフォーマンスが得られます。

金融リアルタイム アプリを構築している場合を除き、応答時間の 10 ミリ秒または 20 ミリ秒の違いは問題ではありません。Web ページの平均応答時間は通常、数百ミリ秒です。

また、応答時間を「1 秒あたりのリクエスト数」に変換しても意味がありませんが、これは PHP ベンチマークでは一般的です。Apache はリクエストを順番に処理しないため (1 つのリクエストが 100% の CPU を消費するわけではありません)、同時に到着する 5 つのリクエストは、1 つのリクエストの 5 倍未満の時間で処理されます。

Ocramius が言ったように、メタデータ キャッシュを有効にする必要があります。

    $frontendOptions = array(
       'lifetime' => 7200, // seconds
       'automatic_serialization' => true
    );

    $backendOptions = array(
        'cache_dir' => APPLICATION_PATH_CACHE
    );

    $this->cache = Zend_Cache::factory('Core',
                                 'File',//Memcache is better
                                 $frontendOptions,
                                 $backendOptions);

    //ADD a metadata cache for DB, important for perf
    Zend_Db_Table_Abstract::setDefaultMetadataCache($this->cache);
于 2013-02-25T13:29:44.083 に答える