減少dns查詢,將要加載的東西,例如css、js等盡量放在一個(gè)域名下,減少dns查詢次數(shù)
TCP連接復(fù)用keep-alived
http 1.0中默認(rèn)是關(guān)閉的,需要在http頭加入"Connection: Keep-Alive",才能啟用Keep-Alive;http 1.1中默認(rèn)啟用Keep-Alive,如果加入"Connection: close ",才關(guān)閉。目前大部分瀏覽器都是用http1.1協(xié)議,也就是說默認(rèn)都會(huì)發(fā)起Keep-Alive的連接請(qǐng)求了,所以是否能完成一個(gè)完整的Keep- Alive連接就看服務(wù)器設(shè)置情況。
http2.0有多路復(fù)用。
HTTP請(qǐng)求
減少cookie體積,不濫用cookie。
ETag等緩存減少下載資源,但仍會(huì)發(fā)送請(qǐng)求,文件沒有被改動(dòng)過,則返回304。
ETag通過生成一段字符串(MD5等)驗(yàn)證請(qǐng)求資源是否改變。
Last-Modified客戶端第二次請(qǐng)求此URL時(shí),根據(jù)HTTP協(xié)議的規(guī)定,瀏覽器會(huì)向服務(wù)器傳送If-Modified-Since報(bào)頭,詢問該時(shí)間之后文件是否有被修改過:如果服務(wù)器端的資源沒有變化,則自動(dòng)返回 HTTP 304(Not Changed.)狀態(tài)碼,內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量。
使用cache-control,時(shí)間未到期不會(huì)發(fā)送請(qǐng)求(設(shè)置max-control)'setHeader('Cache-Control','max-age=xx')。
瀏覽器會(huì)同時(shí)發(fā)送多個(gè)請(qǐng)求,每個(gè)域名請(qǐng)求有數(shù)量限制(增請(qǐng)求加域名數(shù)量,與dns矛盾)。當(dāng)文件很少時(shí)減少域名,當(dāng)文件很多時(shí),適當(dāng)增加域名。
使用gzip壓縮 請(qǐng)求端加上content-encoding:gzip(消耗用戶cpu,文件越大越需要gzip)。
<!DOCTYPE html>一定要寫,不能寫錯(cuò)。
盡量減少標(biāo)簽。
動(dòng)態(tài)dns 轉(zhuǎn)到相應(yīng)的CDN(內(nèi)容分布網(wǎng)絡(luò))。
css放head js放</body>前
css下載完后才會(huì)開始渲染,放在后面也會(huì)阻塞渲染,放在上面早一些加載css。
一般js不會(huì)影響完整的頁面,放在后面盡早顯示頁面,減少空白頁面的時(shí)間。放在后面可以獲取之前的節(jié)點(diǎn)。