<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    為什么要合并HTTP請(qǐng)求?

    共 1908字,需瀏覽 4分鐘

     ·

    2021-10-17 12:42

    來(lái)源:https://www.jianshu.com/p/9a3f0e84c2b0

    思考路徑:

    為什么要實(shí)現(xiàn)batch call? -> 減少網(wǎng)絡(luò)中的傳輸損耗 -> 如何減少的? -> 通過(guò)合并HTTP請(qǐng)求 -> 合并HTTP請(qǐng)求是如何減少網(wǎng)絡(luò)損耗的?

    本文將解決這個(gè)問(wèn)題。一起看看單個(gè)請(qǐng)求攜載大量信息和多個(gè)請(qǐng)求攜載小量信息對(duì)于整個(gè)時(shí)間的影響。

    1. Client發(fā)出請(qǐng)求

    1.1 HTTP 1.1

    可以保持長(zhǎng)連接,但是每個(gè)不同的請(qǐng)求之間,client要向server發(fā)一個(gè)請(qǐng)求頭

    請(qǐng)求無(wú)法并行執(zhí)行的,在一個(gè)連接里面

    假設(shè)如果不合并的話需要建立N個(gè)連接,那么合并就可以省去(N-1)*RTT的時(shí)間,RTT指網(wǎng)絡(luò)延遲(在傳輸介質(zhì)中傳輸所用的時(shí)間,即從報(bào)文開(kāi)始進(jìn)入網(wǎng)絡(luò)到它開(kāi)始離開(kāi)網(wǎng)絡(luò)之間的時(shí)間)。

    1.2 TCP丟包問(wèn)題

    慢啟動(dòng),擁塞控制窗口

    TCP報(bào)文亂序到達(dá),合并后的文件可以允許隊(duì)首丟包以后在隊(duì)中補(bǔ)上來(lái),但是分開(kāi)資源的時(shí)候,前一個(gè)資源未加載完成后面的資源是不能加載的,會(huì)有更嚴(yán)重的隊(duì)首阻塞問(wèn)題,丟包率會(huì)嚴(yán)重影響Keep alive情況下多個(gè)文件的傳輸速率。

    1.3 瀏覽器線程數(shù)限制

    多為2-6個(gè)線程,會(huì)在每個(gè)連接上串行發(fā)送若干個(gè)請(qǐng)求。TCP連接太多,會(huì)給服務(wù)器造成很大的壓力的。

    1.4 DNS緩存問(wèn)題

    每次請(qǐng)求都需要找DNS緩存,多個(gè)請(qǐng)求就需要查找多次,而且緩存有可能被無(wú)故清空

    2. 服務(wù)器處理請(qǐng)求

    每個(gè)請(qǐng)求需要使用一個(gè)連接,建立一個(gè)線程,分配一部分CPU, 對(duì)于CPU而言,是種負(fù)擔(dān),尤其是一般來(lái)說(shuō)建立了連接以后,哪怕發(fā)回了請(qǐng)求,這個(gè)連接還會(huì)保持一段時(shí)間才會(huì)timeout。這種時(shí)候,維持連接是對(duì)服務(wù)器資源的一種巨大的浪費(fèi)。

    3. HTTP 2.0

    上面描述的所有都是基于HTTP/1.1的一些特性,或者說(shuō)弊端,有長(zhǎng)連接但是無(wú)法并行處理請(qǐng)求,TCP的慢啟動(dòng)和擁塞控制,隊(duì)首阻塞問(wèn)題都給整個(gè)性能帶來(lái)很多弊端,因此我們有了HTTP2.0來(lái)做針對(duì)性的改進(jìn)。很有意思的東西,直接看圖:

    • HTTP/1.1 network的請(qǐng)求圖
    • HTTP/2 network的請(qǐng)求圖

    就是這么酷炫,HTTP/2多了很多特性來(lái)解決HTTP/1.1的很多問(wèn)題

    3.1 Fully multiplexed

    解決了隊(duì)首阻塞的問(wèn)題。對(duì)于同一個(gè)TCP連接,現(xiàn)在可以發(fā)送多個(gè)請(qǐng)求,接收多個(gè)回應(yīng)了!在HTTP/1.1里面,如果在一個(gè)連接里上一個(gè)請(qǐng)求發(fā)生了丟包,那么后面的所有請(qǐng)求都必須等第一個(gè)請(qǐng)求補(bǔ)上包,收到回應(yīng)以后才能繼續(xù)執(zhí)行。而在HTTP/2里面,可以直接并行處理。

    3.2 Header Compression

    所有的HTTP request和response都有header,但是header里很可能包含緩存信息,導(dǎo)致他的大小會(huì)迅速增大的。但是在一個(gè)連接里大部分請(qǐng)求的請(qǐng)求頭其實(shí)攜帶的信息都很類(lèi)似,所以HTTP/2使用了索引表,存儲(chǔ)了第一次出現(xiàn)的請(qǐng)求的請(qǐng)求頭,然后后面的類(lèi)似的請(qǐng)求只需要攜帶這個(gè)索引的數(shù)字就好了。頭部壓縮平均減少了30%的頭部大小,加快了整體的網(wǎng)絡(luò)中傳輸?shù)乃俣取?/p>

    這兩點(diǎn)是和本文關(guān)系最大的,有了這兩點(diǎn),實(shí)質(zhì)上合并HTTP請(qǐng)求的好處在HTTP/2的協(xié)議下,已經(jīng)基本上消失了。合并不合并請(qǐng)求,更多的是看業(yè)務(wù)上的需求,后端的一些配置。

    4. 總結(jié)

    It's a trade-off. 其實(shí)最重要的是看你傳輸什么東西,因?yàn)楹喜TTP請(qǐng)求實(shí)質(zhì)上是減少了網(wǎng)絡(luò)延時(shí),但是如果你在服務(wù)器上處理的時(shí)間遠(yuǎn)遠(yuǎn)大于網(wǎng)絡(luò)延時(shí)的時(shí)間的時(shí)候,那么合并HTTP請(qǐng)求并不會(huì)給你帶來(lái)很多性能上的提升。而且大數(shù)據(jù)量的傳輸一定會(huì)降低瀏覽器的cache hit rate,對(duì)于緩存的利用率會(huì)降低很多。但是對(duì)于HTTP請(qǐng)求攜帶的數(shù)據(jù)量比較少的情況,合并請(qǐng)求帶來(lái)的性能提升會(huì)是顯而易見(jiàn)的。

    1.?0.2秒居然復(fù)制了100G文件?

    2.?JMH + Arthas,性能監(jiān)控的神器

    3.?ZooKeeper的選舉機(jī)制和同步機(jī)制超詳細(xì)講解,面試經(jīng)常問(wèn)到!

    4.?100萬(wàn)人同時(shí)搶1萬(wàn)張火車(chē)票,極限并發(fā)帶來(lái)的思考

    最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

    獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

    文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

    謝謝支持喲 (*^__^*)

    瀏覽 68
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    女人的天堂av | 欧美三级成人理伦 | 亚洲成人经典 | 可以直接观看的黄色电影 | 一级毛片全部免费播放特黄 |