婚戀交友原始碼開發,採用連線複用實現效能優化

雲豹科技程式設計師發表於2021-11-25

婚戀交友原始碼的效能會直接影響到使用者的體驗,所以在開發時,開發者會利用各種方式來提升婚戀交友原始碼的效能,接下來我們一起看看採用連線複用實現效能優化的方式吧。

DNS 優化

婚戀交友原始碼DNS優化常用的手段有:
1、減少域名個數,但這一做法跟 CDN 的優化手段相沖突
2、DNS 預查詢

  • 常見寫法為在 HTML 裡新增
  • 不常見的寫法為在 HTTP 響應頭裡新增 Link:  ; rel=dns-prefetch。

相關時間粒度:一次 DNS 查詢時間大約為 20ms~120ms。
相關命令:time nslookup baidu.com 得到的 real 時間就是一次 DNS 查詢的大概耗時。

連線複用(Connection: keep-alive)

之前我們說過一次婚戀交友原始碼中的 TCP 連線只要傳輸一次 HTTP 請求和響應之後就會關閉,我們當時覺得這很浪費,為什麼要關閉呢?繼續「保持連線」,等待下一次 HTTP 請求出現不好嗎?
科普一下,建立一次 TCP 連線需要耗時幾十毫秒到幾百毫秒不等(跟距離有關)。 在網際網路時代早期,婚戀交友原始碼伺服器為了節約資源,預設在 HTTP 響應之後就關閉 TCP 連線。因為那時的網頁包含的請求極少,可能只有一個 HTML,所以在當時看來,這種做法是正確的。
但是隨著婚戀交友原始碼使用者需求的增加,一個頁面經常包含幾十上百個請求,因此我們需要一種機制讓伺服器在響應後的一段時間內不要關閉 TCP 連線,也讓客戶端在收完響應之後一段時間內不要關閉 TCP 連線。
HTTP 裡提供了 Connection: keep-alive 欄位,其使用方法為:

  • 客戶端在請求頭裡增加此欄位,表示自己會在收完響應後保持 TCP 連線一段時間;
  • 伺服器在響應頭裡增加此欄位,表示自己會在發完響應後保持 TCP 連線一段時間。

如果某一方不支援此功能,只需要改為 Connection: close。HTTP/1.0 中該欄位的預設值為 close,而 HTTP/1.1 中該欄位的預設值為 keep-alive。
具體會保持 TCP 連線多長時間不關閉呢?瀏覽器的預設時長一般為 60 到 300 秒,婚戀交友原始碼伺服器的預設時長一般為 5 到 20 秒。雙方可以通過 Keep-Alive: timeout=5, max=1000 欄位來告知對方自己的配置,其中 timeout=5 表示最多保持 5 秒,max=1000 表示最多支援 1000 次請求。有些瀏覽器會遵從婚戀交友原始碼伺服器的配置,而有些瀏覽器不會(比如 IE)。
在實際工作中我們常用的協議是 HTTP/1.1 或 HTTP/2.0,它們預設會在請求和響應上新增 Connection: keep-alive,不需要程式設計師做任何事情。
開啟此功能後,TCP 連線會在第一次 HTTP 響應結束後,多保持一段時間(假設為 5 秒)

  • 如果 5 秒內有新的 HTTP 請求,則重置計時器,在 HTTP 響應結束後再保持 5 秒鐘,如此反覆,直到超過 1000 次的限制。
  • 如果 5 秒鐘結束後依然沒有新的請求,則關閉連線。

總結一下

  • 如果雙方沒有新增 Connection: Keep-Alive 欄位,婚戀交友原始碼伺服器會在響應結束後主動關閉 TCP 連線,
    婚戀交友原始碼客戶端會在收完響應後主動關閉 TCP 連線;
  • 如果雙方都新增了 Connection: Keep-Alive 欄位,伺服器會在響應結束後保持 TCP 連線,客戶 端會在收完響應後保持
    TCP 連線,用以發起下一次請求。
  • 如果一方加了,另一方沒加,則沒加的一方會在某個時刻主動關閉 TCP 連線。

值得注意的是,並不是加上欄位就搞定了,伺服器和客戶端的婚戀交友原始碼需要對這個欄位進行相應的程式設計,才能實現預期功能,只不過這些功能已經被 Nginx、Apache、Chrome、Firefox 等軟體封裝好了,不需要前後端程式設計師關心。

最後說一句

本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理,希望以上內容能對大家有幫助。

原文連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2844172/,如需轉載,請註明出處,否則將追究法律責任。

相關文章