淺談PHP緩衝技術之二

來源:互聯網
上載者:User
關鍵字 淺談PHP緩衝技術之二

採用 PEAR 來緩衝 php 程式

PHP 世界中緩衝是一個熱門的話題,因為 PHP 產生的動態網頁面,每次使用者請求都需要重新計算,不論請求的結果是否一樣,同時,PHP 每次都會編譯一次指令碼。這樣的超負荷運轉對一個流量很高的網站來說肯定難以忍受。幸運的是, Web 的結果可以緩衝,而不需要重新運行和編譯指令碼,商品化的產品像 ZendCache 或者開源的 Alternate PHP Cache都提供了把 PHP 指令碼編譯為位元組代碼並緩衝的辦法。

PEAR 的緩衝包提供了緩衝動態內容,資料庫查詢和 PHP 函數調用的架構。

就 像 Perl 有 CPAN, TeX 有 CTAN,PHP 也有自己的中心資產庫,存放類,庫和模組。這個庫稱為 PEAR(PHP Extension and Add-On Repository)。

本文假設你已經安裝了 PEAR 環境,如果沒有的話,可以去 PHP 網站下載。PEAR 的緩衝包包含一個總體的緩衝類和幾個特別的子類。緩衝類使用容器類來存貯和管理緩衝資料。

下面是 PEAR 緩衝當前所包含的容器,以及各自的參數:

file — file 容器在檔案系統儲存了緩衝的資料,是最快的容器。

cache_dir — 這是容器隱藏檔的目錄。

filename_PRefix — 緩衝檔案的首碼,例如:”cache_”。

shm — shm 容器把緩衝資料放入共用記憶體,基準測試顯示,目前的實現下,這個容器的速度要比檔案容器慢。

shm_key — 共用記憶體使用量的索引值。

shm_perm — 使用共用記憶體資料區段的許可權。

shm_size — 分配共用記憶體的大小。

sem_key — 號誌的索引值。

sem_perm — 號誌的許可權。

db — PEAR 的資料庫抽象層。

dsn — 資料庫連接的 DSN 。可以參考 PEAR 的 DB 文檔。

cache_table — 表的名字。

phplib — phplib 容器使用資料庫抽象層儲存緩衝。

db_class

db_file

db_path

local_file

local_path

ext/dbx — PHP 的資料庫抽象層擴充,如果像把緩衝存入資料庫,可以採用這個容器。

module

host

db

username

passWord

cache_table

persistent

使 用 PEAR Cache 所得到的效能提升取決於你所選擇的緩衝容器,例如,把資料庫的結果再次存入資料庫緩衝中就顯得毫無意義。

PEAR Cache 的函數緩衝模組能把任何函數或者方法的結果緩衝,不論是 PHP 的內建函數還是使用者自訂函數,他預設採用檔案容器,把緩衝資料放入到一個叫做function_cache 的目錄。

Cache_Function 類的構造器可以有三個可選的參數:

$container :緩衝容器的名字。

$container_options :緩衝容器的數組參數。

$expires:緩衝對象到期的時間(秒數)。

普通的函數調用採用 Cache_Function 類的 call() 方法時,就能觸發緩衝。調用 call() 很容易,的一個參數是函數的名字,然後是函數的參數,第二個參數是要調用函數中的第一個,依此類推,我們來看例子:

例1 緩衝函數和方法的調用

// 調用 PEAR Cache 的函數緩衝。

require_once 'Cache/Function.php';

// 定義一些類和函數。

class foo {

function bar($test) {

echo "foo::bar($test)

";

}

}

class bar {

function foobar($object) {

echo '$'.$object.'->foobar('.$object.')

';

}

}

$bar = new bar;

function foobar() {

echo 'foobar()';

}

// 取得 Cache_Function 對象

$cache = new Cache_Function();

// 對 foo 類的靜態函數 bar() 作緩衝(foo::bar())。

$cache->call('foo::bar', 'test');

// $bar->foobar()

$cache->call('bar->foobar', 'bar');

$cache->call('foobar');

?>

下 面我們採用 Cache_Output 來把輸出作緩衝:

例2 緩衝指令碼的輸出

// 載入 PEAR Cache 的輸出緩衝

require_once 'Cache/Output.php';

$cache = new Cache_Output('file', array('cache_dir' => '.') );

// 計算要緩衝頁面的標記,我們假定頁面的緩衝取決於

// URL, HTTP GET 和 POST 變數以及 cookies。

$cache_id = $cache->generateID(

array('url' => $REQUEST_URI, '

post' => $HTTP_POST_VARS, 'cookies' => $HTTP_COOKIE_VARS) );

// 查詢緩衝

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

// 緩衝命中

echo $content;

die();

}

// 緩衝丟失

// -- 在這裡插入內容產生代碼 --

// 把頁面存入緩衝

echo $cache->end();

?>

利用 Cache_Output 類,很容易把一個動態資料庫驅動的網站應用程式轉化為靜態,從而極大的提升網站的效能。越來越多的網站在採用 GZip 壓縮 HTML 內容,這樣減少了伺服器的頻寬消耗,對於使用 Modem 上網的使用者來說也能受益不少。

Cache_OutputCompression 擴充了 Cache_Output 類的功能,他把 GZIP 壓縮的 HTML 內容進行緩衝,從而節省了 CPU 壓縮的時間。

  • 相關文章

    聯繫我們

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