首先,我們來看下網(wǎng)頁的加載流程。打開一個(gè)網(wǎng)頁,會(huì)先拉取一個(gè)html頁面,然后瀏覽器解析了這個(gè)html頁面后,會(huì)根據(jù)頁面的內(nèi)容,去拉取javascript、css和圖片文件,終極根據(jù)這些文件,將頁面渲染出來。
我們可以看到,影響一個(gè)網(wǎng)頁展示速度的主要因素不是網(wǎng)頁本身,而是它依靠的一些其它文件。假如優(yōu)化了這些資源的加載速度,那么網(wǎng)頁展示的速度也就上去了。
有哪些簡樸粗暴的方法呢?讓我來逐一列舉:
1.優(yōu)化圖片資源的格局和大小
一個(gè)網(wǎng)頁中,圖片資源的大小占比是最多的,而且單個(gè)的文件的大小也很可觀。因此,在保證圖片質(zhì)量不變的情況下,盡可能的使用高壓縮率的圖片格局,圖片格局可以按照這個(gè)優(yōu)先級(jí)選擇webp > jpeg > png > bmp。同時(shí)也要根據(jù)圖片展示尺寸來拉取大小最為匹配的圖片資源,不要沒事就把原圖拉下來使用。以前我就碰到過這種情況,一個(gè)196*196大小區(qū)域展示的圖片,它的文件竟然達(dá)到了幾兆,最后才發(fā)現(xiàn)把1960*1960分辨率的原圖拉下來了。
2.開啟網(wǎng)絡(luò)壓縮
大部門瀏覽器在發(fā)出哀求時(shí),會(huì)帶上這個(gè)標(biāo)記「Accept-Encoding: gzip, deflate」,表示這個(gè)瀏覽器可以接受以gzip壓縮方式傳輸數(shù)據(jù),假如你的網(wǎng)頁服務(wù)器也支持gzip壓縮數(shù)據(jù),那么數(shù)據(jù)以gzip方式傳輸時(shí),會(huì)減少70~80%的流量
3.使用瀏覽器緩存
統(tǒng)一個(gè)站點(diǎn)下面的不同頁面,往往都會(huì)復(fù)用一部門資源文件,假如把這些資源文件設(shè)置為可緩存的,那么在刷新或者跳轉(zhuǎn)到另一個(gè)頁面時(shí),都無須再從網(wǎng)絡(luò)拉取相關(guān)資源,這樣就大大加快了網(wǎng)頁的加載速度。
4.減少重定向哀求
有的網(wǎng)站對(duì)于不同的終端制作了不同的頁面,好比說在手機(jī)上訪問微博,會(huì)從weibo.com重定向至weibo.cn,每一次重定向都會(huì)導(dǎo)致瀏覽器重新發(fā)起哀求,延長加載時(shí)間。對(duì)于這種情況,應(yīng)該盡可能使用響應(yīng)式設(shè)計(jì),一個(gè)weibo.com站點(diǎn)籠蓋至所有終端。
5.使用CDN存儲(chǔ)靜態(tài)資源
CDN是一種靜態(tài)內(nèi)容分發(fā)網(wǎng)絡(luò),它在每個(gè)省,甚至每個(gè)城市都部署有自己的服務(wù)器,用于分發(fā)這些靜態(tài)內(nèi)容,那么當(dāng)某個(gè)城市的用戶要拉取某個(gè)資源時(shí),他會(huì)首選從本地的CDN服務(wù)器上拉取,這樣可以保證他最快速的獲得該資源。據(jù)磚家統(tǒng)計(jì),網(wǎng)絡(luò)資源中有70%的是靜態(tài)資源。這就意味著,有70%的內(nèi)容產(chǎn)生后是不會(huì)變化,那么將它們?nèi)糠旁贑DN上面,可以晉升這70%的資源的下載速度。
6.減少DNS查詢次數(shù)
良多人喜歡把不同的圖片掛在不同當(dāng)域名下,好比說圖片A掛在a.pm-teacher.com,圖片B掛在b.pm-teacher.com。當(dāng)一個(gè)網(wǎng)頁同時(shí)使用圖片A和圖片B時(shí),瀏覽器需要查詢兩個(gè)域名,要知道,每次解析域名都是會(huì)鋪張時(shí)間的,所以盡可能的將全部圖片放在一個(gè)域名下。
7.壓縮css和js內(nèi)容
這里說的壓縮和第2點(diǎn)并不重復(fù),上面提到的壓縮是不改變文件內(nèi)容的壓縮。而css和js中有大量的空格和變量命名(如hello="hello word";),假如將這些空格去除,并用簡樸的字母來代換變量名(如a="hello word";),那么這些css和js原文件的大小也會(huì)縮小,這樣也對(duì)加快拉取速度是有匡助的。
不知道你有沒有看出來,上面提到的優(yōu)化方案的核心就3點(diǎn):減少哀求數(shù)、減少資源大小、找最快的服務(wù)器。假如你是一個(gè)網(wǎng)站的產(chǎn)品經(jīng)理,快去找你們的開發(fā)確認(rèn)是否有做過類似的優(yōu)化吧。