真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在php項(xiàng)目中使用gzip壓縮輸出-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何在php項(xiàng)目中使用gzip壓縮輸出,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

翁源ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!

一、gzip介紹

         gzip是GNU zip的縮寫(xiě),它是一個(gè)GNU自由軟件的文件壓縮程序,也經(jīng)常用來(lái)表示gzip這種文件格式。軟件的作者是Jean-loup Gailly和Mark Adler。1992年10月31日第一次公開(kāi)發(fā)布,版本號(hào)是0.1,目前的穩(wěn)定版本是1.2.4。

        Gzip主要用于Unix系統(tǒng)的文件壓縮。我們?cè)贚inux中經(jīng)常會(huì)用到后綴為.gz的文件,它們就是GZIP格式的?,F(xiàn)今已經(jīng)成為Internet 上使用非常普遍的一種數(shù)據(jù)壓縮格式,或者說(shuō)一種文件格式。 當(dāng)應(yīng)用Gzip壓縮到一個(gè)純文本文件時(shí),效果是非常明顯的,經(jīng)過(guò)GZIP壓縮后頁(yè)面大小可以變?yōu)樵瓉?lái)的40%甚至更小,這取決于文件中的內(nèi)容。

HTTP協(xié)議上的GZIP編碼是一種用來(lái)改進(jìn)WEB應(yīng)用程序性能的技術(shù)。web開(kāi)發(fā)中可以通過(guò)gzip壓縮頁(yè)面來(lái)降低網(wǎng)站的流量,而gzip并不會(huì)對(duì)cpu造成大量的占用,略微上升,也是幾個(gè)百分點(diǎn)而已,但是對(duì)于頁(yè)面卻能壓縮30%以上,非常劃算。

      利用Apache中的Gzip模塊,我們可以使用Gzip壓縮算法來(lái)對(duì)Apache服務(wù)器發(fā)布的網(wǎng)頁(yè)內(nèi)容進(jìn)行壓縮后再傳輸?shù)娇蛻?hù)端瀏覽器。這樣經(jīng)過(guò)壓縮后實(shí)際上降低了網(wǎng)絡(luò)傳輸?shù)淖止?jié)數(shù)(節(jié)約傳輸?shù)木W(wǎng)絡(luò)I/o),最明顯的好處就是可以加快網(wǎng)頁(yè)加載的速度。

      網(wǎng)頁(yè)加載速度加快的好處不言而喻,除了節(jié)省流量,改善用戶(hù)的瀏覽體驗(yàn)外,另一個(gè)潛在的好處是Gzip與搜索引擎的抓取工具有著更好的關(guān)系。例如 Google就可以通過(guò)直接讀取gzip文件來(lái)比普通手工抓取更快地檢索網(wǎng)頁(yè)。在Google網(wǎng)站管理員工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作為Sitemap被提交的。

      而這些好處并不僅僅限于靜態(tài)內(nèi)容,PHP動(dòng)態(tài)頁(yè)面和其他動(dòng)態(tài)生成的內(nèi)容均可以通過(guò)使用Apache壓縮模塊壓縮,加上其他的性能調(diào)整機(jī)制和相應(yīng)的服務(wù)器端緩存規(guī)則,這可以大大提高網(wǎng)站的性能。因此,對(duì)于部署在Linux服務(wù)器上的PHP程序,在服務(wù)器支持的情況下,我們建議你開(kāi)啟使用Gzip Web壓縮。

二、Web服務(wù)器處理HTTP壓縮的過(guò)程如下:

    1. Web服務(wù)器接收到瀏覽器的HTTP請(qǐng)求后,檢查瀏覽器是否支持HTTP壓縮(Accept-Encoding 信息);

    2. 如果瀏覽器支持HTTP壓縮,Web服務(wù)器檢查請(qǐng)求文件的后綴名;

    3. 如果請(qǐng)求文件是HTML、CSS等靜態(tài)文件,Web服務(wù)器到壓縮緩沖目錄中檢查是否已經(jīng)存在請(qǐng)求文件的新壓縮文件;

    4. 如果請(qǐng)求文件的壓縮文件不存在,Web服務(wù)器向?yàn)g覽器返回未壓縮的請(qǐng)求文件,并在壓縮緩沖目錄中存放請(qǐng)求文件的壓縮文件;

    5. 如果請(qǐng)求文件的新壓縮文件已經(jīng)存在,則直接返回請(qǐng)求文件的壓縮文件;

    6. 如果請(qǐng)求文件是動(dòng)態(tài)文件,Web服務(wù)器動(dòng)態(tài)壓縮內(nèi)容并返回瀏覽器,壓縮內(nèi)容不存放到壓縮緩存目錄中。

下面是兩個(gè)演示圖:

                                      未使用Gzip:

                                     如何在php項(xiàng)目中使用gzip壓縮輸出

                                  開(kāi)啟使用Gzip后:

                                如何在php項(xiàng)目中使用gzip壓縮輸出

三、啟用apache的gzip功能

      Apache上利用Gzip壓縮算法進(jìn)行壓縮的模塊有兩種:mod_gzip 和mod_deflate。要使用Gzip Web壓縮,請(qǐng)首先確定你的服務(wù)器開(kāi)啟了對(duì)這兩個(gè)組件之一的支持。

      雖然使用Gzip同時(shí)也需要客戶(hù)端瀏覽器的支持,不過(guò)不用擔(dān)心,目前大部分瀏覽器都已經(jīng)支持Gzip了,如IE、Mozilla Firefox、Opera、Chrome等。

     通過(guò)查看HTTP頭,我們可以快速判斷使用的客戶(hù)端瀏覽器是否支持接受gzip壓縮。若發(fā)送的HTTP頭中出現(xiàn)以下信息,則表明你的瀏覽器支持接受相應(yīng)的gzip壓縮:


復(fù)制代碼 代碼如下:


Accept-Encoding: gzip 支持mod_gzip 
Accept-Encoding: deflate 支持mod_deflate  

Accept-Encoding: gzip,deflate 同時(shí)支持mod_gzip 和mod_deflate



如firebug查看:

如何在php項(xiàng)目中使用gzip壓縮輸出

Accept-Encoding: gzip,deflate 是同時(shí)支持mod_gzip 和mod_deflate


   如果服務(wù)器開(kāi)啟了對(duì)Gzip組件的支持,那么我們就可以在http.conf或.htaccess里面進(jìn)行定制,下面是一個(gè).htaccess配置的簡(jiǎn)單實(shí)例:

mod_gzip 的配置:


復(fù)制代碼 代碼如下:


    # mod_gzip: 
     
    mod_gzip_on Yes 
    mod_gzip_dechunk Yes 
    mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ 
    mod_gzip_item_include handler ^cgi-script$ 
    mod_gzip_item_include mime ^text/.* 
    mod_gzip_item_include mime ^application/x-javascript.* 
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
   



mod_deflate的配置實(shí)例:

打開(kāi)打開(kāi)apache 配置文件httpd.conf

將#LoadModule deflate_module modules/mod_deflate.so去除開(kāi)頭的#號(hào)


復(fù)制代碼 代碼如下:


    # mod_deflate: 
     
    DeflateCompressionLevel 6 #壓縮率, 6是建議值. 
    AddOutputFilterByType DEFLATE text/plain 
    AddOutputFilterByType DEFLATE text/html 
    AddOutputFilterByType DEFLATE text/xml 
    AddOutputFilterByType DEFLATE text/css 
    AddOutputFilterByType DEFLATE text/javascript 
    AddOutputFilterByType DEFLATE application/xhtml+xml 
    AddOutputFilterByType DEFLATE application/xml 
    AddOutputFilterByType DEFLATE application/rss+xml 
    AddOutputFilterByType DEFLATE application/atom_xml 
    AddOutputFilterByType DEFLATE application/x-javascript 
    AddOutputFilterByType DEFLATE application/x-httpd-php 
    AddOutputFilterByType DEFLATE image/svg+xml 
   



里面的文件MIME類(lèi)型可以根據(jù)自己情況添加,至于PDF 、圖片、音樂(lè)文檔之類(lèi)的這些本身都已經(jīng)高度壓縮格式,重復(fù)壓縮的作用不大,反而可能會(huì)因?yàn)樵黾覥PU的處理時(shí)間及瀏覽器的渲染問(wèn)題而降低性能。所以就沒(méi)必要再通過(guò)Gzip壓縮。通過(guò)以上設(shè)置后再查看返回的HTTP頭,出現(xiàn)以下信息則表明返回的數(shù)據(jù)已經(jīng)過(guò)壓縮。即網(wǎng)站程序所配置的Gzip壓縮已生效。

Content-Encoding: gzip

firebug查看:

如何在php項(xiàng)目中使用gzip壓縮輸出

注意:


1)不管使用mod_gzip 還是mod_deflate,此處返回的信息都一樣。因?yàn)樗鼈兌际菍?shí)現(xiàn)的gzip壓縮方式。

2)CompressionLevel 9是指壓縮程度的等級(jí)(設(shè)置壓縮比率),取值范圍在從1到9,9是高等級(jí)。據(jù)了解,這樣做高可以減少8成大小的傳輸量(看檔案內(nèi)容而定),最少也能夠節(jié)省一半。 CompressionLevel 預(yù)設(shè)可以采用 6 這個(gè)數(shù)值,以維持耗用處理器效能與網(wǎng)頁(yè)壓縮質(zhì)量的平衡. 不建議設(shè)置太高,如果設(shè)置很高,雖然有很高的壓縮率,但是占用更多的CPU資源.
3) 對(duì)已經(jīng)是壓縮過(guò)的圖片格式如jpg,音樂(lè)檔案如mp3、壓縮文件如zip之類(lèi)的,就沒(méi)必要再壓縮了。

四、mod_gzip 和mod_deflate的主要區(qū)別是什么?使用哪個(gè)更好呢?

       第一個(gè)區(qū)別是安裝它們的Apache Web服務(wù)器版本的差異:

       Apache 1.x系列沒(méi)有內(nèi)建網(wǎng)頁(yè)壓縮技術(shù),所以才去用額外的第三方mod_gzip 模塊來(lái)執(zhí)行壓縮。而Apache 2.x官方在開(kāi)發(fā)的時(shí)候,就把網(wǎng)頁(yè)壓縮考慮進(jìn)去,內(nèi)建了mod_deflate 這個(gè)模塊,用以取代mod_gzip。雖然兩者都是使用的Gzip壓縮算法,它們的運(yùn)作原理是類(lèi)似的。

       第二個(gè)區(qū)別是壓縮質(zhì)量:

       mod_deflate 壓縮速度略快而mod_gzip 的壓縮比略高。一般默認(rèn)情況下,mod_gzip 會(huì)比mod_deflate 多出4%~6%的壓縮量。

       那么,為什么使用mod_deflate?

       第三個(gè)區(qū)別是對(duì)服務(wù)器資源的占用:

       一般來(lái)說(shuō)mod_gzip 對(duì)服務(wù)器CPU的占用要高一些。mod_deflate 是專(zhuān)門(mén)為確保服務(wù)器的性能而使用的一個(gè)壓縮模塊,mod_deflate 需要較少的資源來(lái)壓縮文件。這意味著在高流量的服務(wù)器,使用mod_deflate 可能會(huì)比mod_gzip 加載速度更快。

      不太明白?簡(jiǎn)而言之,如果你的網(wǎng)站,每天不到1000獨(dú)立訪(fǎng)客,想要加快網(wǎng)頁(yè)的加載速度,就使用mod_gzip。雖然會(huì)額外耗費(fèi)一些服務(wù)器資源, 但也是值得的。如果你的網(wǎng)站每天超過(guò)1000獨(dú)立訪(fǎng)客,并且使用的是共享的虛擬主機(jī),所分配系統(tǒng)資源有限的話(huà),使用mod_deflate 將會(huì)是更好的選擇。

     另外,從Apache 2.0.45開(kāi)始,mod_deflate 可使用DeflateCompressionLevel 指令來(lái)設(shè)置壓縮級(jí)別。該指令的值可為1(壓縮速度最快,最低的壓縮質(zhì)量)至9(最慢的壓縮速度,壓縮率高)之間的整數(shù),其默認(rèn)值為6(壓縮速度和壓縮質(zhì) 量較為平衡的值)。這個(gè)簡(jiǎn)單的變化更是使得mod_deflate 可以輕松媲美m(xù)od_gzip 的壓縮。

P.S. 對(duì)于沒(méi)有啟用以上兩種Gzip模塊的虛擬空間,還可以退而求其次使用php的zlib函數(shù)庫(kù)(同樣需要查看服務(wù)器是否支持)來(lái)壓縮文件,只是這種方法使用起來(lái)比較麻煩,而且一般會(huì)比較耗費(fèi)服務(wù)器資源,請(qǐng)根據(jù)情況慎重使用。

五、zlib.output_compression和ob_gzhandler編碼方式壓縮

      服務(wù)器不支持mod_gzip、mod_deflate模塊,若想通過(guò)GZIP壓縮網(wǎng)頁(yè)內(nèi)容,可以考慮兩種方式,開(kāi)啟zlib.output_compression或者通過(guò)ob_gzhandler編碼的方式

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

       2)ob_gzhandler是等待網(wǎng)頁(yè)內(nèi)容壓縮完畢后才進(jìn)行發(fā)送,相比之下前者效率更高,但需要注意的是,兩者不能同時(shí)使用,只能選其一,否則將出現(xiàn)錯(cuò)誤。

       兩者的實(shí)現(xiàn)方式做簡(jiǎn)單描述:

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


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


復(fù)制代碼 代碼如下:


    ; Transparent output compression using the zlib library 
    ; Valid values for this option are 'off', 'on', or a specific buffer size 
    ; to be used for compression (default is 4KB) 
    ; Note: Resulting chunk size may vary due to nature of compression. PHP 
    ;   outputs chunks that are few hundreds bytes each as a result of 
    ;   compression. If you prefer a larger chunk size for better 
    ;   performance, enable output_buffering in addition. 
    ; Note: You need to use zlib.output_handler instead of the standard 
    ;   output_handler, or otherwise the output will be corrupted. 
    ; http://php.net/zlib.output-compression 
    zlib.output_compression = Off 

    ; http://php.net/zlib.output-compression-level 
    ;zlib.output_compression_level = -1



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


復(fù)制代碼 代碼如下:


    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í)候訪(fǎng)問(wèn)的PHP頁(yè)面(包括偽靜態(tài)頁(yè)面)已經(jīng)GZIP壓縮了,通過(guò)Firebug或者在線(xiàn)網(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壓縮P壓縮:


復(fù)制代碼 代碼如下:


    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)。

上述就是小編為大家分享的如何在php項(xiàng)目中使用gzip壓縮輸出了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:如何在php項(xiàng)目中使用gzip壓縮輸出-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/dopscs.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部