前面介紹了pear的安裝,今天開始介紹pear的幾個知名的package之一,如果有不清楚的地方請站內(nèi)搜索“PEAR教程”獲取前面的教程!
今天我們要介紹的是PEAR的Cache_Lite包,做web的說到提速眼睛瞪大的程度絕不亞于男人見到絕色美女時眼睛所瞪大的程度,因此,我這里第一個要介紹的就是PEAR的Cache_lite包,利用這個package可以根據(jù)你的需要緩存網(wǎng)頁的任何一個部分,從而大大的提高了頁面的生成和載入速度!
首先去Pear的List Packages下載Cache_Lite這個安裝包,寫這個教程的時候,穩(wěn)定的版本是1.7.2,所以我們就下載這個版本,下載下來后解壓縮,然后將文件放置在PEAR的根目錄下(文件目錄如何組織,后面有介紹),然后我們?nèi)anual對應(yīng)的章節(jié)看看如何使用。那些關(guān)于包的介紹你可以先看看,我們這里沒有前戲,直接切入主題,下面是Cache_Lite::get()的例子。我們就從這個例子入手,我在例子中增加了中文的注釋
require_once"Cache/Lite.php";//這里是相對PEAR的地址,找到剛才下載的包中Lite.php這個文件后你就應(yīng)該知道如何部署這個文件夾了!
$options=array(
'cacheDir'=>'/tmp/',//這里是Cache的路徑,最好用絕對路徑,我們的例子中將會有說明
'lifeTime'=>7200,//緩存的失效時間,秒為單位
'pearErrorMode'=>CACHE_LITE_ERROR_DIE//報錯模式
);
$cache=newCache_Lite($options);//參數(shù)設(shè)置完之后建立緩存
if($data=$cache->get('id_of_the_page')){//如果id=id_of_the_page這個緩存存在的話,則直接將緩存數(shù)據(jù)echo出來
// Cache hit !
// Content is in $data
// (...)
}else{//緩存不存在,則生成緩存
// No valid cache found (you have to make and save the page)
// (...)
}
看了上面的這個例子,是不是發(fā)現(xiàn)很簡單?其實緩存的關(guān)鍵之處不在于如何生成和刪除緩存,而在于如何平衡緩存靜止和動態(tài)的關(guān)系,如何在適當(dāng)?shù)臅r候重建緩存。下面我開始舉例,讓大家體會到緩存的好處!,請在tutor(我們教程中的例子對應(yīng)的根目錄)下建立文件cache,*nix操作系統(tǒng)請設(shè)置屬性為0777,然后在tutor文件夾下建立cache.php,輸入下面的代碼
< ?php
require_once"config.php";
require_once"Cache/Lite.php";
//下面的代碼是計算頁面執(zhí)行時間,和cache無關(guān)
functionget_microtime()
   {
       list($usec,$sec)=explode(' ',microtime());
       return((float)$usec+(float)$sec);
   }
$s= get_microtime();
//下面是緩存的設(shè)置
$options=array(
   'cacheDir'=>  WEB_DIR."/cache/",
       //請在tutor(我們教程中的例子對應(yīng)的根目錄)
       //下建立文件cache,
       //*nix操作系統(tǒng)請設(shè)置屬性為0777
   'lifeTime'=>10,//10秒失效時間
   'pearErrorMode'=> CACHE_LITE_ERROR_DIE
);
$cache=newCache_Lite($options);
$cache_id='cache';//id一定要唯一
//否則會和別人的cache出現(xiàn)沖突
if($data=$cache->get($cache_id)){
//data是獲取數(shù)據(jù)的結(jié)果,如果緩存存在并且沒有過期,
//直接取出數(shù)據(jù)
   echo$data;
 
}else{
   //否則我們建立緩存
 
   //下面我們故意用循環(huán)來耗時
       while($i<10000000)
               $i++ ;
   $data='緩存建立的時間:'.date("Y-m-d H:i:s");
       $data.="<p>沒有緩存執(zhí)行的時間是:".(get_microtime()-$s)."秒";
   echo$data;
   $cache->save($data);
   
}
echo"<p>當(dāng)前頁面耗時:".(get_microtime()-$s)."秒</p>";
?>
在瀏覽器中運行http://127.0.0.1/tutor/cache.php,然后看看cache的目錄下是不是生成了一個文件,很有成就感吧?!
在web頁面我們發(fā)現(xiàn)第一次運行的時間用時大約1秒,緩存生成之后用時則只為原來的1/1000,這樣的效率就不需要我再多余描述了吧!!其實上面這個例子的大體流程是,1.建立緩存參數(shù),包括緩存的ID;2.根據(jù)參數(shù)和ID檢查緩存是否存在,如果存在,則緩存數(shù)據(jù)被獲取在$data變量中,然后echo出來,否則重新生成緩存,將頁面的結(jié)果保存在變量中,然后將變量的數(shù)據(jù)寫入緩存。不過這樣的方式很不方便,因為所有的輸出我們必須將其寫到一個變量中,這樣其實是比較麻煩的,要用到很多字符串連接,代碼很難維護,當(dāng)然簡單的cache最好還是建議采用這樣的方式。不過你別擔(dān)心,強大的PEAR不會這么弱智的,所以它也提供了另外一種方式,其實就是獲取緩沖區(qū)取出變量的方式,下面看看這個簡單的例子,對應(yīng)的manual章節(jié)在這里。
< ?php
require_once"config.php";
 
require_once"Cache/Lite/Output.php";
//注意,這里require的文件不一樣了哦
$options=array(
   'cacheDir'=>  WEB_DIR."/cache/",
   'lifeTime'=>10,//10秒失效時間
   'pearErrorMode'=> CACHE_LITE_ERROR_DIE
);
$cache=newCache_Lite_Output($options);
$cache_id='obcache';
if(!($cache->start($cache_id))){
       //如果不存在,則建立緩存,存在的話,程序自動就將緩存輸出了
?>
 
這里你想干什么就干什么,
包括執(zhí)行php
包括數(shù)據(jù)庫查詢
只要是php允許的都可以在這里完成
是不是很方便呢
 
< ?php
   $cache->end();//這個千萬別忘記了,
       //否則緩存永遠建立不成功,
       //這個函數(shù)就是在出來output buffer
}
?>
再去看看cache的目錄下是不是又多了一個文件?
cache就介紹到這里,下面有幾個需要注意的地方:
1.cache的ID一定要唯一,可以將一些參數(shù)集成進來
2.cache的緩存路徑最好寫絕對路徑
3.本節(jié)的重點在于注釋,請仔細閱讀注釋
另外,通過我的介紹,如何刪除緩存大家可以去看看對應(yīng)的手冊了,上面的例子在于拋磚引玉,如果上面的例子你會用了,接下的緩存操作應(yīng)該不是難事了。
新聞熱點
疑難解答