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