【问题标题】:Codeigniter output cache: what parts of the called controller function get executed?Codeigniter 输出缓存:被调用的控制器函数的哪些部分被执行?
【发布时间】:2013-09-30 13:18:19
【问题描述】:

缓存的主要目的之一是节省资源,而不是像每次请求都访问数据库这样的事情。鉴于此,当 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() 语句放在控制器函数中的任何位置,这让我更加困惑于执行了什么。

【问题讨论】:

    标签: codeigniter caching page-caching output-caching


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      -- 编辑 1--

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

      -- 编辑 2--

      你也可以使用:

      log_message('info', 'message');
      

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

      -- 编辑 3--

      除非您启用了数据库缓存,否则肯定会完成选择。在这种情况下,您会在缓存文件夹中看到缓存的数据库选择。

      【讨论】:

      • 是的,b/c 分析器只能使用一次,我不确定这会有多大帮助。最大的问题是知道cache 处于活动状态时第二次尝试发生了什么。
      • 确实如此。我认为最好的解决方案是在get_data_from_database(); 方法中使用log_message('info', 'message');。
      猜你喜欢
      • 2012-11-16
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2014-04-24
      • 2011-04-12
      • 1970-01-01
      相关资源
      最近更新 更多