1.基于HTTP的協(xié)議
HTTP功能上的不足可通過一套全新的協(xié)議來彌補(bǔ)赊级。可是當(dāng)前基于HTTP的Web瀏覽器的使用環(huán)境已遍布全球岔绸,因此無法完全拋棄HTTP理逊。有一些新協(xié)議的規(guī)則是基于HTTP的橡伞,并在此基礎(chǔ)上添加來新的功能。
2.消除HTTP瓶頸的SPDY
Google在2010年發(fā)布了SPDY,其開發(fā)目標(biāo)旨在解決HTTP的性能瓶頸晋被,縮短Web頁面的加載時(shí)間兑徘。
Ajax的解決辦法
Ajax(Asynchronous JavaScript and XML,異步JavaScript與XML技術(shù))是一種有效利用JavaScript和DOM(Document Object Model,文檔對(duì)象模型)的操作羡洛,以達(dá)到局部Web頁面替換加載的異步通信手段挂脑。和以前的同步通信相比,由于它只更新一部分頁面欲侮,響應(yīng)中傳輸?shù)臄?shù)據(jù)量會(huì)因此而減少崭闲,這一優(yōu)點(diǎn)顯而易見。
Ajax的核心技術(shù)是名為XMLHttpRequest的API,通過JavaScript腳本語言的調(diào)用就能和服務(wù)器進(jìn)行HTTP通信威蕉。借由這種手段刁俭,就能從已加載完畢的Web頁面上發(fā)送請(qǐng)求,只更新局部頁面韧涨。
而利用Ajax實(shí)時(shí)地從服務(wù)器獲取內(nèi)容牍戚,有可能會(huì)導(dǎo)致大量請(qǐng)求產(chǎn)生。另外Ajax仍未解決HTTP協(xié)議本身存在的問題氓奈。Comet的解決方法
一旦服務(wù)器端有內(nèi)容更新翘魄,Comet不會(huì)讓請(qǐng)求等待鼎天,而是直接給客戶端返回響應(yīng)舀奶。這是一種通過延遲應(yīng)答,模擬實(shí)現(xiàn)服務(wù)器端向客戶端推送的功能斋射。
通常育勺,服務(wù)器端接收到請(qǐng)求,在處理完畢后就會(huì)立即返回響應(yīng)罗岖,但為了實(shí)現(xiàn)推送功能涧至,Comet會(huì)先將響應(yīng)置于掛起狀態(tài),當(dāng)服務(wù)器端有內(nèi)容更新時(shí)桑包,再返回該響應(yīng)南蓬。因此,服務(wù)器端一旦有更新哑了,就可以立即反饋給客戶端赘方。
內(nèi)容上雖然可以做到實(shí)時(shí)更新,但為了保留響應(yīng)弱左,一次連接的持續(xù)時(shí)間也變長了窄陡。期間,為了維持連接會(huì)消耗更多的資源拆火。SPDY的設(shè)計(jì)與功能
SPDY沒有完全改寫HTTP協(xié)議跳夭,而是在TCP/IP應(yīng)用層與運(yùn)輸層之間通過新加會(huì)話層的形式運(yùn)作涂圆。同時(shí),考慮到安全性問題币叹,SPDY規(guī)定通信中使用SSL润歉。
SPDY以會(huì)話層的形式加入,控制對(duì)數(shù)據(jù)的流動(dòng)颈抚,但還是采用HTTP建立通信連接卡辰。因此,可照常使用HTTP的GET和POST等方法邪意、Cookie以及HTTP報(bào)文等九妈。
使用SPDY后,HTTP協(xié)議額外獲得以下功能雾鬼。
多路復(fù)用流
通過單一的TCP連接萌朱,可以無限制處理多個(gè)HTTP請(qǐng)求。所有請(qǐng)求的處理都在一條TCP連接上完成策菜,因此TCP的處理效率得到提高晶疼。賦予請(qǐng)求優(yōu)先級(jí)
SPDY不僅可以無限制地并發(fā)處理請(qǐng)求,還可以給請(qǐng)求逐個(gè)分配優(yōu)先級(jí)順序又憨。這樣主要是為了在發(fā)送多個(gè)請(qǐng)求時(shí)翠霍,解決因帶寬低而導(dǎo)致響應(yīng)變慢的問題。壓縮HTTP首部
壓縮HTTP請(qǐng)求和響應(yīng)的首部蠢莺。這樣一來寒匙,通信產(chǎn)生的數(shù)據(jù)包數(shù)量和發(fā)送的字節(jié)數(shù)就更少了。推送功能
支持服務(wù)器主動(dòng)向客戶端推送數(shù)據(jù)的功能躏将。這樣锄弱,服務(wù)器可直接發(fā)送數(shù)據(jù),而不必等待客戶端的請(qǐng)求祸憋。服務(wù)器提示功能
服務(wù)器可以主動(dòng)提示客戶端請(qǐng)求所需的資源会宪。由于在客戶端發(fā)現(xiàn)資源之前就可以獲知資源的存在,因此在資源已緩存等情況下蚯窥,可以避免發(fā)送不必要的請(qǐng)求掸鹅。
SPDY的確是一種可有效消除HTTP瓶頸的技術(shù),但很多Web網(wǎng)站存在的問題并非僅僅是由HTTP瓶頸所導(dǎo)致的拦赠。對(duì)Web本身的速度提升巍沙,還應(yīng)該從其他更細(xì)致專研的地方入手,比如改善Web內(nèi)容的編寫方式等矛紫。
3.使用瀏覽器進(jìn)行全雙工通信的WebSocket
利用Ajax和Comet技術(shù)進(jìn)行通信可以提神Web的瀏覽速度赎瞎。但問題在于通信若使用HTTP協(xié)議,就無法徹底解決瓶頸問題颊咬。WebSocket網(wǎng)絡(luò)技術(shù)正是為解決這些問題而實(shí)現(xiàn)的一套新協(xié)議及API务甥。
當(dāng)時(shí)籌劃將WebSocket作為HTML5標(biāo)準(zhǔn)的一部分牡辽,而現(xiàn)在它逐漸變成了獨(dú)立的協(xié)議標(biāo)準(zhǔn)。
WebSocket協(xié)議的主要特點(diǎn)
- 推送功能
支持有服務(wù)器向客戶端推送數(shù)據(jù)的推送功能敞临。這樣态辛,服務(wù)器可直接發(fā)送數(shù)據(jù),而不必等待客戶端的請(qǐng)求挺尿。
-減少通信量
只要建立起WebSocket連接奏黑,就希望一直保持連接狀態(tài)。和HTTP相比编矾,不但每次連接時(shí)的總開銷減少熟史,而且由于WebSocket的首部信息很小,通信量也相應(yīng)減少了窄俏。
為了實(shí)現(xiàn)WebSocket蹂匹,在HTTP連接建立之后,需要完成一次“握手”的步驟凹蜈。
連接剛開始時(shí)還是HTTP協(xié)議限寞,所以由客戶端先發(fā)起連接,成功握手確認(rèn)WebSocket連接之后仰坦,通信時(shí)不再使用HTTP的數(shù)據(jù)幀履植,而采用WebSocket獨(dú)立的數(shù)據(jù)幀。