Codeigniter输出缓存:被调用的控制器函数的哪些部分被执行?

时间:2013-09-30 13:18:19

标签: codeigniter caching page-caching output-caching

缓存的主要目的之一是节省资源,而不是像每次请求都要点击数据库。鉴于此,我对于Codeigniter在遇到cache()语句时在控制器中所做的事情感到困惑。

例如:

$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()语句放在控制器函数的任何地方,这让我更加困惑于执行什么。

2 个答案:

答案 0 :(得分:1)

我认为可以验证是否可以在控制器中启用Profiler并检查是否有任何查询。如果您在生产环境中使用它,请确保仅为您的IP启用此功能。

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

- 编辑1 -

这只能看一次。存储缓存页面后不久,配置文件结果将不再可见(因此您可能希望删除该文件并刷新页面)。

- 编辑2 -

您也可以使用:

log_message('info', 'message');

在模型中,然后将config.php,$ config ['log_threshold']更改为3并检查日志文件。

- 编辑3 -

除非您已启用数据库缓存,否则确保将完成选择。在这种情况下,在缓存文件夹中,您将看到缓存的数据库选择。

答案 1 :(得分:1)

我可以回答我自己的问题。除了缓存输出之外的控制器功能中的NOTHING在设置缓存期间执行。

要自己测试,请执行数据库INSERT或以某种方式记录的内容(例如,写入空白文件)。

我在cache()语句下面添加了以下代码,它仅在我第一次加载控制器函数时插入some_table表,而不是第二次(在5分钟范围内)。< / p>

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