0

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

例如:

$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

我认为这可以在您的控制器中启用 Profiler 并检查是否完成了任何查询。如果您在生产环境中使用它,请确保仅为您的 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 回答
1

我可以回答我自己的问题。在设置缓存期间,除了缓存的输出之外,控制器功能中的任何内容都不会执行。

要自己测试这个,做一个数据库INSERT或一些会以某种方式记录的东西(例如写入一个空白文件)。

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

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