2013-09-30 44 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表中,而不是第二次(在5分鐘範圍內)。

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

我認爲這可以驗證啓用您的控制器中的分析器,並檢查是否有任何查詢完成。如果您在生產環境中使用它,請確保僅爲您的IP啓用了此功能。

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

- 編輯1 -

這將是可見的只有一次。在存儲緩存頁面後不久,配置文件結果將不再可見(因此您可能想要刪除文件並刷新頁面)。

- EDIT 2 -

您還可以使用:

log_message('info', 'message'); 

模型裏面,然後在config.php改變,$配置[ 'log_threshold']爲3,檢查日誌文件。

- 編輯3 -

可以肯定的選擇將這樣做,除非你已經啓用數據庫緩存。在這種情況下,在緩存文件夾中,您將看到緩存的數據庫選擇。

+0

是的b/c分析器將只可用一次,我不知道這將是多麼有幫助。最重要的問題是要知道'cache'處於活動狀態時在** 2nd **上發生了什麼。 –

+1

確實。我認爲最好的解決方案是使用'log_message('info','message');'get_data_from_database();'方法內''。 – Irimia

相關問題