Node.js 를 이용 하여 HTTP 를 이해 하고 측정 하 는 데 걸 리 는 시간 에 대한 상세 한 설명
HTTP 시간 을 이해 하고 측정 하 는 것 은 클 라 이언 트 가 서버 나 서버 에서 서버 간 의 통신 성능 병목 을 발견 하 는 데 도움 이 된다.본 고 는 HTTP 요청 의 시간 비용 을 소개 하고 Node.js 에서 측정 하 는 방법 을 보 여 준다.
우리 가 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 시간 을 수집 할 수 있 습 니 다.
Jaeger 에서 opentracing-auto 를 사용 하 는 HTTP 요청 순서 입 니 다.
총결산
Node.js 를 사용 하여 HTTP 시간 을 측정 하면 성능 병목 을 발견 할 수 있 습 니 다.Node 생태 시스템 은 응용 프로그램 에서 이 지 표를 추출 할 수 있 는 좋 은 도 구 를 제공 합 니 다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
번역
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express + AWS S3 이미지 업로드하기웹 사이트 및 모바일 애플리케이션 등에서 원하는 양의 데이터를 저장하고 보호할 수 있다. 데이터에 대한 액세스를 최적화, 구조화 및 구성할 수 있는 관리 기능을 제공한다. AWS S3 에 저장된 객체에 대한 컨테이너...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.