PHP緩衝技術

來源:互聯網
上載者:User

web開發中巧妙的使用緩衝技術,不盡減少了伺服器壓力,而且還會增加瀏覽速度,下面主要講解在php中如何使用緩衝技術來快取頁面面。
    大多數的網站都是基於資料庫的動態網頁面。也就是說你的頁面相當於一個從資料庫系統(比如MySQL)獲得資料的應用程式,解析資料,然後呈現給使用者。大多數的資料並不是經常更新,我們使用資料庫的原因是可以非常方便的更新資料和內容。

      大量過多的資料庫連接和查詢將會導致伺服器過載或癱瘓。每查詢一次資料庫,指令碼就連結一次DBMS,然後DBMS將返回查詢的結果。這非常浪費時間和資源,如果頻率非常高的話,可能會導致資料庫出錯。

如何搞定這個問題?
有兩種方法可以解決這個問題。一個是最佳化查詢,但在本文不討論這個;另一個最常用的就是使用緩衝。

使用緩衝技術
下面讓我來解釋一下。當我們有一個資料更新不是很頻繁的動態網頁面時,我們可以通過'系統'來建立頁面,然後留著以後用。也就是說當頁面建立完成後,只要沒有到期,就不需要重新查詢資料庫,而只是展示快取頁面。當然系統必須要設定一個到期的時間。

下面是一段程式碼範例

 

<?php
class cache
{
var $cache_dir = './tmp/cache/';//This is the directory where the cache files will be stored;
var $cache_time = 1000;//How much time will keep the cache files in seconds.

var $caching = false;
var $file = '';

function cache()
{
//Constructor of the class
$this->file = $this->cache_dir . urlencode( $_SERVER['REQUEST_URI'] );
if ( file_exists ( $this->file ) && ( fileatime ( $this->file ) + $this->cache_time ) > time() )
{
//Grab the cache:
$handle = fopen( $this->file , "r");
do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo $data;
} while (true);
fclose($handle);
exit();
}
else
{
//create cache :
$this->caching = true;
ob_start();
}
}

function close()
{
//You should have this at the end of each page
if ( $this->caching )
{
//You were caching the contents so display them, and write the cache file
$data = ob_get_clean();
echo $data;
$fp = fopen( $this->file , 'w' );
fwrite ( $fp , $data );
fclose ( $fp );
}
}
}

//Example :
$ch = new cache();
echo date("D M j G:i:s T Y");
$ch->close();
?>

代碼功能介紹如下:

function cache()
這是這個類的建構函式,這個函數的功能就是檢測是否已經存在快取頁面,或者快取頁面是否已經到期並建立之。下面就是它如何做到的:

$this->file = $this->cache_dir . urlencode( $_SERVER['REQUEST_URI'] );

這段代碼就是建立一個目標檔案,這個目標檔案就像這樣:/path/to/cache/dir/request_uri

if ( file_exists ( $this->file ) && ( fileatime ( $this->file ) + $this->cache_time ) > time() )

這段代碼檢測是否存在快取頁面,或者需要重建快取頁面因為可能已經到期。如果快取頁面還在保質期,那麼就顯示快取頁面然後退出。我下面解釋為什麼要退出。如果必須重建快取頁面,那麼下面這段代碼將起作用

$this->caching = true;
ob_start();

第一句話指示開始建立快取頁面面,第二句話就開始了緩衝,緩衝的資料會在調用close()函數時使用。

function close()

這個函數必須在指令碼末尾被調用,它將完成最後的工作。

下面來解釋一下這個函數是怎麼工作的

$data = ob_get_clean();

這裡我們得到了調用這個函數之前的所有緩衝內容,同時刪除緩衝,並將其值賦予$data。

這是一個非常簡單的類,目的是瞭解緩衝並更好地運用到自己的網站中。如果要使用這個類,則必須以下面這種形式

<?php
$a = new cache();
....
....
....
$a->close();
?>

如果在$a->close()之後還有代碼,那麼這些代碼將無效。因為在cache()函數裡有exit。一個比較好的解決方案是從cache函數中移去exit函數,然後像下面這樣使用

<?php
$a = new cache();
if ( $a->caching )
{
....
....
....
}
$a->close();
?>

熟練的使用緩衝技術,是你工作效率事半功倍!

本文來自[<a href='http://www.houxd.com' target='_blank'>後現代網路資源門戶</a>]! 詳細出處參考:http://www.lindsoft.net/html/net_tech/php/rmCXyKWZtKK0sC2w.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.