2013-09-30 5 views
0

Одна из основных целей кеширования - экономить ресурсы, а не делать такие вещи, как попадание в базу данных по каждому запросу. В свете этого я смущен тем, что все Codeigniter делает в контроллере, когда он встречает оператор cache().Кабель вывода Codeigniter: какие части функции вызываемого контроллера выполняются?

Например:

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

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

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

Я понимаю, что кэшируются main/index HTML-файл будет отображаться в течение следующих 5 минут, но в течение этих 5 минут будет контроллер еще выполнить get_data_from_database() шаг? Или это просто пропустить?

Примечание: the Codeigniter documentation говорит, что вы можете поместить инструкцию cache() в любом месте функции контроллера, что еще более смущает меня о том, что происходит.

ответ

1

Я могу ответить на свой вопрос. НИЧЕГО в функции контроллера, кроме кэшированного вывода, выполняется в течение времени, в которое установлен кеш.

Чтобы проверить это самостоятельно, сделайте базу данных INSERT или что-то, что было бы зарегистрировано каким-либо образом (например, писать в пустой файл).

Я добавил следующий код ниже своего оператора cache(), и он был вставлен только в таблицу some_table при первой загрузке функции контроллера, а не в 2-й раз (в пределах 5-минутного промежутка).

$this->db->insert('some_table', array('field_name' => 'value1')); 
1

Я думаю, что это можно проверить, разрешив Profiler в вашем контроллере и проверить, выполнен ли какой-либо запрос. Убедитесь, что это включено только для вашего IP-адреса, если вы используете его в рабочей среде.

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

- EDIT 1 -

Это будет видно только один раз. Вскоре после сохранения кэшированной страницы результат профилей снова не будет виден (так что вы можете удалить файл и обновить страницу).

- EDIT 2 -

Вы также можете использовать:

log_message('info', 'message'); 

внутри вашей модели, а затем изменить в config.php, $ конфиг [ ''] log_threshold 3 и проверьте журнал файл.

- EDIT 3 -

Для уверенного выбора будет сделано, если вы не включили кэш базы данных. В этом случае в кэше вы увидите кеширование базы данных.

+0

Да, б/у профайлер будет доступен только один раз, я не уверен, насколько это полезно. Большой вопрос состоит в том, чтобы знать, что происходит при попытке ** 2 **, когда активен «кеш». –

+1

Действительно. Я считаю, что лучшим решением является использование 'log_message ('info', 'message');' in 'get_data_from_database();' method. – Irimia