HTTPS、SPDY和HTTP/2的性能比較
Firefox 35發(fā)布新版本默認(rèn)支持HTTP/2協(xié)議(草案14版本),針對(duì)該升級(jí)HttpWatch也發(fā)布了相應(yīng)的更新,使其能夠在Firefox中支持HTTP/2,由于Google的web服務(wù)器現(xiàn)在能夠同時(shí)支持HTTP/2草案14版本和SPDY協(xié)議,使得HttpWatch能夠在同樣的Web頁(yè)面上對(duì)比HTTPS、SPDY和HTTP/2的性能。
整個(gè)性能測(cè)試包含4個(gè)場(chǎng)景,使用的軟件為Firefox和HttpWatch,測(cè)試網(wǎng)頁(yè)為Google UK首頁(yè),比較的協(xié)議包括原生HTTPS、SPDY/3.1和HTTP/2協(xié)議,同時(shí)每一個(gè)測(cè)試都是在沒(méi)有瀏覽器緩存的Firefox實(shí)例上執(zhí)行的,雖然這些測(cè)試非常簡(jiǎn)單,頁(yè)面也不復(fù)雜,但是這并不影響三種不同協(xié)議之間重大差異的比較。
測(cè)試#1——請(qǐng)求和響應(yīng)頭的大小
雖然大部分網(wǎng)站都已經(jīng)在下載文本內(nèi)容的時(shí)候使用壓縮提升性能,但是HTTP/1.1并不支持HTTP頭壓縮,為此SPDY和HTTP/2應(yīng)運(yùn)而生, SPDY使用了通用的DEFLATE算法,而HTTP/2則使用了專門為壓縮頭信息而設(shè)計(jì)的HPACK算法。
***個(gè)測(cè)試通過(guò)一個(gè)沒(méi)有內(nèi)容的請(qǐng)求生成的頭信息的大小來(lái)查看三種協(xié)議的不同:

其中,“Sent”列表示請(qǐng)求頭的大小,“Received”列表示響應(yīng)頭的大小,結(jié)果顯示,使用HPACK算法的HTTP/2協(xié)議頭信息最小。
測(cè)試#2——響應(yīng)消息的大小
Web服務(wù)器的響應(yīng)由響應(yīng)頭和編碼的響應(yīng)內(nèi)容兩部分組成。對(duì)于圖片的請(qǐng)求,測(cè)試結(jié)果如下:

對(duì)于文本資源的請(qǐng)求,結(jié)果如下:

結(jié)果顯示,對(duì)于圖片HTTP/2協(xié)議的請(qǐng)求和響應(yīng)信息都最小,而對(duì)于文本資源,雖然HTTP/2的請(qǐng)求信息依然最小,但是響應(yīng)信息卻比SPDY協(xié)議稍大一點(diǎn)。究其原因,這可能是由添加到HTTP/2數(shù)據(jù)幀中的可選內(nèi)邊距字節(jié)造成的,而圖片資源并不會(huì)使用內(nèi)邊距。
測(cè)試#3——TCP連接數(shù)和頁(yè)面加載時(shí)的SSL握手請(qǐng)求數(shù)
HTTP/1.1通過(guò)增加到每個(gè)主機(jī)的***連接數(shù)來(lái)提高性能,而SPDY和HTTP/2則是通過(guò)使用多路復(fù)用技術(shù)在一個(gè)單獨(dú)的TCP和SSL連接上支持并發(fā),通過(guò)在一個(gè)連接上一次性發(fā)送多個(gè)請(qǐng)求來(lái)發(fā)送或接收數(shù)據(jù)。該場(chǎng)景的測(cè)試結(jié)果如下:

SPDY結(jié)果

HTTP/2結(jié)果

HTTPS結(jié)果
結(jié)果顯示,SPDY和HTTP/2通過(guò)多路復(fù)用技術(shù)降低了頁(yè)面下載時(shí)的連接數(shù),而原生的HTTPS協(xié)議則需要?jiǎng)?chuàng)建更多的連接。
測(cè)試#4——頁(yè)面加載時(shí)間
頁(yè)面加載時(shí)間是一個(gè)比較重要的性能指標(biāo),該測(cè)試使用了HttpWatch中的“頁(yè)面加載”事件來(lái)查看每種協(xié)議所需的時(shí)間,結(jié)果如下:



結(jié)果顯示,由于不支持頭信息壓縮,并且缺少所需的額外TCP連接和SSL握手,原生HTTPS所需的時(shí)間最長(zhǎng),如果頁(yè)面更復(fù)雜,那么差距會(huì)更明顯。同時(shí),雖然HTTP/2的響應(yīng)消息比SPDY大,但是加載時(shí)間要比SPDY短。