2016-03-23 12 views
2

Codeigniterを使用してコードを記述しました。初めてページを開くときの読み込み時間を長くしたいと思います。私は、コードを書かれたとき、実際に私はこのように私のcontruct内のすべてのモデルをロード:codeigniterでモデルをロードする最善の方法はありますか?

public function __construct(){ 
    parent::__construct(); 
    $this->load->model('Fa_promo'); 
    $this->load->model('Fa_project'); 
    $this->load->model('Fa_inbox'); 
    $this->load->model('Fa_quotes'); 
    $this->data['keywords']=$this->Configuration->get_keyword();    
    $this->data['about'] = $this->Fa_menu->get__content_from__slug('about'); 
    $this->data['menu']=$this->Fa_menu->list_menu_level1(); 
    $this->Configuration->update_hits();    
    } 

私の質問は、どのように上記またはこのような間のパフォーマンスを向上させるモデルをロードするための最良の方法を行うには?あなたの助けのための

public function __construct(){ 
    parent::__construct();       
} 
public function a(){ 
    $this->load->model('Fa_promo'); 
    $this->Fa_promo->load(); 
} 
public function(){ 
    $this->load->model('Fa_project'); 
    $this->Fa_project->load(); 
} 

感謝:)

+0

ビュー全体またはHTTPレスポンスをキャッシュするのはどうですか?第2の考え方:たとえば、[APC](http://php.net/manual/en/book.apc.php)を使用してモデルを部分的にキャッシュすることができます。 – Farside

+1

モデルをロードするときにコードを実行していない '' __construct() ''で何かをしている場合を除いて、呼び出すメソッドを最適化する方がよいでしょう。おそらくメモリ使用量を除いて何の違いもないと思いますか? – ahmad

答えて

2

CodeIgniterのdocsは言う:あなたのモデルは、一般的にロードされ、お使いのコントローラのメソッド内から呼び出されます。

最初のアプローチは大きな利点があります。すべてのコントローラメソッドで再利用でき、各メソッドを繰り返し入力する必要はありません。パフォーマンスに関する

:私はそれはどんな違いがありません。あなたが行われたコールの数を制限することができますよう、モデル内の関数は、物事

3

が遅くなるかもしれません各機能に個別にロードするために速くなると思いますモデルはロードされますが、その差は最小になる可能性があります

これらをすべてコンストラクタにロードすると、コントローラの任意のポイントで1つの負荷から使用できますが、これは少し遅くなる可能性があります彼らは積み込まれて準備ができているという利点があります。それは、しかし、単一の与えられた関数のために必要以上に多くのメモリを使用することができます。

あなたはモデルをロードするためのコードを保存したい場合、あなたは常に、コンストラクタで次の手順を実行できます。

$this->load->model(['Fa_promo', 'Fa_project', 'Fa_inbox', 'Fa_quotes]); 

これは、一度にすべてのモデルをロードします。配列を渡すと、ローダーは各項目のために自分自身を呼び出すので、実際にはこれと同じです。

関連する問題