老鳥請(qǐng)直接看開啟壓縮進(jìn)階篇。
菜鳥還是慢慢隨著老夫的思路看吧,哇哈哈。
什么是壓縮?
大家還記得我們第一次接觸winzip軟件嗎?非常神奇,一個(gè)文件,經(jīng)過(guò)winzip壓縮后,大小可以壓縮成原來(lái)的30%左右。記得當(dāng)年,很多文件,都是壓縮后才可以放到自己的軟盤中。
而對(duì)于網(wǎng)站,也有這樣的壓縮技術(shù),可以讓你的網(wǎng)頁(yè)中的文本類文件瘦身,在用戶完全不知情的情況下,通過(guò)gzip和deflate壓縮程序有效減少了網(wǎng)頁(yè),讓用戶更快的打開網(wǎng)站。
壓縮有多大用處?
通過(guò)一個(gè)小小的測(cè)試軟件,我對(duì)新浪、網(wǎng)易等門戶網(wǎng)站進(jìn)行了訪問(wèn)。
新浪首頁(yè)訪問(wèn)情況:
網(wǎng)易首頁(yè)訪問(wèn)情況:
大家可以明顯的看到,網(wǎng)易和新浪的首頁(yè),經(jīng)過(guò)壓縮后,都縮小了70%以上。
相信大家都知道,當(dāng)一個(gè)網(wǎng)頁(yè),減小到30%后,對(duì)于最終用戶來(lái)說(shuō),打開網(wǎng)站的效率會(huì)提升為原來(lái)的3倍。
備注:
該工具地址http://www.gidnetwork.com/tools/gzip-test.php 大家也可以測(cè)試下自己的網(wǎng)站壓縮后的情況。
用戶不支持壓縮怎么辦?
開啟壓縮后,會(huì)不會(huì)由于用戶無(wú)法訪問(wèn)這種壓縮文件,導(dǎo)致用戶訪問(wèn)文件失敗?
不會(huì),因?yàn)門rident、Gecko、Webkit三種內(nèi)核的瀏覽器,都在發(fā)起請(qǐng)求時(shí),告知服務(wù)器,他們支持什么壓縮格式,如下圖:
而服務(wù)器都是按照發(fā)起請(qǐng)求中用戶支持的壓縮格式,進(jìn)行對(duì)應(yīng)反饋。如果用戶發(fā)起的請(qǐng)求頭中,無(wú)Accept-Enconding頭,就將返回給用戶非壓縮格式。
如何開啟壓縮?
請(qǐng)百度娘之,網(wǎng)上太多教程了,不再贅述。
對(duì)哪些內(nèi)容開啟壓縮呢?
只需要針對(duì)文本類文件的域名開啟壓縮。圖片等,已經(jīng)都是壓縮格式了,再使用壓縮,不會(huì)減少什么文件大小,反而會(huì)導(dǎo)致服務(wù)器負(fù)載變高,以及會(huì)由于這種對(duì)圖片的不規(guī)范壓縮使用導(dǎo)致各種各樣意想不到的問(wèn)題。
所以,開啟壓縮之前,最好先完成域名拆分的工作,具體見如何讓網(wǎng)站打開更快第二彈。
技巧點(diǎn):
開啟壓縮,建議使用apache服務(wù)器。
因?yàn)镮IS服務(wù)器在處理壓縮時(shí)有個(gè)小問(wèn)題,就是第一次被訪問(wèn)的時(shí)候,IIS給出的文件時(shí)非壓縮的,后續(xù)的訪問(wèn),才直接給出壓縮文件。
這個(gè)小的bug,其實(shí)問(wèn)題并不大,但是現(xiàn)在很多網(wǎng)站都在用一些緩存服務(wù)器或者是CDN,就會(huì)導(dǎo)致這個(gè)問(wèn)題被放大,會(huì)導(dǎo)致壓縮啟用并不能完全成功。
而apache是第一次就直接給出壓縮后的文件。
當(dāng)然了,如果你用的是IIS,并且無(wú)法替換apache,那就自己麻煩一些,寫個(gè)腳本,將常用的頁(yè)面,在開啟壓縮后,訪問(wèn)2次,可以減少很多問(wèn)題發(fā)生。
開啟壓縮之進(jìn)階篇
當(dāng)下的中國(guó)網(wǎng)絡(luò)狀況
中國(guó)網(wǎng)絡(luò)誰(shuí)當(dāng)家,當(dāng)然是電信和聯(lián)通兩朵花,但是現(xiàn)在越來(lái)越看到的現(xiàn)象是百花爭(zhēng)艷,除了這兩朵花之外,越來(lái)越多的涌現(xiàn)小ISP。如移動(dòng)、電信通、長(zhǎng)城、方正、歌華有線、光環(huán)新網(wǎng)、甚至南方地區(qū)還有些香港過(guò)來(lái)的小運(yùn)營(yíng)商。
這些小運(yùn)營(yíng)商都有一個(gè)特點(diǎn),就是會(huì)cache文件,他們會(huì)為了減少網(wǎng)間結(jié)算帶寬,而盡量想辦法緩存文件,讓他們的用戶本地訪問(wèn)。
其次,對(duì)于很多中大型公司來(lái)說(shuō),他們也會(huì)搭建自己的緩存服務(wù)器。
另外,還有很多網(wǎng)站,自身都搭建或者在使用第三方的CDN,也都是緩存服務(wù)器。
所以,當(dāng)下的中國(guó)網(wǎng)絡(luò)情況,基本上就是緩存服務(wù)器在提供眾多的服務(wù)。所以,你的開啟壓縮,如果不主動(dòng)配合這些各種各樣的緩存服務(wù)器,那么你out了,你會(huì)發(fā)現(xiàn),你的很多努力,都是笑談,并無(wú)實(shí)際作用。
如何適合當(dāng)下的狀況?如何才可以保證用戶支持壓縮時(shí),網(wǎng)絡(luò)間傳遞的就是你想給他的的壓縮文件?
那么,請(qǐng)緊記以下要點(diǎn),并逐個(gè)落實(shí)。
開啟壓縮時(shí),需要針對(duì)壓縮和非壓縮文件,都返回Vary:Accept-Encoding頭。
這個(gè)頭部是告訴緩存服務(wù)器,要根據(jù)用戶支持的編碼方式提供對(duì)應(yīng)的文件。
該項(xiàng)很重要,很多網(wǎng)站,只是對(duì)壓縮文件開啟該頭。在緩存服務(wù)器中,如果給出的非壓縮的文件不包含該頭部,也就是告知緩存服務(wù)器,當(dāng)用戶請(qǐng)求時(shí),不需要判斷用戶支持的編碼格式,而直接將該文件傳遞。所以,最后導(dǎo)致用戶請(qǐng)求到緩存服務(wù)器時(shí),無(wú)論用戶支持不支持壓縮,都是直接返回非壓縮的文件。
開啟壓縮時(shí),需要同時(shí)對(duì)HTTP1.1和HTTP1.0均開啟壓縮。
大家都是認(rèn)為,HTTP1.0協(xié)議的用戶,肯定是特別老的用戶,肯定是不支持壓縮的,所以,很多網(wǎng)站,都是針對(duì)HTTP1.0協(xié)議提供非壓縮文件。
但是,實(shí)際中,太多太多的緩存服務(wù)器,為了追求最大的兼容性,還在使用HTTP1.0協(xié)議。所以,當(dāng)你只是對(duì)HTTP1.1協(xié)議開啟壓縮時(shí),等于拋個(gè)媚眼給瞎子看。
例如,新浪的緩存服務(wù)器,也是HTTP1.0協(xié)議的,但是他們就很聰明的針對(duì)HTTP1.0也開啟了壓縮服務(wù),如下圖:
作者:王康
文章來(lái)源:xmw2.blog.chinaunix.net