1

私は非常に大きなAppControllerを持っています。ほぼ75の機能と130キロバイト。それは私のシステムを遅くするようです。したがって、これらの関数を別のファイル内に配置し、他のコントローラーが必要とする場合はそのファイルを含める必要があります。

オプションは、新しいコントローラーまたは新しいコンポーネントを作成することです。私は選択をしようとしています。長所と短所は何でしょうか?

私のポイントは:

  • これらの関数を別のプロジェクト内で使用する予定はありません。これらの関数は、このプロジェクトでのみ使用されます。
  • AppController内では、これらのファイル、モデル、コンポーネントを使用しています。したがって、新しい構造でアクセスできる必要があります。

    App::import('Vendor', 'MyFancyVendor', array('file' => 'MyFancyVendor.php'));
    App::uses('CakeEmail', 'Network/Email');
    
    public $uses = array('Mytable1', 'Mytable2', 'Mytable3', 'Mytable4');  
    public $components    = array('Session');  
    public $helpers = array('Session','Html');
    

編集:巨大な新しいコントローラー/コンポーネントを使用することは古い構造と同じように見えますが、違いは次のとおりです。MyController12とMyController13は、AppController内のこれらの巨大な関数のメソッドを使用しません。ただし、MyController12はAppControllerから作成されるため、モデル、コンポーネント、およびその他の不要なものをロードします。これらのロジックをAppControllerから外すと、MyController12はそのすべてのロジックをロードしません。

4

3 に答える 3

3

このパターンに従ってください:

  • 関連するすべての機能をライブラリに収集します。
  • モデル内のすべてのデータロジックを移動します。
  • すべてのビューロジックをビューに移動します(ビューはテンプレートではないことに注意してください)
  • 他に残っているものについては、いくつかのヘルパーを作成します

これにより、コントローラーが薄くなります。他のプロジェクトやWebサイトの一部でこれらの種類の機能を実際に使用したくないことを考えると、他のコントローラーを作成することが最後のチャンスになるはずです。

于 2012-12-19T09:04:26.417 に答える
2

関数の数とファイルのサイズは、コードの実行にかかる時間にはまったく影響しません。

例:これには50を超えるプラグインがロードされ、100のコントローラー、84k行のコードがあり、ページはかなり高速にロードされます。

実行されているクエリを確認する必要があります。またはにrecursive設定されたクエリを使用していると思われます。少なくともcontainableを使用する必要があります。12

またexplain、あなたの選択のために見てください。mysqlを使用している場合は、それを確認するか、エンジンに類似しているものを確認してください。

また、時間がかかっていることを多く表示し、高速化できるデバッグキットをインストールすることもできます。

于 2012-12-19T22:24:54.687 に答える
1

私が読むことができることから、AppControllerを複数の異なるファイルに分割することを考えるのがおそらく最善です。AppControllerが何であるかを確認しないと、さまざまな役割を担っているように見えます。

Mytable1、MyTable2、Mytable3、Mytable4に異なるコントローラーを使用し、コンポーネントを使用してそれらの間で情報を共有する方がよい場合があります。

あなたの質問に答えるには、両方を使用することと、LibsとHelpersを使用することです。必要に応じてコントローラー、必要に応じてコンポーネント。巨大なAppControllerを巨大なコンポーネントに変更しても意味がありません。共通点がある場所でファイルを分割します。ただし、ImageControllerやPostcontrollerなどは、どちらもセッションコンポーネントを使用します。

編集:$ helpers、$ components、および$ usesをAppControllerからIndividualコントローラーに変更するのはどうですか?CakePHPがモデルを見つけられるように、関係を使用します。そして、コントローラーが余分なモデル/クラスをロードしていないことを確認してください。大きなコントローラーが(コードを除いて)動作が遅くなるとは思えないからです。

于 2012-12-19T09:09:39.700 に答える