針對(duì)現(xiàn)在的網(wǎng)民來說,時(shí)間就是金錢,你的網(wǎng)頁慢“對(duì)不起,我換一個(gè),網(wǎng)站那么多總有一個(gè)快的”。
相信有很多用網(wǎng)頁看盜版小說的小伙伴就深有體會(huì),“打開一個(gè)小說頁面老半天,看個(gè)小說都費(fèi)勁,不好意思,pass掉,換個(gè)反應(yīng)快的網(wǎng)站繼續(xù)看“。
針對(duì)搜索引擎來說,“既然網(wǎng)民不喜歡你,我也不喜歡你,對(duì)不起,首頁不適合你呆,下去吧,讓別人來,別站著茅坑不拉屎”,特別是百度要求移動(dòng)端網(wǎng)頁打開要小于3秒,最好1.5秒。
于是乎,不知不覺間,你不知排名莫名的掉了多少,你不知流失了多少流量,你不知流失了多少客戶,流失了多少金錢,對(duì)于大型網(wǎng)站尤為致命。所以我們必須要知道網(wǎng)站加載速度為何慢,前面福州SEO印秀團(tuán)隊(duì)也更新過有一篇‘’網(wǎng)頁打開速度慢怎么辦‘’的文章,大家可以綜合來看,這里再和大家深度剖析一下。
首先我們要明白網(wǎng)頁加載原理,從url到網(wǎng)頁形成,中間經(jīng)歷了些什么,才知道怎么處理,怎么提速。域名解析過程這里就不說了,我們說說頁面加載過程。
html網(wǎng)頁加載流程(瀏覽器渲染過程)
1、用戶輸入網(wǎng)址(假設(shè)該網(wǎng)址第一次在該瀏覽器打開,沒有緩存),瀏覽器向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器返回html文件。
2、瀏覽器載入html文件,開始解析,從上往下開始解析。
3、解析過程中,瀏覽器發(fā)現(xiàn)標(biāo)簽內(nèi)有一個(gè)外部引用的css文件,然后瀏覽器向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器返回css文件,瀏覽器開始下載。
4、瀏覽器繼續(xù)載入下面的代碼,而后下載好了css,并開始渲染頁面,形成DOM樹。
5、瀏覽器繼續(xù)載入網(wǎng)頁代碼,又發(fā)現(xiàn)內(nèi)一個(gè)js引用文件,然后瀏覽器開始發(fā)出請(qǐng)求,服務(wù)器返回js文件,并阻塞并行的文件下載和解析,直到執(zhí)行完畢。
6、瀏覽器繼續(xù)載入網(wǎng)頁代碼,發(fā)現(xiàn)有js腳本,則會(huì)立即執(zhí)行,并阻塞后續(xù)資源下載與執(zhí)行,直到執(zhí)行完畢。
7、瀏覽器繼續(xù)載入,發(fā)現(xiàn)中標(biāo)簽引用了一張圖片,會(huì)向服務(wù)器發(fā)出請(qǐng)求下載圖片,瀏覽器在下載圖片的同時(shí)會(huì)繼續(xù)渲染后面的代碼。
8、圖片下載完成,但由于圖片占了一定的頁面體積,影響了后面的布局,此時(shí)瀏覽器會(huì)重新渲染這段代碼。
9、瀏覽器繼續(xù)載入代碼,發(fā)現(xiàn)中的js,如果是內(nèi)置腳本(引用js需要請(qǐng)求下載)則直接執(zhí)行,暫停后續(xù)載入,直至執(zhí)行完成,而后繼續(xù)載入后續(xù)代碼,再進(jìn)行頁面渲染,如js改變了頁面樣式,瀏覽器還會(huì)重新渲染這部分代碼。
10、直到最后全部代碼執(zhí)行完畢,頁面渲染完成,展現(xiàn)出來。
網(wǎng)頁加載速度慢的原因
1、js文件請(qǐng)求過多,加長了頁面渲染時(shí)間。
2、重復(fù)渲染次數(shù)過多,浪費(fèi)時(shí)間。
3、圖片、視頻資源過大,加載慢。
提高網(wǎng)頁加載速度的方法
1、css分塊
一般情況下,js的執(zhí)行很依賴于前面的css樣式,都是等css渲染完畢后開始執(zhí)行,否則找不到元素;所以可以將css分成幾塊,首頁的css 單獨(dú)放一塊進(jìn)行執(zhí)行,減少首次加載網(wǎng)頁的白屏?xí)r間。
2、js執(zhí)行順序
(1)js中有defer=”true”、async=”true”兩個(gè)屬性值,前者表示要等到DOM加載完成后,再按順序執(zhí)行指定腳本,后者表示異步執(zhí)行且不會(huì)依賴于任何js和css,下載完成就會(huì)立即執(zhí)行(執(zhí)行時(shí)會(huì)暫停渲染),不會(huì)阻斷當(dāng)前頁面的渲染。
所以當(dāng)我們的js滿足這兩個(gè)標(biāo)簽時(shí),可以使用讓其最后執(zhí)行或異步執(zhí)行,減少頁面渲染時(shí)間。
(2)我們也可以將js放到body最后等頁面渲染完成再執(zhí)行。
3、網(wǎng)頁減肥
(1)刪除網(wǎng)頁中多余的空格、沒用的注釋。
(2)將內(nèi)置js,css移動(dòng)到外部文件,免得多次渲染。
(3)將一些可用css寫出來的問題代替圖片。
(4)可以用一些壓縮工具把代碼壓縮一下。
4、減少文件,減少請(qǐng)求
網(wǎng)頁中若有很多個(gè)js或css,最好將其合并為一個(gè)js或css文件,減少請(qǐng)求次數(shù)。
5、重復(fù)數(shù)據(jù)存入緩存
對(duì)重復(fù)使用的數(shù)據(jù)進(jìn)行緩存,提高二次加載速度。
6、指定圖片、表格大小
內(nèi)置樣式,指定圖片,表格的大小,以免重復(fù)渲染,讓瀏覽器直接執(zhí)行。
7、關(guān)于cdn加速
這個(gè)沒啥好說的,選擇優(yōu)質(zhì)的dns服務(wù)商就可以了。至于服務(wù)器這里就不提了,一個(gè)字“好”就行,推薦阿里云,阿里云的服務(wù)器技術(shù)確實(shí)沒得說,就是快。
小貼士:關(guān)于圖片和視頻等大資源的話,大家可以使用阿里云對(duì)象存儲(chǔ)技術(shù)(Object Storage Service,簡稱OSS),會(huì)提高加載速度,大家自個(gè)兒研究吧。