采集 HTTP/2 性能指标
性能观察 API 可用于收集每个 Http2Session
和 Http2Stream
实例的基本性能指标。
const { PerformanceObserver } = require('node:perf_hooks');
const obs = new PerformanceObserver((items) => {
const entry = items.getEntries()[0];
console.log(entry.entryType); // 打印 'http2'
if (entry.name === 'Http2Session') {
// 条目包含有关 Http2Session 的统计信息
} else if (entry.name === 'Http2Stream') {
// 条目包含有关 Http2Stream 的统计信息
}
});
obs.observe({ entryTypes: ['http2'] });
PerformanceEntry
的 entryType
属性将等于 'http2'
。
PerformanceEntry
的 name
属性将等于 'Http2Stream'
或 'Http2Session'
。
如果 name
等于 Http2Stream
,则 PerformanceEntry
将包含以下附加属性:
bytesRead
<number> 为此Http2Stream
接收的DATA
帧字节数。bytesWritten
<number> 为此Http2Stream
发送的DATA
帧字节数。id
<number> 关联Http2Stream
的标识符timeToFirstByte
<number> 从PerformanceEntry
startTime
到接收到第一个DATA
帧之间经过的毫秒数。timeToFirstByteSent
<number> 从PerformanceEntry
startTime
到发送的第一个DATA
帧之间经过的毫秒数。timeToFirstHeader
<number> 从PerformanceEntry
startTime
到接收到第一个标头之间经过的毫秒数。
如果 name
等于 Http2Session
,则 PerformanceEntry
将包含以下附加属性:
bytesRead
<number> 为此Http2Session
接收的字节数。bytesWritten
<number> 为此Http2Session
发送的字节数。framesReceived
<number>Http2Session
接收到的 HTTP/2 帧数。framesSent
<number>Http2Session
发送的 HTTP/2 帧数。maxConcurrentStreams
<number>Http2Session
生命周期内同时打开的最大流数。pingRTT
<number> 从发送PING
帧到接收到它的确认所经过的毫秒数。 只有在Http2Session
上发送了PING
帧时才会出现。streamAverageDuration
<number> 所有Http2Stream
实例的平均持续时间(以毫秒为单位)streamCount
<number>Http2Session
处理的Http2Stream
实例的数量。type
<string>'server'
或'client'
来标识Http2Session
的类型。
The Performance Observer API can be used to collect basic performance
metrics for each Http2Session
and Http2Stream
instance.
const { PerformanceObserver } = require('node:perf_hooks');
const obs = new PerformanceObserver((items) => {
const entry = items.getEntries()[0];
console.log(entry.entryType); // prints 'http2'
if (entry.name === 'Http2Session') {
// Entry contains statistics about the Http2Session
} else if (entry.name === 'Http2Stream') {
// Entry contains statistics about the Http2Stream
}
});
obs.observe({ entryTypes: ['http2'] });
The entryType
property of the PerformanceEntry
will be equal to 'http2'
.
The name
property of the PerformanceEntry
will be equal to either
'Http2Stream'
or 'Http2Session'
.
If name
is equal to Http2Stream
, the PerformanceEntry
will contain the
following additional properties:
bytesRead
<number> The number ofDATA
frame bytes received for thisHttp2Stream
.bytesWritten
<number> The number ofDATA
frame bytes sent for thisHttp2Stream
.id
<number> The identifier of the associatedHttp2Stream
timeToFirstByte
<number> The number of milliseconds elapsed between thePerformanceEntry
startTime
and the reception of the firstDATA
frame.timeToFirstByteSent
<number> The number of milliseconds elapsed between thePerformanceEntry
startTime
and sending of the firstDATA
frame.timeToFirstHeader
<number> The number of milliseconds elapsed between thePerformanceEntry
startTime
and the reception of the first header.
If name
is equal to Http2Session
, the PerformanceEntry
will contain the
following additional properties:
bytesRead
<number> The number of bytes received for thisHttp2Session
.bytesWritten
<number> The number of bytes sent for thisHttp2Session
.framesReceived
<number> The number of HTTP/2 frames received by theHttp2Session
.framesSent
<number> The number of HTTP/2 frames sent by theHttp2Session
.maxConcurrentStreams
<number> The maximum number of streams concurrently open during the lifetime of theHttp2Session
.pingRTT
<number> The number of milliseconds elapsed since the transmission of aPING
frame and the reception of its acknowledgment. Only present if aPING
frame has been sent on theHttp2Session
.streamAverageDuration
<number> The average duration (in milliseconds) for allHttp2Stream
instances.streamCount
<number> The number ofHttp2Stream
instances processed by theHttp2Session
.type
<string> Either'server'
or'client'
to identify the type ofHttp2Session
.