0

キャッシュの主な目的の 1 つは、リソースを節約することであり、リクエストごとにデータベースにヒットするようなことはしません。cache()これに照らして、コントローラーがステートメントに遭遇したときにすべての Codeigniter がコントローラーで行うことについて、私は混乱しています。

例えば:

$this->output->cache(5);

$data=$this->main_model->get_data_from_database();

$this->load->view("main/index", $data);

キャッシュされたmain/indexhtml ファイルが次の 5 分間表示されることはわかっていますが、この 5 分間の間、コントローラーはまだget_data_from_database()ステップを実行しますか? それともスキップするだけですか?

注: Codeigniter のドキュメントには、コントローラー関数のどこにでもステートメントを配置できると書かcache()れています。これにより、実行される内容についてさらに混乱します。

4

2 に答える 2

1

私は自分の質問に答えることができます。キャッシュが設定されている間、キャッシュされた出力以外のコントローラー関数は何も実行されません。

これを自分でテストするには、データベースINSERTまたは何らかの方法でログに記録される何か (たとえば、空のファイルへの書き込み) を実行します。

ステートメントの下に次のコードを追加しましたが、コントローラー関数を初めてロードしたときにcache()のみテーブルに挿入されsome_table、2 回目 (5 分以内) には挿入されませんでした。

$this->db->insert('some_table', array('field_name' => 'value1') );
于 2013-09-30T15:38:03.780 に答える
1

これは、コントローラーでプロファイラーを有効にして確認し、クエリが実行されているかどうかを確認できると思います。本番環境で使用している場合は、これが IP に対してのみ有効になっていることを確認してください。

$this->output->enable_profiler(TRUE);

-- 編集 1 --

これは一度だけ表示されます。キャッシュされたページが保存されるとすぐに、プロファイルの結果は再び表示されなくなります (そのため、ファイルを削除してページを更新することをお勧めします)。

-- 編集 2 --

以下も使用できます。

log_message('info', 'message');

モデル内で、config.php で $config['log_threshold'] を 3 に変更し、ログ ファイルを確認します。

-- 編集 3 --

データベースキャッシュを有効にしていない限り、確実に選択が行われます。この場合、キャッシュ フォルダーに、キャッシュされたデータベースの選択が表示されます。

于 2013-09-30T15:16:21.507 に答える