91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用Node.js了解與測量HTTP所花費的時間

發布時間:2021-07-24 09:31:29 來源:億速云 閱讀:138 作者:小新 欄目:web開發

這篇文章給大家分享的是有關如何利用Node.js了解與測量HTTP所花費的時間的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在我們開始了解HTTP時間開銷之前,讓我們來看一些基本的概念:

  • IP(互聯網協議):IP是網絡層協議,涉及網絡尋址和路由。 IP負責根據一個或多個IP網絡上的數據包頭將數據包從源主機傳送到目標主機。 它還定義了封裝要傳遞的數據的數據包結構。

  • DNS(域名服務器):DNS是一種分層分散式命名系統,用于將諸如risingstack.com的人類可讀主機名解析為機器可讀的IP地址。

  • TCP(傳輸控制協議):TCP標準定義了如何在應用程序之間建立和維護網絡對話以交換數據。 TCP在通過IP網絡通信的主機上運行的應用程序之間提供可靠,有序和錯誤檢查的八位字節流。 HTTP客戶端通過建立TCP連接來發起請求。

  • SSL / TLS(傳輸層安全性):TLS是一種通過計算機網絡提供通信安全性的加密協議。 SSL(安全套接字層)是TLS的不推薦使用的前身。 TLS和SSL都使用證書建立安全連接。 SSL證書不依賴于加密協議(如TLS),證書包含密鑰對:公鑰和私鑰。 這些密鑰一起工作,建立一個加密的連接。

現在我們來看一下通常HTTP請求的時間表:

如何利用Node.js了解與測量HTTP所花費的時間

  • DNS查找:執行DNS查找所花費的時間。 DNS查找將域名解析為IP地址。 每個新的域需要一個完整的往返行程來進行DNS查找。 當目的地已經是IP地址時,沒有DNS查找。

  • TCP連接:在源主機和目標主機之間建立TCP連接所需的時間。 必須在多步握手過程中正確建立連接。 TCP連接由操作系統管理,如果基礎TCP連接無法建立,則OS范圍的TCP連接超時將會進入我們應用程序中的超時配置。

  • TLS握手:完成TLS握手的時間。 在握手過程中,端點交換認證和密鑰以建立或恢復安全會話。 沒有HTTPS請求的不需要TLS握手。

  • 第一個字節的時間(TTFB):等待初始響應的時間。 此時間除了等待服務器處理請求和傳遞響應所花費的時間之外,還可以捕獲往返服務器的延遲。

  • 內容傳輸:接收響應數據所花費的時間。 響應數據的大小和可用的網絡帶寬決定其持續時間。

如何通過HTTP時間開銷幫助發現性能瓶頸?

例如,如果您的DNS查詢所花費的時間比預期的要長,那么問題可能是您的DNS提供商或DNS緩存設置。

緩慢的內容傳輸可能是由效率低下的反應機構引起的,例如發回太多的數據(未使用的JSON屬性等)或緩慢的連接。

測量Node.js中的HTTP時間開銷

為了測量Node.js中的HTTP時間開銷,我們需要訂閱特定的請求,響應和套接字事件。 這是一個簡短的代碼片段,展示了如何在Node.js中執行此操作,此示例僅關注時序:

const timings = {
 // use process.hrtime() as it's not a subject of clock drift
 startAt: process.hrtime(),
 dnsLookupAt: undefined,
 tcpConnectionAt: undefined,
 tlsHandshakeAt: undefined,
 firstByteAt: undefined,
 endAt: undefined
 }

 const req = http.request({ ... }, (res) => {
 res.once('readable', () => {
  timings.firstByteAt = process.hrtime()
 })
 res.on('data', (chunk) => { responseBody += chunk })
 res.on('end', () => {
  timings.endAt = process.hrtime()
 })
 })
 req.on('socket', (socket) => {
 socket.on('lookup', () => {
  timings.dnsLookupAt = process.hrtime()
 })
 socket.on('connect', () => {
  timings.tcpConnectionAt = process.hrtime()
 })
 socket.on('secureConnect', () => {
  timings.tlsHandshakeAt = process.hrtime()
 })
 })

DNS查找只會發生在有域名的時候:

/ There is no DNS lookup with IP address
const dnsLookup = dnsLookupAt !== undefined ? 
 getDuration(startAt, dnsLookupAt) : undefined

TCP連接在主機解析后立即發生:

const tcpConnection = getDuration((dnsLookupAt || startAt), tcpConnectionAt)

TLS握手(SSL)只能使用https協議:

// There is no TLS handshake without https 
const tlsHandshake = tlsHandshakeAt !== undefined ? 
  getDuration(tcpConnectionAt, tlsHandshakeAt) : undefined

我們等待服務器開始發送第一個字節:

const firstByte = getDuration((tlsHandshakeAt || tcpConnectionAt), firstByteAt)

總持續時間從開始和結束日期計算:

const total = getDuration(startAt, endAt)

看到整個例子,看看我們的https://github.com/RisingStac...倉庫。

測量時間的工具

現在我們知道如何使用Node測量HTTP時間,我們來討論可用于了解HTTP請求的現有工具。

request module

著名的request module具有測量HTTP定時的內置方法。 您可以使用time屬性啟用它。

const request = require('request')

request({ 
 uri: 'https://risingstack.com',
 method: 'GET',
 time: true
}, (err, resp) => {
 console.log(err || resp.timings)
})

分布式跟蹤

可以使用分布式跟蹤工具收集HTTP定時,并在時間軸上可視化它們。 這樣,您可以全面了解后臺發生的情況,以及構建分布式系統的實際成本是多少。

RisingStack的opentracing-auto庫具有內置的標志,可通過OpenTracing收集所有HTTP時間。

如何利用Node.js了解與測量HTTP所花費的時間

在Jaeger中使用opentracing-auto的HTTP請求時序。

感謝各位的閱讀!關于“如何利用Node.js了解與測量HTTP所花費的時間”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 武清区| 武城县| 繁昌县| 定边县| 阳曲县| 仪征市| 依安县| 普兰店市| 城固县| 永昌县| 尚志市| 山西省| 麻江县| 黑水县| 昆山市| 昌吉市| 栖霞市| 连城县| 天全县| 乌鲁木齐市| 乌兰县| 南汇区| 陇川县| 吴堡县| 石景山区| 广饶县| 南皮县| 定日县| 华亭县| 两当县| 太保市| 额济纳旗| 迁安市| 溧水县| 伊金霍洛旗| 牙克石市| 胶南市| 乐亭县| 莎车县| 莱芜市|