CodeIgniter架構中啟用和清除緩衝的教程

來源:互聯網
上載者:User

Codeigniter支援緩衝技術,以達到最快的速度。儘管CI已經相當高效了,但是網頁中的動態內容、主機的記憶體CPU和資料庫讀取速度等因素直接影響了網頁的載入速度。依靠網頁緩衝,你的網頁可以達到近乎靜態網頁的載入速度,因為他們將程式輸出的結果儲存到硬碟上了。

緩衝是怎麼工作的?

CI支援每個頁面單獨緩衝,而且可以設定緩衝更新時間。當一個網頁第一次被載入的時候,快取檔案將被儲存到application/cache檔案夾。下次訪問的時候,系統就會直接讀取快取檔案,然後返回給使用者的瀏覽器。如果快取檔案到期,它將被刪除並重建。
注意:Benchmark標籤在使用了緩衝的頁面仍然可用。

啟動緩衝

啟用緩衝功能,只需要將下面的代碼放入你的任何一個控制器(controller)的方法(function)內:

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

其中n是你希望緩衝更新的分鐘數。可以使用m/60來精確到秒,例如1/60,則是精確到1秒 上面的代碼可以放到任何一個function裡面。他的出現順序對緩衝並沒有影響,所以將它放在你認為最合乎邏輯的地方。一旦上面的代碼放到了控制器的方法中,頁面就會被緩衝。 警告:由於CI儲存快取檔案的方式,只有通過view檔案的輸出才能被緩衝。 注意:在快取檔案產生之前,請確保application/cache檔案夾可寫。

清除緩衝

如果你不再想使用緩衝,僅需將上面的代碼從你的controller裡面刪除即可。注意:這樣做並不能讓快取檔案立即消失,它將會自動到期並被刪除。如果你想立即刪除那些檔案,就必須自己動手了。

可手動設定緩衝開關。如果您想保留某些查詢不被緩衝 這個功能就十分有用。例如:

// 開啟緩衝開關
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");
// 使下面這條查詢不被緩衝
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");
// Turn caching back on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM another_table");
刪除快取檔案與特定網頁。如果你需要清除緩衝後,更新您的資料庫。

緩衝系統會在緩衝存放目錄中建立與被訪問的URL所對應的子目錄,同時把快取檔案存放在那個子目錄中.緩衝主目錄就是您在application/config/database.php 裡面設定的緩衝目錄. 例如, 如果您正在瀏覽地址為 example.com/index.php/blog/comments的頁面, 緩衝系統會把所有產生的快取檔案放進一個以 blog+comments做為名稱的檔案夾裡. 如果您要刪除關於剛才提到的這個例子與之對應的快取檔案 需要執行以下代碼:

$this->db->cache_delete('blog', 'comments');
$this->db->cache_delete('blog', 'comments'),我在實際測試的時候不起作用,不知道為什麼原因,不知道是不是小bug?但是下面的$this->db->cache_delete_all()是可以的,沒有問題。

如果您不使用任何參數,目前的URI設定將決定什麼時候應該清除/更新 該緩衝。

清除所有所有的快取檔案。例子:

$this->db->cache_delete_all();


緩衝小記

1. 資料庫緩衝

    資料庫緩衝主要是針對於SELECT查詢

// 開啟緩衝開關
$this->db->cache_on();
$query1 = $this->db->query("SELECT * FROM mytable");

// 使下面這條查詢不被緩衝
$this->db->cache_off();
$query2 = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");

// 再次開啟緩衝開關
$this->db->cache_on();
$query3 = $this->db->query("SELECT * FROM another_table");   


這樣query1和query3就被緩衝在檔案中了,緩衝的路徑根據您的URL而定,如example.com/index.php/blog/comments的頁面, 緩衝系統會把所有產生的快取檔案放進一個以 blog+comments做為名稱的檔案夾裡. 如果您要刪除關於剛才提到的這個例子與之對應的快取檔案 需要執行以下代碼:

$this->db->cache_delete('blog', 'comments');//$this->db->cache_delete('blog', 'comments')#來刪除緩衝     如果要清除所有資料庫緩衝:

$this->db->cache_delete_all();    *其cache模式在於針對不同的uri就會產生cache檔案,如果URL中參數不同,則 cache檔案就會不同,從而產生了漏洞。如果訪問者構建自動產生URI,不斷向伺服器發起請求,就會瞬間產生大量的垃圾檔案,導致系統檔案臃腫。

    2. 頁面緩衝

$this->output->cache(n); // 請確保application/cache可寫     n 是你希望緩衝更新的 分鐘 數。可以使用 m/60 來精確到秒,例如 1/60 ,則是精確到 1秒
  

    3. 序例化緩衝到檔案


$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
 
if ( ! $foo = $this->cache->get('foo'))
 {
      echo 'Saving to the cache!<br />';
      $foo = 'foobarbaz!';
 
     // Save into the cache for 5 minutes
      $this->cache->save('foo', $foo, 300);
 }
 
echo $foo;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.