首頁 > 後端開發 > php教程 > apache php gzip壓縮輸出的實作方法

apache php gzip壓縮輸出的實作方法

WBOY
發布: 2016-07-29 09:14:52
原創
832 人瀏覽過

一、gzip介紹

         gzip是GNU zip的縮寫,它是一個GNU自由軟體的檔案壓縮程序,也常用來表示gzipip檔格式。軟體的作者是Jean-loup Gailly和Mark Adler。 1992年10月31日第一次公開發布,版本號是0.​​1,目前的穩定版本是1.2.4。

        Gzip主要用於Unix系統的檔案壓縮。我們在Linux中常會用到後綴為.gz的文件,它們就是GZIP格式的。現今已經成為Internet 上使用非常普遍的一種資料壓縮格式,或者說一種檔案格式。 當應用Gzip壓縮到一個純文字檔案時,效果是非常明顯的,經過GZIP壓縮後頁面大小可以變成原來的40%甚至更小,這取決於檔案中的內容。

  HTTP協定上的GZIP編碼是一種用來改進WEB應用程式效能的技術。 web開發中可以透過gzip壓縮頁面來降低網站的流量,而gzip並不會對cpu造成大量的佔用,略微上升,也是幾個百分點而已,但是對於頁面卻能壓縮30%以上,非常划算。

      使用Apache中的Gzip模組,我們可以使用Gzip壓縮演算法來對Apache伺服器發佈的網頁內容進行壓縮後再傳送到客戶端瀏覽器。這樣經過壓縮後實際上降低了網路傳輸的位元組數(節省傳輸的網路I/o),最明顯的好處就是可以加快網頁載入的速度。

      網頁載入速度加快的好處不言而喻,除了節省流量,改善用戶的瀏覽體驗外,另一個潛在的好處是Gzip與搜尋索引擎的抓取工具有著更好的關係。例如 Google就可以透過直接讀取gzip檔案來比普通手動抓取更快地檢索網頁。在Google網站管理員工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作為Sitemap被提交的。

      而這些好處不僅限於靜態內容,PHP動態頁和其他動態產生的內容均可透過使用Apache壓縮模組壓縮,加上其他的效能調整機制和對應的伺服器端快取規則,這可以大幅提高網站的效能。因此,對於部署在Linux伺服器上的PHP程序,在伺服器支援的情況下,我們建議你開啟使用Gzip Web壓縮。

二、Web伺服器處理HTTP壓縮的過程如下:

    1. Web伺服器檢查到瀏覽器

    1.

Web伺服器 );

    2. 如果瀏覽器支援HTTP壓縮,

Web伺服器檢查請求檔案的後綴名;

    3. 如果請求檔案是HTML、CSS等靜態文件,

WebWeb已經存在請求文件的最新壓縮文件;    4. 如果請求文件的壓縮文件不存在,

Web伺服器

向瀏覽器返回未壓縮的請求文件,並在壓縮緩衝目錄中存放請求文件的壓縮文件;

    5. 如果請求文件的最新壓縮文件已經存在,則直接返回請求文件的壓縮文件;    6. 如果請求文件是動態文件,

Web伺服器

動態壓縮內容並返回瀏覽器,壓縮內容不存放到壓縮快取目錄中。 三、啟用Apache的gzip功能

  p要使用Gzip Web壓縮,請先確定你的伺服器開啟了對這兩個元件之一的支援。

      雖然使用Gzip同時也需要客戶端瀏覽器的支持,不過不用擔心,目前大部分瀏覽器都已經支援Gzip了,如IE、Mozilla Firefox、Opera、Chrome等。

     透過檢視HTTP頭,我們可以快速判斷所使用的用戶端瀏覽器是否支援接受gzip壓縮。若發送的HTTP頭中出現以下訊息,表示你的瀏覽器支援接受對應的gzip壓縮:

程式碼如下:

Accept-Encoding: gzip 支援mod_gzip 
cept-Encoding: deflate 支援: gzip,deflate 同時支援mod_gzip 和mod_deflate

如firebug查看:
0150921134031_7389 .jpg" alt="
Apache
php gzip壓縮輸出的實作方法" />

Accept-Encoding: gzip,deflate 是同時支援mod_gzip 和mod_deflate<strong><p>   如果服務器開啟了對Gzip組件的支持,那麼我們就可以在<span>http.conf或.htaccess裡面進行定制,下面是一個.htaccess配置的簡單實例:</span></p><p><span>mod_gzip 的配置:</span></p><p><span>代碼如下:</span></p><p><span>    # mod_gzip:  <br />    <ifModule mod_gzip.c>  <br />   _gzip_item_<br />include<br /> file .(html?|txt|css|js|php|pl)$  <strong>    mod_gzip_item_</strong>include<br /> handler ^cgi-script$  <strong>    mod_gzip_item_</strong>include<br /> mime ^text/.*  <strong>    mod_gzip_item_</strong>includen_gfid未來_ppimem. ader ^Content-Encoding:.*gzip.*  <br />    <ifModule>  <strong></strong><br /> <br /><br /></span></p><p><span><span><span><span>mod_deflate的設定實例:<span><span><br /><span></span></span></span></span>. </span></span></span></p><p><span>將#LoadModule deflate_module modules/ mod_deflate.so去除開頭的#號<span><span><strong></strong> 程式碼如下:<span></span></span>    # mod_deflate:  </span>    <ifule mod_deflate.c>  696>    AddOutputFilterByType DEFLATE text/plain  </span>    AddOutputFilterByType DEFLATE text /html  </p>    AddOutputFilterByType DEFLATE text/xml  <p>    AddOutputFilterByType DEFLATE text/css  <span>    AddOutputFilterByType DEFLATE text/javascript  <br />    AddOutputFilterByType DEFLATE application/xhtml+xml  </span>    AddOutputFilterByType DEFLATE application/xml  </p>    AddOutputFilterByType DEFLATE application/rss+xml  <p>    AddOutputFilterByType DEFLATE application/atom_xml  </p>    AddOutputFilterByType DEFLATE application/x-javascript  <p>    AddOutputFilterByType DEFLATE application/x-httpd-php  <br />    AddOutputFilterByType DEFLATE image/svg+xml   AddOutputFilterByType DEFLATE image/svg+xml   AddOutputFilterByType DEFLATE image/svg+xml <br /><br /><br /><br /><br /><br />裡
面的文件MIME類型可依自己狀況添加,至於PDF
、圖片、音樂文件之類的這些本身都已經高度壓縮格式,重複壓縮的作用不大,反而可能會因為增加CPU的處理時間及瀏覽器的渲染問題而降低效能。所以就沒必
要再通過Gzip壓縮。透過以上設定後再查看傳回的HTTP頭,出現以下資訊則表示傳回的資料已過壓縮。即網站程式所配置的Gzip壓縮已生效。 <br /><br /><br /><br /><br /><br /><br /><br /><pre name=Content-Encoding: gzip
firebug查看:

apache php gzip壓縮輸出的實作方法注意:1)不管使用mod_gzip 或mod_deflate,此處傳回的資訊都一樣。因為它們都是實現的gzip壓縮方式。 2)CompressionLevel 9是指壓縮程度的等級(設定壓縮比率),取值範圍在從1到9,9是最高等級。據了解,這樣做最高可以減少8成大小的傳輸量(看檔案內容而定),最少也能夠 節省一半。 CompressionLevel 預設可以採用6 這個數值,以維持耗用處理器效能與網頁壓縮品質的平衡. 不建議設定太高,如果設定很高,雖然有很高的壓縮率,但是佔用更多的CPU資源.
3) 對已經是壓縮過的圖片格式如jpg,音樂檔案如mp3、壓縮檔案如zip之類的,就沒必要再壓縮了。
四、mod_gzip 和mod_deflate的主要差異是什麼?使用哪個比較好呢?
       第一個差異是安裝它們的

Apache

Web伺服器

版本的差異:<strong></strong></p> gzip模組來執行壓縮。而<p></p>Apache<p> 2.x官方在開發的時候,就把網頁壓縮考慮進去,內建了mod_deflate 這個模組,用以取代mod_gzip。雖然兩者都是使用的Gzip壓縮演算法,它們的運作原理是類似的。 </p><p><br /></p>       <p>第二個差異是壓縮品質:<span></span><p>       mod_deflate 壓縮速度略快而mod_gzip 的壓縮比略高。一般預設情況下,mod_gzip 會比mod_deflate 多出4%~6%的壓縮量。 </p><p>       那麼,為什麼要使用mod_deflate? </p><p>       <span>第三個差異是伺服器資源的佔用:</span></p><p>       一般來說mod_gzip 對伺服器CPU的佔用較高。 mod_deflate
是專門為確保伺服器的效能而使用的壓縮模組,mod_deflate
需要較少的資源來壓縮檔案。這意味著在高<strong>流量</strong>的伺服器,使用mod_deflate 可能會比mod_gzip 載入速度更快。 </p><p>     
不太明白?簡而言之,如果你的網站,每天不到1000獨立訪客,想要加快網頁的載入速度,就使用mod_gzip。雖然會額外耗費一些伺服器資源,
但也是值得的。如果你的網站每天超過1000獨立訪客,並且使用的是共享的虛擬主機,所分配系統資源有限的話,使用mod_deflate
將會是更好的選擇。 </p><p>     另外,從<strong>Apache</strong> 2.0.45開始,mod_deflate 可使用DeflateCompressionLevel
指令來設定壓縮等級。此指令的值可為1(壓縮速度最快,最低的壓縮質量)至9(最慢的壓縮速度,壓縮率最高)之間的整數,其預設值為6(壓縮速度和壓縮質
 量較為平衡的值)。這個簡單的變化更是使得mod_deflate 可以輕鬆媲美mod_gzip 的壓縮。 </p><p>P.S. 對於沒有啟用以上兩種Gzip模組的虛擬空間,還可以退而求其次使用php的zlib函數庫(同樣需要查看伺服器是否支援)來壓縮文件,只是這種方法使用起來比較麻煩,而且一般會比較耗費伺服器資源,請視情況慎重使用。 </p><p><span>五、zlib.output_compression和ob_gzhandler編碼方式壓縮</span></p><p>      伺服器不支援mod_gzip、mod_deflate模組,若想透過GZIP壓縮網頁內容,可以考慮透過兩種方式,可以透過兩種方式來編碼<span><span>。 </span></span>      1)zlib.output_compression是在網頁內容壓縮的同時將資料傳送至客戶端。 </p><p>       2)ob_gzhandler是等待網頁內容壓縮完畢後才進行發送,相較之下前者效率更高,但需要注意的是,兩者不能同時使用,只能選其一,否則將出現錯誤。 </p><p>       兩者簡單的說明:</p><p></p>    1. zlib.output_compression實作方式<p><span><br /> </span></p><p>    ; Transparent output compression using the zlib library  </p>    ; Valid values for this option are 'off', 'on', or a specific buffer size  <p>    ; to be used for compression (default </p>    ; to be used for compression (default is 4KB)  compression. PHP  <p>    ;   outputs chunks that are few hundreds bytes each as a result of  <br />    ;   compression. If you prefer a larger chunk size for b  compression。 addition.  <br />    ; 註: You need to use zlib.output_handler instead of the standard  <br />    ;   output_handler, or otherwise the output will be corrupted.  <br />    ; http://php.net/zlib.output-compression   🜠 .output-compression -level  <br />    ;zlib.output_compression_level = -1  <br /><br /><br /><br /><br /><br /><br /><br /></p> <p><span><span><span><span> 程式碼如下:<span><span><span> zlib.output_compression = On  <br />    zlib.output_compression_level = 6  <br /></span></span></span></span></span></span></span>info </p><p></p><p><br /><br /></p><p><span>        當zlib.output_compression的Local
Value和MasterValue的值同為On時,表示已經生效,這時候訪問的PHP頁面(包括偽靜態頁面)已經GZIP壓縮了,通過Firebug或
者在線網頁GZIP壓縮檢測工具可偵測到壓縮的效果。 <span>2. ob_gzhandler的實作方式<span><p>如果需要使用ob_gzhandler,則需要關閉zlib.output_compression,把php.ini檔案內容改為:<br />    zlib.output_compression = Off  <br />    zlib.output_compression_level = Off  <br />    zlib.output_compression_level = Off  </p>    zlib.output_compression_level = Off  <p>    zlib.output_compression_level = Off  透過壓縮相關程式碼</p><p> 代碼如下:<br /><br /><br />    if (extension_loaded('zlib')) {  <br />        if (             strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip ') !== FALSE)  <br />        //頁面沒有輸出且瀏覽器可接受GZIP的頁面  <br />        {      }  <br />    }  <br />    //待壓縮的內容  <br />    echo $context;  <br />   );  <br /></p><p><span><span><span><span><span><span><span>         
<br /></span></span></span></span></span></span></span></p><p>最後想說的是,現在主流的瀏覽器預設使用的是HTTP1.1協議,基本
都支援GZIP壓縮,對於IE而言,假如你沒有選中其選單列工具-》Internet 選項-》高級-》HTTP 1.1 設定-》使用 HTTP
1.1,那麼,你將感受不到網頁壓縮後的速度提升所帶來的快感! <span></span>
                
                
                </p>
                    以上就介紹了apache php gzip壓縮輸出的實作方法,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。 <p>
                </p>
                    <p>

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板