熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP程序加速探索之緩存輸出

2022-06-13   來源: PHP編程 

  內容緩存輸出 PEAR cache

  接下來我們開始探索更常用的緩存技術這也是本文的重點部份首先我們使用PEAR中的cache包PEAR可以將內容緩存於文件數據庫或者內存中我們以文件為例

  下面是一個沒有使用緩存的PHP小程序

  pear_content_cachephp

<?php 
echo "這是內容<P>"; 
echo "當前時間是" date(MdY H:i:s A time()) "<BR>"; 
?>

  上面這個程序非常簡單現在我們為其加上緩存

  pear_content_cachephp

  <?php 
require_once Cache/Outputphp;

  //設置緩存目錄必須是可寫的 
$cacheDir = /pear_cache
$cache = new Cache_Output(filearray(cache_dir => $cacheDir));

  //如果nocache變量為空使用緩存中的內容 
//如果想獲得最新的內容就要賦值給nocache變量 
if (empty($_REQUEST[nocache])) 

// 建立一個獨一的cache標識 
// 請求+Cookie信息 
$cache_id = $cache>generateID(array(url => $_REQUESTpost =>$_POSTcookies => $HTTP_COOKIE_VARS)); 

else 

//想獲得最新的內容ID為空 
$cache_id = null; 
}

  //看cache ID對應的緩存內容是否可用 
if ($content = $cache>start($cache_id)) 

//緩存已存在直接輸出並結束腳本 
echo $content; 
exit(); 
}

  // 緩存中不存在該內容生成新內容並寫入緩存 
echo "這是內容<P>"; 
echo "當前時間是" date(MdY H:i:s A time()) "<BR>";

  // 把內容寫入緩存 
echo $cache>end(); 
?>

  分別刷新這兩個文件你會發現pear_content_cachephp中的“當前時間是”這一行中的時間是隨著刷新而變化的而pear_content_cachephp中的這一行則不變這是由於pear_content_cachephp使用了緩存將用戶請求的內容存入靜態文件中當用戶再次請求時它直接從文件中輸出而不需要用程序動態生成內容

  對於pear_content_cachephp如果用戶想要讀取最新的信息而不是緩存中成舊的信息那麼可以用http://…/pear_content_cachephp?nocache= 來訪問這將禁用緩存功能刷新一下看看你將發現時間會隨之變化

  總結一下PEAR內容緩存類的使用

  .包含PEAR包 要注意設對路徑

.包含Outputphp中的cache類

  require_once Cache/Outputphp;

  .設置緩存目錄

  $cacheDir = /pear_cache;

  確認這個目錄是可寫的Cache數據將會寫入這個目錄的子目錄中

  .建立一個輸出緩存對象

  $cache = new Cache_Output(filearray(cache_dir => $cacheDir));

  第一個參數表示我們使用基於“文件”方式的緩存第二個參數是一個與緩存目錄相關聯的數組

  .產生一個唯一的cache ID

  $cache_id = $cache>generateID(array(url => $_REQUESTpost =>$_POSTcookies => $HTTP_COOKIE_VARS));

  這裡$cache對象的generateID()方法通過提供一個信息數組(URL HTTP POST data 和 HTTP cookie)來獨一無二地標識這個請求與其它請求區分開來

  .增加一個邏輯判斷語句看是否對應於cacheID的緩存數據是否已經存在如果存在獲取數據並結束腳本

  if ($content = $cache>start($cache_id)) 

echo $content; 
exit(); 
}

   將產生內容的代碼放在以上邏輯語句之後並結束使用cache對象

  echo $cache>end();

  函數緩存輸出 PEAR cache

  PEAR除了可以對輸出的內容進行緩存處理外還可以將對某個函數的調用結果緩存起來這是個很有趣的功能如果你的程序要頻繁使用到某個函數而且調用的結果相同的話我建議你不妨試試特別是當這個函數運行起來比較慢的時候

  下面我們實現對一個執行起來很慢的函數slowFunction()的緩沖調用

  <?php 
require_once Cache/Functionphp;

  $cacheDir = /pear_cache/
$cache = new Cache_Function(filearray(cache_dir => $cacheDir)); 
$arr = array(蘋果 西瓜); 
$cache>call(slowFunction $arr); 
echo <BR>;

  $arr = array(蘋果 西瓜); 
slowFunction($arr);

  function slowFunction($arr = null) 

echo "一個執行起來很慢的函數 :( <br>"; 
echo "當前時間是 " date(MdY H:i:s A time()) <br>
foreach ($arr as $fruit) 

echo "我吃了一個 $fruit <br>"; 


?>

  以下是示例的腳本執行結果

  一個執行起來很慢的函數

  當前時間是 Jul :: PM
我吃了一個 蘋果 
我吃了一個 梨 
我吃了一個 西瓜

  一個執行起來很慢的函數 :( 
當前時間是 Jul :: PM
我吃了一個 蘋果 
我吃了一個 梨 
我吃了一個 西瓜

  代碼中Cache/Functionphp類用來執行函數緩沖功能$cache變量是一個Cache_Function對象使用基於文件的函數緩存存入$cacheDir目錄要緩存一個函數調Cache_Function對象$cache的call()方法要像這樣使用$cache>call(‘slowFunction’ $arr);

  這裡slowFunction()函數被調用參數為一個數組$arr這個函數被緩存在$cacheDir目錄下的一個文件裡任何在此之後的對這個函數的調用將會由$cache>call()返回該函數執行的結果 函數緩存和使用方法和內容緩存很相似不再多說具體請查看PEAR手冊


From:http://tw.wingwit.com/Article/program/PHP/201311/21165.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.