最近在作項目的時候用到了gzip,發現它的壓縮能力仍是很強大的,基本可以壓縮50%的文本文件大小。之前有所瞭解,但不夠深刻,如今詳細瞭解下。javascript
根據百度百科的解釋:gzip是GNUzip的縮寫,它是一個GNU自由軟件的文件壓縮程序。
減小文件大小有兩個明顯的好處,一是能夠減小存儲空間,二是經過網絡傳輸文件時,能夠減小傳輸的時間。因此gzip被普遍用在網絡傳輸上,畢竟可以節省傳輸的時間嘛。gzip算法瞭解php
我使用的php的codeigniter框架,在框架中能夠經過配置開啓gzip壓縮。原理是加載zlib擴展,而後調用相關函數進行壓縮,參考。這裏有一個很明顯缺點是,你不能過早地輸出一些東西給你的瀏覽器。什麼意思呢,就是你不能在壓縮前,就輸出內容,一個空格也不行,不然會出現整個頁面的空白。好比,你有一個變量忘記設置了,出現了php警告,那麼整個頁面都顯示不出來。這無疑是很不友好的。固然,生產環境不多出現提早輸出的問題,可是,萬一有問題,整個頁面顯示不了也太致命了。並且還有別的缺點,好比沒法對javascript,css和其餘圖片文件進行壓縮,因此對於web傳輸來講,使用php不是一個最好的選擇。css
更好的選擇,我以爲是經過web服務器進行壓縮。使人高興的是,各大主流web服務器都提供了 gzip 壓縮功能呀。好比說,在 nginx 服務器中,只要在配置文件 nginx.conf 中加上一些gzip的配置,參考, 一個簡單的配置便可。注意在 gzip_types 這個配置項加上你須要壓縮的文件類型。html
我作了對比試驗:java
壓縮前:
nginx
壓縮後
web
93.5kb變成30多kb, 差異仍是很大的。算法
我沒有本身作試驗,參考網上的文章,gzip 對於文本文件的壓縮率較高,對於圖片的壓縮率有限。瀏覽器
優勢固然很明顯了,就是能夠減小文件大小,提升傳輸的速率。 缺點是,壓縮的過程會增長服務器的運算量,影響服務器的性能。因此,gzip的壓縮級別不能開過高了。這裏還有一個優化方案,可讓nginx加載http_gzip_static_module 模塊,看名字就知道了,就是本身先生成一個同名的靜態的gzip文件,這樣就不用每次都壓縮了。能夠參考。服務器