準(zhǔn)則(概述)

  • 減少 HTTP 請求

  • 使用CDN加速

  • 避免空的src或href屬性值

  • 增加過期頭

  • 啟GZIP壓縮

  • 把css文件放到頭部

  • 把javascript放到尾部

  • 避免使用css表達(dá)式

  • 刪除不使用的css語句

  • 對javascript、css代碼進(jìn)行壓縮

  • 減少重繪

減少HTTP請求

減少HTTP請求是上面性能準(zhǔn)則中最為顯著的一條,我們可以分為三個(gè)主要方面來討論

  • 使用并行連接
    開發(fā)人員往往只考慮服務(wù)器端對性能的影響卻疏忽了瀏覽器端的限制,比如有多少資源可以在同一時(shí)間加載。HTTP1.1協(xié)議明確的限制了單個(gè)用戶在同一時(shí)間不能保持兩個(gè)以上的連接,但是,現(xiàn)代瀏覽器大部分都突破了這個(gè)限制,很多瀏覽器可以支持四個(gè)甚至六個(gè)并行的連接。同樣的,你也可以將資源文件散列到不同的域名下面,這種做法充分的利用了瀏覽器并發(fā),所以可以提高加載效率,但是由于DNS的查詢有耗時(shí),太多的域名解析又會(huì)使性能降低。

  • 合并資源文件
    并行鏈接的討論得出一個(gè)結(jié)論,大一些的文件比小一些的文件好,雖然說這個(gè)說法聽起來有些別扭,但是在現(xiàn)今的網(wǎng)絡(luò)環(huán)境里,這個(gè)說法可以得到證實(shí)(體積大的文件比多個(gè)小文件加載快)。此外每個(gè)HTTP請求在時(shí)間上和帶寬上至少會(huì)產(chǎn)生一些開銷,如果可以合并資源,減少HTTP請求,會(huì)提升一定的性能。

  • 使用圖片精靈(css sprite)
    這個(gè)名詞應(yīng)該比較熟悉和常用,它的意思就是把幾張圖片合并成一張。這是一種有效減少HTTP請求的方法,在使用圖片的時(shí)候你只需要使用一些css的定位來決定這個(gè)圖片的位置即可。當(dāng)我們使用其中的一個(gè)圖標(biāo)時(shí),其他的圖片也會(huì)被緩存(不需要再次請求)如果有100個(gè)圖標(biāo)則可以減少99次HTTP請求。

使用CDN加速(內(nèi)容分發(fā)系統(tǒng))

CDN是一個(gè)擁有很多服務(wù)器、經(jīng)過策略性部署的、可以覆蓋全球的網(wǎng)絡(luò)系統(tǒng),當(dāng)用戶訪問一個(gè)比較大的網(wǎng)站時(shí),CDN會(huì)從最近的一個(gè)節(jié)點(diǎn)為用戶提供服務(wù)。但是動(dòng)態(tài)數(shù)據(jù)的處理最好放在集中的服務(wù)器中,因?yàn)榭绲赜蛲綌?shù)據(jù)庫是一個(gè)令開發(fā)者頭痛的問題,所有大多數(shù)互聯(lián)網(wǎng)公司都把購買、登陸等數(shù)據(jù)相關(guān)的事物放到一個(gè)地方處理。另外,CDN服務(wù)是很貴的,如果網(wǎng)站的流量值得去付出這么多錢,它無疑會(huì)給性能帶來提升。

避免空的src和href屬性

我們使用javascript給空的src賦值時(shí),javascript放在文檔的最后,此時(shí)雖然src是空的仍然會(huì)發(fā)出一個(gè)HTTP請求。當(dāng)我們點(diǎn)擊一個(gè)空的href屬性的鏈接時(shí),同樣會(huì)發(fā)出一個(gè)HTTP請求,雖然這個(gè)HTTP請求不會(huì)有影響加載時(shí)間但是會(huì)給服務(wù)端造成一定的流量浪費(fèi)。我們可以創(chuàng)建一個(gè)帶有描述性信息的很href屬性,并阻止這次HTTP請求
<a href="#SometingDescriptive" id="TriggerName">TriggerName</a> <script type="text/javascript"> $("#TriggerName").click(function (e) { e.prventDefaulet(); // 取消默認(rèn)行為 ... }); </script>
另外,空的src和href也是會(huì)產(chǎn)生報(bào)錯(cuò)的

增加過期頭

網(wǎng)友評論