據(jù)調(diào)查,網(wǎng)頁大小在2013年平均增長了32%,平均達(dá)到了1.7M,單獨的HTTP請求達(dá)到96個,說實話,這是一個令人震驚的數(shù)字,而且這只是個平均值,有一半的網(wǎng)站會大于這個值。
那么,一個“頁面超重”的網(wǎng)站有什么影響呢?具體來說,有以下4點:
①、網(wǎng)站代碼越多,用戶下載的就越多,加載速度就會越慢。在國內(nèi),并不是每個人都能享受20M的寬帶,每一個開發(fā)者心里都很清楚,用戶不愿意等。
②、眾所周知,移動互聯(lián)網(wǎng)發(fā)展迅速,對于2G網(wǎng)絡(luò)來說,加載1.7M的頁面甚至需要一分鐘時間。
③、影響搜索引擎抓取速度將會對網(wǎng)站排名造成很大影響。
④、對于開發(fā)者來說,代碼量越大,就越不容易更新和維護(hù)。
如今已經(jīng)有很多人開始關(guān)注這個問題,并出現(xiàn)了很多優(yōu)化的工具,而且這些技術(shù)都非常容易上手,不需要花太多時間,也不需要重新開發(fā)。
在本文中,馬海祥會給大家一些建議,雖說前三個建議實際上不能給“網(wǎng)頁減肥”,但它們?nèi)阅苡行У募涌炀W(wǎng)頁加載速度。
1、用GZIP格式壓縮
gzip是GNUzip的縮寫,它是一個GNU自由軟件的文件壓縮程序。它是Jean-loupGailly和MarkAdler一起開發(fā)的,第一次公開發(fā)布版本是1992年10月31日發(fā)布的版本0.1,1993年2月發(fā)布了版本1.0。
我們在Linux中經(jīng)常會用到后綴為.gz的文件,它們就是GZIP格式的,現(xiàn)今已經(jīng)成為Internet上使用非常普遍的一種數(shù)據(jù)壓縮格式,或者說一種文件格式。
HTTP協(xié)議上的GZIP編碼是一種用來改進(jìn)WEB應(yīng)用程序性能的技術(shù),大流量的WEB站點常常使用GZIP壓縮技術(shù)來讓用戶感受更快的速度。
這一般是指WWW服務(wù)器中安裝的一個功能,當(dāng)有人來訪問這個服務(wù)器中的網(wǎng)站時,服務(wù)器中的這個功能就將網(wǎng)頁內(nèi)容壓縮后傳輸?shù)絹碓L的電腦瀏覽器中顯示出來。
一般對純文本內(nèi)容可壓縮到原大小的40%,這樣傳輸就快了,效果就是你點擊網(wǎng)址后會很快的顯示出來,當(dāng)然這也會增加服務(wù)器的負(fù)載,一般服務(wù)器中都安裝有這個功能模塊的。
根據(jù)W3C組織調(diào)查,大部分的網(wǎng)站都沒有啟用壓縮功能。
2、支持瀏覽器緩存
如果瀏覽器支持緩存,我們就不用重復(fù)下載網(wǎng)頁資源,最簡單的設(shè)置緩存方法是在響應(yīng)頭中添加相應(yīng)的內(nèi)容,包括:Expires header,Last-Modified等。
你可以可以通過配置服務(wù)器來自動添加這些屬性,比如你在Apache服務(wù)器中配置緩存所有的照片一個月:
ExpiresActive On
ExpiresDefault "access plus 1 month"
3、使用內(nèi)容分發(fā)網(wǎng)絡(luò) (CDN)
CDN的全稱是Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。其目的是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡(luò)架構(gòu),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)“邊緣”,使用戶可以就近取得所需的內(nèi)容,提高用戶訪問網(wǎng)站的響應(yīng)速度。
CDN有別于鏡像,因為它比鏡像更智能,或者可以做這樣一個比喻:CDN=更智能的鏡像+緩存+流量導(dǎo)流。
因而,CDN可以明顯提高Internet網(wǎng)絡(luò)中信息流動的效率,從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小、用戶訪問量大、網(wǎng)點分布不均等問題,提高用戶訪問網(wǎng)站的響應(yīng)速度。
為更好地理解CDN,讓我們看一下CDN的工作流程,當(dāng)用戶訪問已經(jīng)加入CDN服務(wù)的網(wǎng)站時,首先通過DNS重定向技術(shù)確定最接近用戶的最佳CDN節(jié)點,同時將用戶的請求指向該節(jié)點。
當(dāng)用戶的請求到達(dá)指定節(jié)點時,CDN的服務(wù)器(節(jié)點上的高速緩存)負(fù)責(zé)將用戶請求的內(nèi)容提供給用戶。
具體流程為: 用戶在自己的瀏覽器中輸入要訪問的網(wǎng)站的域名,瀏覽器向本地DNS請求對該域名的解析,本地DNS將請求發(fā)到網(wǎng)站的主DNS,主DNS根據(jù)一系列的策略確定當(dāng)時最適當(dāng)?shù)腃DN節(jié)點,并將解析的結(jié)果(IP地址)發(fā)給用戶,用戶向給定的CDN節(jié)點請求相——應(yīng)網(wǎng)站的內(nèi)容。
以上三個方法可以有效地加快頁面的訪問速度(更多的方法可查看馬海祥博客《提升網(wǎng)站頁面打開速度的12個建議》相關(guān)介紹),現(xiàn)在我們將對你的代碼進(jìn)行診斷,幫助我們給頁面減肥。
4、刪除不需要的資源
當(dāng)你不再需要一個組件的時候,你應(yīng)該刪掉它的CSS和JavaScript代碼,如果這些代碼都單獨放在一個文件中,那刪掉它們也不是難事,但如果已經(jīng)沒有用的代碼和其它代碼在一個文件中,那你肯定要費(fèi)不少精力去刪掉它們。
這個時候你就需要使用第三方的工具來幫你一鍵解決,比如JSLint,Dust-Me Selectors,CSS Usage或是像grunt-uncss一樣的構(gòu)建工具。
5、style和font重復(fù)定義的沉余代碼
要充分利用好CSS代碼定義自己的顏色大小等,有些網(wǎng)站既用了CSS代碼定義了之后又去使用style或者是font這樣的代碼進(jìn)行定義,這樣就無形中增加了無用代碼,容易造成代碼冗余,因此我們要對這樣的代碼進(jìn)行壓縮,實現(xiàn)代碼精簡。
6、通用和最小化CSS
理想情況下,需要一個單獨的CSS文件,讓每個頁面都調(diào)用這一個布局,當(dāng)然,如果你想要支持老版本的IE,你就得多弄一個CSS文件。
另外,馬海祥還要提醒大家一點:當(dāng)你把它們構(gòu)建到服務(wù)器上之前,你應(yīng)該把代碼間所有不必要的格式都刪掉。
有很多預(yù)處理工具都可以幫你解決這件麻煩事,比如Sass,LESS和Stylus。
有一些方法可以幫助你直接合并多個CSS文件,在Windows上:
copy file1.css+file2.css file.css
在Mac或Linux上:
cat file1.css file2.css > file.css
你可以把得到的CSS文件再經(jīng)過在線的CSS壓縮工具刪除格式化。
最后,在head標(biāo)簽中加載所有的CSS,這樣瀏覽器就知道你的頁面樣式不用多次重繪了。
7、通用和最小化的JavaScript
利用外部文件,我們可以用Javascript代碼和CSS代碼放在外部文件里面,在我們的HTML代碼里面加上調(diào)用代碼進(jìn)行調(diào)用即可,如果打開一個網(wǎng)站去檢查它的源文件,前面如果有大量的Javascript代碼和CSS代碼就容易使得網(wǎng)站有用的內(nèi)容文字部分推到后面去了,是不利于搜索引擎抓取的。
據(jù)馬海祥博客收集的數(shù)據(jù)顯示:平均每個頁面加載了18個javascript文件,雖然把像jQuery這樣的庫文件單獨分開非常實用,但是你自己的JavaScript代碼應(yīng)該保持通用和最小化。
同樣很多第三方的工具可以幫你解決這樣事情,比如YUI Compressor,Closure Compiler和我最喜歡用的The JavaScript CompressorRater,簡化的JavaScript代碼會加快網(wǎng)頁的訪問速度,減少HTTP請求次數(shù)。
最后,最好在HTML的body標(biāo)簽后放置JavaScript引用代碼,這樣能保證JavaScript代碼不影響到其它內(nèi)容的加載。
8、減少頁面嵌套的表格
對于表格要盡量少使用,尤其是嵌套的表格部分,雖然CSS排版使得我們編寫代碼更加的精簡容易,但往往也是少不了表格的使用的,我們可以不去避免,但一定要減少使用多層嵌套的表格,不要產(chǎn)生沒有用的代碼。
9、網(wǎng)站圖片的優(yōu)化
對于一些圖片站來說,加載錯誤的圖片格式會對你的網(wǎng)頁造成很大影響,所以,馬海祥建議圖片站的站長一定要多對圖片做些優(yōu)化。
(1)、圖片優(yōu)化原則
一般來說選取圖片我們應(yīng)用遵循如下原則:
①、照片使用JPG格式。
②、其它所有的圖片都使用PNG格式(具體可查看馬海祥博客《JPG、PNG和GIF圖片的基本原理及優(yōu)化方法》的相關(guān)介紹)。
(2)、調(diào)整大圖的大小
目前智能機(jī)所拍出的照片越來越大,你不可能把原照片直接展示在頁面中,普通的編輯器都會直接上傳原圖,這樣會讓頁面的加載速度慢到另一個級別,在正常的照片處理中,一般都沒有必要給用戶高質(zhì)量的圖片展示,所以,你需要一個自動調(diào)整圖片大小的工具。
需要注意的是,圖片的尺寸是不能超過容量的大小的,這樣一來頁面加載了全圖,卻無法展示出來,現(xiàn)在照片的尺寸基本上都超過電腦顯示屏的尺寸了。
圖片的大小在網(wǎng)頁總大小中占很大的比重,圖片減小50%會導(dǎo)致整體頁面大小減少75%,所以你應(yīng)該認(rèn)真解決一下圖片的加載(具體可查看馬海祥博客《交互設(shè)計的三大隱形機(jī)制:加載、刷新和緩存》的相關(guān)介紹)。
(3)、進(jìn)一步壓縮圖片
僅僅調(diào)優(yōu)圖片的大小是不夠的,你應(yīng)該通過第三方工具對圖片進(jìn)行分析,進(jìn)一步壓縮圖片。
比較好用的工具有OptiPNG,PNGOUT,jpegtran和jpegoptim,這些工具大都能安裝成獨立的工具或是整合到開發(fā)過程中,另外像Smush這樣的工具,還可以直接在云端處理。
10、刪除不必要的字體和注釋
Web fonts已經(jīng)徹底改變了字體的設(shè)計,它減少了很多不必要的文本,然而,目前的字體仍然會給你的網(wǎng)頁帶來多余的字節(jié)。
如果你使用超過兩種字體,這就已經(jīng)開始對性能造成影響了。
網(wǎng)頁代碼盡量少用注釋,我們知道一段程序里面加上注釋能夠便于我們快速找到和理解具體代碼對應(yīng)的功能,對于編程人員修改網(wǎng)頁是有幫助的,但是這樣的代碼對于搜索引擎來說是沒有任何的意義的,只能說是噪聲,因此我們要減少網(wǎng)頁代碼里面出現(xiàn)的注釋部分。
我相信大部分網(wǎng)站都可以通過以上的優(yōu)化減小大概30%-50%的重量,但是身為一個完美主義的開發(fā)者這是遠(yuǎn)遠(yuǎn)不夠的,我們在接下來的系列文章中會繼續(xù)對網(wǎng)站瘦身進(jìn)行深入研究。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!