3

Yii Framework での CGridView のパフォーマンスに興味があります。Yiiで簡単なアプリを作りました。モデルの管理ページで、すべてのレコードを単純にリストし、ページネーション (30/ページ) とカスタム ソートを使用して、これまでのところうまく機能しています。

しかし、CGridView をレンダリングするのに 4 ~ 5 秒かかることがわかりました。30 レコードのページを 4 ~ 5 秒でレンダリングするのは正常ですか? なんか遅い気がする!列が 8 つしかない複雑なテーブルではないためです。また、生成された SQL クエリは高速に実行されます (2 ~ 3 ミリ秒で実行されます) が、いくつかの関係が含まれています。

最適化についていろいろとググったところ、次の公式ドキュメントが見つかりました: http://www.yiiframework.com/doc/guide/1.1/en/topics.performance

CGridView の問題に焦点を当て、キャッシュを使用しようとしましたが、非常に優れたヘルパーであるCOutputCacheを見つけました。

私の実践では、コントローラーの filter() 関数に COutputCache を追加します。

public function filters()
{
    return array(
        'accessControl', // perform access control for CRUD operations
        array(  'COutputCache+admin,_lists',   'duration' => 600,'varyByParam'=>array('sort','page'),     ),
    );
}

通常のビュー ページと部分ページを追加し、有効期限を秒単位で設定し、キャッシュの変更を検出するパラメータを Yii に伝えることができます。

これは、並べ替えやページングなど、ページに再度アクセスするときに非常に役立ちます。ページのレンダリング時間を40 ~ 50 ミリ秒に短縮できます。これはすばらしいことです。

しかし、初回のレンダリングを高速化する良い方法が見つかりませんでした。良い提案はありますか?

4

3 に答える 3

1

私の場合、パフォーマンスが低い理由は、データ列に html 型を使用することです。

于 2014-10-22T23:59:33.153 に答える
0

まず、ウェブページにログを表示して、何が起こっているかを確認してください。

第二に、いいえ、それは正常ではありません。¿あなたはどのサーバーにいますか? CActiveRecord リレーションを使用していますか? 幾つか?おそらく答えは、 CDbCriteria.with を使用して、関連するテーブルを遅延ロードしないことです。

于 2013-01-10T22:20:24.203 に答える
0

ソートを確認する必要があります。ソート フィールドがインデックスでない場合は常に、Yii によって構築されたクエリから遅い結果が得られます。

于 2014-11-11T17:38:37.537 に答える