技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

zlib.output_compression比ob_gzhandler效率高

作者:admin    時(shí)間:2015-2-11 8:42:49    瀏覽:

zlib.output_compression和ob_gzhandler是php代碼壓縮的方法,通過(guò)使用這兩個(gè)方法,可以實(shí)現(xiàn)php代碼的gzip壓縮。不過(guò),這兩個(gè)方法哪個(gè)更好呢?哪個(gè)效率更高呢?在編程中我們應(yīng)該怎樣選擇?這都是程序員應(yīng)該考慮的問(wèn)題。

zlib.output_compression比ob_gzhandler效率高

其實(shí),雖然zlib.output_compression和ob_gzhandler都可以進(jìn)行php代碼壓縮,但它們的處理方式是不同的。

1)zlib.output_compression是在對(duì)網(wǎng)頁(yè)內(nèi)容壓縮的同時(shí)發(fā)送數(shù)據(jù)至客戶端。

2)ob_gzhandler是等待網(wǎng)頁(yè)內(nèi)容壓縮完畢后才進(jìn)行發(fā)送

相比之下,zlib.output_compression效率更高。

需要注意的是,兩者不能同時(shí)使用,只能選其一,否則將出現(xiàn)錯(cuò)誤。

兩者的實(shí)現(xiàn)方式分別如下:

1. zlib.output_compression實(shí)現(xiàn)方式

在默認(rèn)情況下,zlib.output_compression是關(guān)閉:

zlib.output_compression = Off  
;zlib.output_compression_level = -1  

如需開(kāi)啟需編輯php.ini文件,加入以下內(nèi)容:

zlib.output_compression = On 
zlib.output_compression_level = 6  

可以通過(guò)phpinfo()函數(shù)檢測(cè)結(jié)果。

當(dāng)zlib.output_compression的Local Value和MasterValue的值同為On時(shí),表示已經(jīng)生效,這時(shí)候訪問(wèn)的PHP頁(yè)面(包括偽靜態(tài)頁(yè)面)已經(jīng)GZIP壓縮了,通過(guò)Firebug或者在線網(wǎng)頁(yè)GZIP壓縮檢測(cè)工具可檢測(cè)到壓縮的效果。

2. ob_gzhandler的實(shí)現(xiàn)方式

如果需要使用ob_gzhandler,則需關(guān)閉zlib.output_compression,把php.ini文件內(nèi)容更改為:

zlib.output_compression = Off 
zlib.output_compression_level = -1 

通過(guò)在PHP文件中插入相關(guān)代碼實(shí)現(xiàn)GZIP壓縮:

if (extension_loaded('zlib')) { 
    if (  !headers_sent() AND isset($_SERVER['HTTP_ACCEPT_ENCODING']) && 
          strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE) 
    //頁(yè)面沒(méi)有輸出且瀏覽器可以接受GZIP的頁(yè)面 
    { 
        ob_start('ob_gzhandler'); 
    } 

//待壓縮的內(nèi)容 
echo $context; 
ob_end_flush();  

不管是zlib.output_compression還是ob_gzhandler,都僅能對(duì)PHP文件進(jìn)行GZIP壓縮,對(duì)于HTML、CSS、JS等靜態(tài)文件只能通過(guò)調(diào)用PHP的方式實(shí)現(xiàn)。

知識(shí)擴(kuò)展

ob_gzhandler

ob_gzhandler (PHP 4 >= 4.0.4, PHP 5)

ob_gzhandler — 在ob_start中使用的用來(lái)壓縮輸出緩沖區(qū)中內(nèi)容的回調(diào)函數(shù)。ob_start callback function to gzip output buffer

說(shuō)明

string ob_gzhandler ( string $buffer , int $mode )

ob_gzhandler()目的是用在ob_start()中作回調(diào)函數(shù),以方便將gz 編碼的數(shù)據(jù)發(fā)送到支持壓縮頁(yè)面的瀏覽器。在ob_gzhandler()真正發(fā)送壓縮過(guò)的數(shù)據(jù)之前,該 函數(shù)會(huì)確定(判定)瀏覽器可以接受哪種類型內(nèi)容編碼("gzip","deflate",或者根本什么都不支持),然后 返回相應(yīng)的輸出。 所有可以發(fā)送正確頭信息表明他自己可以接受壓縮的網(wǎng)頁(yè)的瀏覽器,都可以支持。 All browsers are supported since it's up to the browser to send the correct header saying that it accepts compressed web pages. 如果一個(gè)瀏覽器不支持壓縮過(guò)的頁(yè)面,此函數(shù)返回FALSE。

參數(shù)

buffer

mode

返回值

更新日志

版本 4.0.5
說(shuō)明 添加了 mode 參數(shù)。 

范例

Example #1 ob_gzhandler() example
<?php
ob_start("ob_gzhandler");
?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>

注釋

Note: ob_gzhandler() 需要 zlib 擴(kuò)展。
Note: 不能同時(shí)使用ob_gzhandler() 和 zlib.output_compression。 也要注意使用 zlib.output_compression 要優(yōu)于 ob_gzhandler()。

您可能對(duì)如下文章也感興趣

php通過(guò)ini_set調(diào)用output_compression壓縮網(wǎng)頁(yè)

標(biāo)簽: 壓縮  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */