前端性能毫秒必争方案(一)HTTP请求
在講http知識之前,有必要提及下網(wǎng)絡(luò)七層協(xié)議OSI(Open System Interconnect)的縮寫
猶如水滸里面的七星聚義,沒這七星,就沒有108將。(已經(jīng)放置文章最后面)
2. 減少http請求次數(shù)原因在于
1、Http連接 RequestHeader 的開銷
眾所周知,后端不管是java還是php,都能使用類似htppRequest .getHeader(“XXX-XXX”)方法。為什么呢?這是因為每次請求都會帶上一些額外的信息Request Header,所以當(dāng)請求越多的時候,在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)自然就多,傳輸速度自然就慢了。
其實request自帶的數(shù)據(jù)量還是小問題,畢竟request能帶的數(shù)據(jù)量還是有限的。
2、http連接的流程串行請求限制(2-8個)
- 域名解析 =》2. 開啟TCP連接 =》3. 發(fā)送請求 =》4. 等待(主要包括網(wǎng)絡(luò)延遲和服務(wù)器處理時間) =》5. 下載資源 =》6. 文件解析執(zhí)行時間 在http1.1,keep-alive是默認的,而且現(xiàn)代瀏覽器都有DNS緩存, 所以DNS尋址由于有DNS緩存–無差別; 3次握手由于有keep-alive,一條和一千條都只需一次TCP握手–無差別
HTTP1.1協(xié)議規(guī)定請求只能串行發(fā)送,這也是HTTP性能最差和最讓人詬病的地方,也就是說一百個請求必須依次逐個發(fā)送。第80個請求必須依賴于第79個請求正常返回之后才能發(fā)送。這樣就平白無故多出了99個網(wǎng)絡(luò)RTT(網(wǎng)絡(luò)延遲)。 瀏覽器通過一個TCP連接發(fā)送100個請求的事情根本就不可能發(fā)生。
當(dāng)你有100個資源時,這100個資源在瀏覽器看來是“同時都要”,而瀏覽器并沒有什么智商去判斷應(yīng)該用1個鏈接解決這100個資源,還是用100個鏈接來解決,不然瀏覽器永遠都只有一個TCP鏈接了。
因此瀏覽器的靜態(tài)的策略是在自己可承受的范圍內(nèi)盡可能地用多的鏈接來解決,大部分瀏覽器似乎是2-8個鏈接,這就導(dǎo)致握手也是2-8次。
HTTP 連接個數(shù)(服務(wù)器默認最大連接數(shù) 16,777,214)
3、http請求少了,DNS 查詢自然就少了,真的被百度里面千篇一律感動了。
http連接串行請求限制(2-8個)
2.1. 第一層:物理層(Physical)
規(guī)定通信設(shè)備的功能的和過程的特性,統(tǒng)一物理設(shè)備的參數(shù),用以建立、維護和拆除物理鏈路連接
2.2. 第二層:數(shù)據(jù)鏈路層(Data Link)
數(shù)據(jù)鏈路可以粗略地理解為數(shù)據(jù)通道。 媒體是長期的,連接是有生存期的.在連接生存期內(nèi),收發(fā)兩端可以進行不確定次數(shù)據(jù)通信. 每次通信都要經(jīng)過建立通信聯(lián)絡(luò)和拆除通信聯(lián)絡(luò)兩過程.這種建立起來的數(shù)據(jù)收發(fā)關(guān)系就叫作數(shù)據(jù)鏈路.
2.3. 第三層:網(wǎng)絡(luò)層(Network)
網(wǎng)絡(luò)層的任務(wù)就是選擇合適的網(wǎng)間路由和交換結(jié)點, 確保數(shù)據(jù)及時傳送, 那在計算機網(wǎng)絡(luò)中進行通信的兩個計算機之間可能會經(jīng)過很多個數(shù)據(jù)鏈路, 也可能還要經(jīng)過很多通信子網(wǎng)。
2.4. 第四層:傳輸層(Transport)
傳輸層是兩臺計算機經(jīng)過網(wǎng)絡(luò)進行數(shù)據(jù)通信時,第一個端到端的層次,具有緩沖作用。第四層的數(shù)據(jù)單元也稱作數(shù)據(jù)包(packets) 示例:TCP,UDP,SPX。
2.5. 第五層:會話層(Session)
會話層提供的服務(wù)可使應(yīng)用建立和維持會話,并能使會話獲得同步。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續(xù)恢復(fù)通信。這種能力對于傳送大的文件極為重要。
2.6. 第六層:表示層(Presentation)
表示層的作用之一是為異種機通信提供一種公共語言,以便能進行互操作。它將欲交換的數(shù)據(jù)從適合于某一用戶的抽象語法,轉(zhuǎn)換為適合于OSI系統(tǒng)內(nèi)部使用的傳送語法。即提供格式化的表示和轉(zhuǎn)換數(shù)據(jù)服務(wù)。數(shù)據(jù)的壓縮和解壓縮, 加密和解密等工作都由表示層負責(zé),這種類型的服務(wù)之所以需要,是因為不同的計算機體系結(jié)構(gòu)。 例如,IBM主機使用EBCDIC編碼,而大部分PC機使用的是ASCII碼。在這種情況下,便需要會話層來完成這種轉(zhuǎn)換。
2.7. 第七層:應(yīng)用層(Application)
應(yīng)用層為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問網(wǎng)絡(luò)服務(wù)的接口。應(yīng)用層協(xié)議的代表包括:Telnet、FTP、HTTP、SNMP?
原文出自 :劉俊斌 (976500133@qq.com) 轉(zhuǎn)載請務(wù)必注明出處,否則追究法事(責(zé)任)
 
轉(zhuǎn)載于:https://www.cnblogs.com/passkey/p/10005988.html
總結(jié)
以上是生活随笔為你收集整理的前端性能毫秒必争方案(一)HTTP请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果海角天边是什么歌呢
- 下一篇: Java 集合——List集合