小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 quasiceo 2016-08-09

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

一直聽說HTTP2.0,對此也僅僅是耳聞,沒有具體研讀過,這次正好有兩個篇章,分別講HTTP1.1和HTTP2.0。

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

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

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

 

一、HTTP1.1的幾個特點

1)持久連接

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

在連接中有這個屬性的就是打開了持久化連接。下圖展示了通過持久 TCP 連接取得 HTML 和 CSS 文件:

 

2)HTTP管道

持久HTTP多次請求必須嚴格滿足先進先出(FIFO)的隊列順序:發(fā)送請求,等待響應完成,再發(fā)送客戶端隊列中的下一個請求。

HTTP管道可以讓我們把FIFO隊列從客戶端(請求隊列)遷移到服務器(響應隊列)。

這樣的話在第一個請求完成后,能馬上開始處理第二個請求。

但HTTP 1.x不允許一個連接上的多個響應數(shù)據(jù)交錯到達(多路復用),因而一個響應必須完全返回后,下一個響應才會開始傳輸。

也就是說即使客戶端同時發(fā)送了兩個請求,而且CSS資源先準備就緒,服務器也會先發(fā)送HTML響應,然后再交付CSS。

HTTP2.0就可以多路復用,并可以按優(yōu)先級返回響應。

 

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

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

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

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

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

 

4)連接與拼合

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

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

而在HTTP2.0中可以多向請求和響應,消除了請求多個資源就要使用多個TCP連接的限制。

 

5)嵌入資源

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

比如,JavaScript和CSS代碼,通過適當?shù)膕cript和style塊可以直接放在頁面中。

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

而在HTTP2.0中有個服務器推送,與嵌入資源唯一的不同就是可以把這個過程從應用中拿出來,放到HTTP協(xié)議本身來實現(xiàn)。

 

二、HTTP2.0的特點

1)二進制分幀層

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

接下來說的幾個特點都是基于這個機制來實現(xiàn)的。

 

2)流、消息和幀

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

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

簡言之,HTTP 2.0把HTTP協(xié)議通信的基本單位縮小為一個一個的幀,這些幀對應著邏輯流中的消息。

相應地,很多流可以并行地在同一個TCP連接上交換消息。

 

3)多向請求與響應

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

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

 

4)請求優(yōu)先級

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

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

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

 

5)每個來源一個連接

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

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

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

 

6)服務器推送

服務器除了對最初請求的響應外,服務器還可以額外向客戶端推送資源,而無需客戶端明確地請求。

 

7)首部壓縮

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

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

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

 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多