HTTP/1 所能做的事情 HTTP/2 都可以做到,并且只更加容易。
創(chuàng)作者 | Philip Jones
譯員 | 彎月
責(zé)編 | 屠敏
近期,HTTP/2 逐漸支持 WebSocket了(RFC 8441),如此說(shuō)來(lái) HTTP/2 已實(shí)現(xiàn)了 HTTP/1 的所有作用。擁有隱私功能后,HTTP/1 能夠做的一切 HTTP/2 都可以做到,并且只更加容易。本文將為大家介紹一下 HTTP/2 怎樣通過(guò)時(shí)分復(fù)用完成了更閃電般的速度。
我們一起來(lái)考慮到那樣一種情況:一個(gè)比較復(fù)雜的拍賣網(wǎng)站。這是一個(gè)單頁(yè)應(yīng)用,運(yùn)用 WebSocket 連接獲得現(xiàn)階段的競(jìng)價(jià),因而每每客戶挑選需要參加的拍賣時(shí),都是會(huì)推送一系列的 API 請(qǐng)求。也就是說(shuō),用戶可根據(jù) WebSocket 監(jiān)控某一拍賣開(kāi)展?fàn)顩r,隨后轉(zhuǎn)換到另一個(gè)競(jìng)拍,那么就會(huì)開(kāi)啟 API 請(qǐng)求。因?yàn)閿?shù)據(jù)庫(kù)的特性,顯而易見(jiàn)應(yīng)當(dāng)都采用 烏梢蛇蝮蛇膠囊怎么樣HTTPS。
這一繁雜網(wǎng)站能夠簡(jiǎn)單化成運(yùn)用一個(gè) 烏梢蛇蝮蛇膠囊真假辨別 WebSocket 每過(guò)一秒推送一次升級(jí),與此同時(shí)可在需要的時(shí)候啟用大概20個(gè)API。這一簡(jiǎn)單化版本號(hào)坐落于這一代碼庫(kù)上(在其中頁(yè)面由2個(gè)按鍵構(gòu)成,左邊開(kāi)啟 WebSocket 連接,右側(cè)的開(kāi)啟 20 個(gè) API 啟用。
HTTP/1.1 性能評(píng)測(cè)
HTTP/1.1 規(guī)定每一個(gè)請(qǐng)求都是有單獨(dú)的連接(雖然一個(gè)請(qǐng)求完成后連接能夠器重),可能會(huì)導(dǎo)致數(shù)次連接的建立開(kāi)銷(主要包括 DNS、TCP 揮手和 SSL 揮手的開(kāi)銷)。除此之外,電腦瀏覽器還會(huì)繼續(xù)限定與此同時(shí)開(kāi)啟的連接最多為六個(gè),代表著在前面六個(gè)連接結(jié)束前,其它的請(qǐng)求只有阻塞。
HTTP/1.1 連接的時(shí)間軸。全部請(qǐng)求進(jìn)行必須142ms
HTTP/2
HTTP/2 優(yōu)化了 HTTP/1.1,它支持時(shí)分復(fù)用和生產(chǎn)流水線,即一個(gè)連接現(xiàn)在能并行處理服務(wù)項(xiàng)目全部請(qǐng)求。這也就意味著連接建立的開(kāi)銷只有一次。除此之外,電腦瀏覽器不用再阻塞一切請(qǐng)求,能夠一次性所有推送,再等待網(wǎng)絡(luò)服務(wù)器回應(yīng)。
HTTP/2 連接的時(shí)間軸。全部請(qǐng)求進(jìn)行必須86ms
含有 WebSockets的HTTP/2
由 HTTP/2 自身進(jìn)行全部請(qǐng)求就增添了 62ms 極大的改善?墒牵娔X瀏覽器在建立連接環(huán)節(jié)依舊是阻塞的。由圖 2 中可以看出,這一階段耗費(fèi)了大概 10ms。
大家探討這個(gè)繁雜網(wǎng)站需要使用 WebSocket,這是一個(gè)長(zhǎng)久的連接。如今 WebSocket 能通過(guò) HTTP/2 完成,那樣全部請(qǐng)求還可以重復(fù)使用這一連接,代表著不用額外開(kāi)銷去建立連接。
HTTP/2 請(qǐng)求應(yīng)用已經(jīng)有 WebSocket 連接的時(shí)間軸。全部請(qǐng)求進(jìn)行必須69ms。
圖 3 演試了那一點(diǎn),沒(méi)有阻塞,并沒(méi)有鮮紅色一部分,也沒(méi)必要建立一個(gè)新的連接。就像我們預(yù)想的那般,請(qǐng)求進(jìn)行所需要的時(shí)長(zhǎng)越來(lái)越少,花在建立連接的時(shí)間也大概超出預(yù)期。
結(jié)果
HTTP/2 在這篇文章探討這樣的比較復(fù)雜網(wǎng)站上可骨康寧烏梢蛇蝮蛇膠囊 以帶來(lái)很大的經(jīng)濟(jì)效益,能將總體時(shí)長(zhǎng)降到大概 50%。這也許能給客戶體驗(yàn)帶來(lái)很大的提高,而額外HTTP/2-WebSocket 作用也會(huì)產(chǎn)生細(xì)微但能夠感受到的提高。并且,互聯(lián)網(wǎng)連接的品質(zhì)越不好,建立連接的開(kāi)銷會(huì)增大,提高就更為明顯。
HTTP/2 對(duì) WebSocket 的支持還十分新,RFC 是于 2018 年 9 月公布的,F(xiàn)irefox 65 到 2019 年 1 月末才支持,而 Chrome 的支持仍在方案中。在服務(wù)端,2019 年 1 月時(shí) Hypercorn 就是我能夠找到的支持 HTTP/2 WebSocket 的開(kāi)源庫(kù)。
擁有 HTTP/2 的 WebSocket 支持后,也就沒(méi)有 HTTP/1.1 可以做到而 HTTP/2做不到的事了,并且 HTTP/2 要快點(diǎn)許多。之后對(duì) HTTP/2 的支持只也會(huì)越來(lái)越多、越變?cè)胶,所以目前現(xiàn)在是時(shí)候轉(zhuǎn)換了。