日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

前端性能優(yōu)化的另一種方式

 quasiceo 2016-08-09

最近在都一本書(shū)叫《web性能權(quán)威指南》谷歌公司高性能團(tuán)隊(duì)核心成員的權(quán)威之作。

一直聽(tīng)說(shuō)HTTP2.0,對(duì)此也僅僅是耳聞,沒(méi)有具體研讀過(guò),這次正好有兩個(gè)篇章,分別講HTTP1.1和HTTP2.0。

兩者還能好好對(duì)比一下,兩者之間的巨大區(qū)別,以及HTTP2.0解決了哪些實(shí)際問(wèn)題。

無(wú)論什么網(wǎng)絡(luò),也不管所用網(wǎng)絡(luò)協(xié)議是什么版本,所有應(yīng)用都應(yīng)該致力于消除或減少不必要的網(wǎng)絡(luò)延遲,將需要傳輸?shù)臄?shù)據(jù)壓縮至最少

HTTP2.0就是為了做這些優(yōu)化而出現(xiàn)的。

 

一、HTTP1.1的幾個(gè)特點(diǎn)

1)持久連接

每個(gè)TCP連接開(kāi)始都有三次握手,要經(jīng)歷一次客戶端與服務(wù)器間完整的往返,而開(kāi)啟了持久化連接就能不必每次都要握手。

在連接中有這個(gè)屬性的就是打開(kāi)了持久化連接。下圖展示了通過(guò)持久 TCP 連接取得 HTML 和 CSS 文件:

 

2)HTTP管道

持久HTTP多次請(qǐng)求必須嚴(yán)格滿足先進(jìn)先出(FIFO)的隊(duì)列順序:發(fā)送請(qǐng)求,等待響應(yīng)完成,再發(fā)送客戶端隊(duì)列中的下一個(gè)請(qǐng)求。

HTTP管道可以讓我們把FIFO隊(duì)列從客戶端(請(qǐng)求隊(duì)列)遷移到服務(wù)器(響應(yīng)隊(duì)列)。

這樣的話在第一個(gè)請(qǐng)求完成后,能馬上開(kāi)始處理第二個(gè)請(qǐng)求。

但HTTP 1.x不允許一個(gè)連接上的多個(gè)響應(yīng)數(shù)據(jù)交錯(cuò)到達(dá)(多路復(fù)用),因而一個(gè)響應(yīng)必須完全返回后,下一個(gè)響應(yīng)才會(huì)開(kāi)始傳輸。

也就是說(shuō)即使客戶端同時(shí)發(fā)送了兩個(gè)請(qǐng)求,而且CSS資源先準(zhǔn)備就緒,服務(wù)器也會(huì)先發(fā)送HTML響應(yīng),然后再交付CSS。

HTTP2.0就可以多路復(fù)用并可以按優(yōu)先級(jí)返回響應(yīng)。

 

3)度量和控制協(xié)議開(kāi)銷

HTTP 1.0增加了請(qǐng)求和響應(yīng)首部,以便雙方能夠交換有關(guān)請(qǐng)求和響應(yīng)的元信息。

很少改變的接收和傳輸首部、緩存指令、cookie等,所有這些未經(jīng)壓縮的HTTP元數(shù)據(jù)經(jīng)常會(huì)給每個(gè)HTTP請(qǐng)求增加幾千字節(jié)的協(xié)議開(kāi)銷。

YSlow中有23條規(guī)則,第20條就是“Use Cookie-Free Domains for Components”,請(qǐng)求的時(shí)候?qū)ookie去除。

而在HTTP2.0中可以首部壓縮,減少上面的開(kāi)銷提升性能。

 

4)連接與拼合

快的請(qǐng)求是不用請(qǐng)求,減少請(qǐng)求次數(shù)總是最好的性能優(yōu)化手段。

HTTP 1.x中,可以考慮把多個(gè)資源捆綁打包到一塊,通過(guò)一次網(wǎng)絡(luò)請(qǐng)求獲取。

而在HTTP2.0中可以多向請(qǐng)求和響應(yīng),消除了請(qǐng)求多個(gè)資源就要使用多個(gè)TCP連接的限制。

 

5)嵌入資源

把資源嵌入文檔可以減少請(qǐng)求的次數(shù)。

比如,JavaScript和CSS代碼,通過(guò)適當(dāng)?shù)膕cript和style塊可以直接放在頁(yè)面中。

而圖片甚至音頻或PDF文件,都可以通過(guò)數(shù)據(jù)URI(data:[mediatype][;base64],data)的方式嵌入到頁(yè)面中。

而在HTTP2.0中有個(gè)服務(wù)器推送,與嵌入資源唯一的不同就是可以把這個(gè)過(guò)程從應(yīng)用中拿出來(lái),放到HTTP協(xié)議本身來(lái)實(shí)現(xiàn)。

 

二、HTTP2.0的特點(diǎn)

1)二進(jìn)制分幀層

HTTP 2.0性能增強(qiáng)的核心,全在于新增的二進(jìn)制分幀層,它定義了如何封裝HTTP消息并在客戶端與服務(wù)器之間傳輸。

接下來(lái)說(shuō)的幾個(gè)特點(diǎn)都是基于這個(gè)機(jī)制來(lái)實(shí)現(xiàn)的。

 

2)流、消息和幀

所有HTTP 2.0通信都在一個(gè)連接上完成,這個(gè)連接可以承載任意數(shù)量的雙向數(shù)據(jù)流。

每個(gè)數(shù)據(jù)流以消息的形式發(fā)送,而消息由一或多個(gè)幀組成,這些幀可以亂序發(fā)送,然后再根據(jù)每個(gè)幀首部的流標(biāo)識(shí)符重新組裝。

簡(jiǎn)言之,HTTP 2.0把HTTP協(xié)議通信的基本單位縮小為一個(gè)一個(gè)的幀,這些幀對(duì)應(yīng)著邏輯流中的消息。

相應(yīng)地,很多流可以并行地在同一個(gè)TCP連接上交換消息。

 

3)多向請(qǐng)求與響應(yīng)

在HTTP 1.x中,如果客戶端想發(fā)送多個(gè)并行的請(qǐng)求以及改進(jìn)性能,那么必須使用多個(gè)TCP連接。

HTTP 2.0中的二進(jìn)制分幀層突破了限制:客戶端和服務(wù)器可以把HTTP消息分解為互不依賴的幀,然后亂序發(fā)送,最后再在另一端把它們重新組合起來(lái)。

 

4)請(qǐng)求優(yōu)先級(jí)

把HTTP消息分解為很多獨(dú)立的幀之后,就可以通過(guò)優(yōu)化這些幀的交錯(cuò)和傳輸順序,進(jìn)一步提升性能。

為了做到這一點(diǎn),每個(gè)流都可以帶有一個(gè)31比特的優(yōu)先值。

如果服務(wù)器不理睬優(yōu)先值,可能導(dǎo)致應(yīng)用響應(yīng)變慢:瀏覽器明明在等關(guān)鍵的CSS和JavaScript,服務(wù)器卻在發(fā)送圖片,從而造成渲染阻塞。

 

5)每個(gè)來(lái)源一個(gè)連接

大多數(shù)HTTP連接的時(shí)間都很短,而且是突發(fā)性的,但TCP只在長(zhǎng)時(shí)間連接傳輸大塊數(shù)據(jù)時(shí)效率才最高。

HTTP 2.0通過(guò)讓所有數(shù)據(jù)流共用同一個(gè)連接,可以更有效地使用TCP連接。

HTTP 2.0不僅能夠減少網(wǎng)絡(luò)延遲,還有助于提高吞吐量和降低運(yùn)營(yíng)成本!

 

6)服務(wù)器推送

服務(wù)器除了對(duì)最初請(qǐng)求的響應(yīng)外,服務(wù)器還可以額外向客戶端推送資源,而無(wú)需客戶端明確地請(qǐng)求。

 

7)首部壓縮

在HTTP1.x中,首部元數(shù)據(jù)都是以純文本形式發(fā)送的,通常會(huì)給每個(gè)請(qǐng)求增加500~800字節(jié)的負(fù)荷。

為減少這些開(kāi)銷并提升性能,HTTP 2.0會(huì)壓縮首部元數(shù)據(jù)。

HTTP 2.0連接的兩端都知道已經(jīng)發(fā)送了哪些首部,這些首部的值是什么,從而可以針對(duì)之前的數(shù)據(jù)只編碼發(fā)送差異數(shù)據(jù)。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多