Печать продолжительности времени различных этапов запроса HTTP/S, таких как поиск DNS, рукопожатие TLS, время до первого байта и т. Д. Аналогично команде Time, которая измеряет время процесса, команда nettime измеряет время запроса HTTP/S. Вы можете найти больше информации в понимании и измерении времени HTTP с помощью Node.js.
Внимание : параметры командной строки изменяются между 0.x и 1.x версиями, так что они становятся совместимыми с Curl. Если вы используете инструмент командной строки nettime , проверьте затронутые параметры:
-e, --ignore-certificate => -k, --insecure
-u, --unit => -t, --time-unit
-U, --user => -u, --user
Программный интерфейс не изменился и оставался совместимым.
Убедитесь, что у вас установлен node.js> = 14,8. Установите пакет nettime по всему миру и распечатайте время примера веб -сайта:
$ npm install -g nettime
$ nettime https://www.google.com
Phase Finished Duration
-----------------------------------
Socket Open 0.023s 0.023s
DNS Lookup 0.024s 0.001s
TCP Connection 0.053s 0.029s
TLS Handshake 0.133s 0.079s
First Byte 0.174s 0.041s
Content Transfer 0.176s 0.002s
Socket Close 0.177s 0.001s
-----------------------------------
Status Code: OK (200) Запуск nettime без каких -либо параметров печатает инструкции по использованию:
Usage: nettime [options] <URL>
Options:
-V, --version output the version number
-0, --http1.0 use HTTP 1.0
--http1.1 use HTTP 1.1 (default)
--http2 use HTTP 2.0
-c, --connect-timeout <ms> maximum time to wait for a connection
-d, --data <data> data to be sent using the POST verb
-f, --format <format> set output format: text, json, raw
-H, --header <header> send specific HTTP header
-i, --include include response headers in the output
-I, --head use HEAD verb to get document info only
-k, --insecure ignore certificate errors
-L, --location follow redirects
-o, --output <file> write the received data to a file
-t, --time-unit <unit> set time unit: ms, s+ns
-u, --user <credentials> credentials for Basic Authentication
-X, --request <verb> specify HTTP verb to use for the request
-C, --request-count <count> count of requests to make (default: 1)
-D, --request-delay <ms> delay between two requests
-A, --average-timings print an average of multiple request timings
-h, --help output usage information
The default output format is "text" and time unit "ms". Other options
are compatible with curl. Timings are printed to the standard output.
Examples:
$ nettime -f json https://www.github.com
$ nettime --http2 -C 3 -A https://www.google.com
Убедитесь, что вы используете node.js> = 14,8. Установите пакет nettime локально и получите время ожидания ответа и загрузки контента примерной веб -страницы:
npm install --save nettime const { nettime , getDuration } = require ( 'nettime' )
nettime ( 'https://www.google.com' )
. then ( result => {
if ( result . statusCode === 200 ) {
let timings = result . timings
let waiting = getDuration ( [ 0 , 0 ] , timings . firstByte )
let downloading = getDuration ( timings . firstByte , timings . contentTransfer )
console . log ( 'Waiting for the response:' , nettime . getMilliseconds ( waiting ) + 'ms' )
console . log ( 'Downloading the content:' , nettime . getMilliseconds ( downloading ) + 'ms' )
}
} )
. catch ( error => console . error ( error ) ) Основной модуль экспортирует функцию, которая делает запрос HTTP/S и возвращает обещание объекту результата. Функция несет свойства nettime , getDuration , getMilliseconds и isRedirect , чтобы экспорт мог быть использован как объект с несколькими статическими функциями:
const nettime = require ( 'nettime' )
const { nettime , getDuration } = require ( 'nettime' )Аргумент ввода - это строка с URL -адресом для выполнения запроса, или объект с несколькими свойствами.
Входной объект может содержать:
url : строка с URL, чтобы сделать запрос.credentials : объект с username и свойствами строки password , которые будут использоваться для форматирования основной аутентификации HTTP заголовка.data : строка или буфер для отправки на сервер, используя POST HTTP и application/x-www-form-urlencoded по умолчанию.failOnOutputFileError : Boolean для предотвращения сбоя операции по времени запроса, если записать в выходной файл. Если установить на false , ошибка будет напечатана на стандартном выходе, а код выхода процесса будет установлен на 2. Она действует только в том случае, если указан outputFile . По умолчанию true .headers : объект с именами заголовков в виде ключей строковых и значений заголовков в виде значений строки.httpVersion : строка с версией протокола ('1.0', '1.1' или '2.0') для отправки на сервер. (Поддержка node.js http жестко кодирована для 1.1. Может быть разница между 1,0 и 1.1 только на стороне сервера. Node.js поддерживает HTTP/2 в версии 8.4.0 или более новее с вариантом командного лайма-http2, а также в версии 8.8.1 или более новой изделия. Альтернативно, вы можете установить «http2».followRedirects : BOOLEN для продолжения выполнения запросов, если исходный ответ содержал перенаправление кода состояния HTTPincludeHeaders : Boolean для включения headers свойств ( Object ) с заголовками ответов в обещанный объект результата. Если выведен outputFile , заголовки записываются в начало выходного файла.method : HTTP -глагол для использования в HTTP -запросе; GET -это по умолчанию, если параметры -i или -d не установлены.outputFile : Путь файла для записи полученных данных.rejectUnauthorized : логический отказ отказаться от завершения запроса HTTPS, установлен на true (The Default), если проверка сертификата веб -сайта не удастся; Установка его в false заставляет запрос игнорировать ошибки сертификата.returnResponse : Boolean для включения response свойства ( Buffer ) с полученными данными в обещанный объект результата.requestCount : Integer для выполнения нескольких запросов вместо одного.requestDelay : Integer для введения задержки (в миллисекундах) между каждым двумя запросами. По умолчанию 100.timeout : взаимодействие, чтобы установить максимальное время (в миллисекундах), который должен предпринять один запрос, прежде чем прервать его.Объект результата содержит:
httpVersion : http -версия, на которую сервер ответил (String).statusCode : HTTP -код ответа ответа (Integer).statusMessage : сообщение о состоянии HTTP для кода состояния (строка).timings : объект с временными свойствами с различных этапов запроса. Время - это массив с двумя целыми числами - секунды и наносекунд, пройденные с момента подачи запроса, как возвращается Process.hrtime.headers : дополнительный объект с заголовками ответов, если включен опцией, includeHeaders .url : необязательная строка с запрошенным URL, если опция followRedirects была установлена на true . {
"httpVersion" : '1.1' ,
"statusCode" : 200 ,
"statusMessage" : "OK" ,
"timings" : {
"socketOpen" : [ 0 , 13260126 ] ,
"dnsLookup" : [ 0 , 13747391 ] , // Optional, if hostname was specified
"tcpConnection" : [ 0 , 152135165 ] ,
"tlsHandshake" : [ 0 , 433219351 ] , // Optional, if HTTPS protocol was used
"firstByte" : [ 1 , 888887072 ] ,
"contentTransfer" : [ 1 , 891221207 ] ,
"socketClose" : [ 1 , 893156380 ]
}
} Если Option requestCount больше 1 , объекты результата будут возвращены в массиве той же длины, что и значение requestCount . Если опция followRedirects мы установили на true , объекты результата будут возвращены в массиве длины в зависимости от присутствия и подсчета перенаправления ответов.
ПРИМЕЧАНИЕ . Параметр time-unit влияет не только на формат вывода «текста» сценария командной строки, но и на «JSON». Если установить на «MS», значения времени будут напечатаны в миллисекундах. Если установлено на «S+NS», время будет напечатано в виде массивов в формате Process.hrtime. Программное вызов функции nettime всегда будет возвращать время в виде массивов в формате Process.hrtime.
Следующие функции выставлены в виде названного экспорта из модуля nettime/lib/timings чтобы помочь справиться с форматом времени и времен от нескольких запросов:
getDuration(start, end) : вычисляет разницу между двумя временем. Ожидает два массива в формате Process.hrtime и возвращает результат в качестве массива в том же процессе. Формат Hrtime.getMilliseconds(timing) : преобразует время в миллисекунд. Ожидает массив в формате Process.hrtime и возвращает результат в качестве целого числа.computeAverageDurations(multipleTimings) : вычисляет среднюю продолжительность из множества времени событий. Предполагается, что массив содержит объекты с теми же клавишами, что и объект timings из ответа nettime . Возвращенный объект будет содержать те же ключи, указывающие на продолжительность событий в формате Hrtime.createTimingsFromDurations(timings, startTime) : реконструирует время событий из продолжительности событий. Предполагается, что объект timings содержит те же ключи, что и объект timings из ответа nettime , но указывает на продолжительность событий в формате Process.hrtime. Возвращенный объект будет содержать те же ключи, но указывает на время событий в формате процесса.hrtime. Параметр startTime может сдвинуть время события. По умолчанию не сдвиг - [0, 0] .isRedirect(statusCode) : проверяет, означает ли код состояния HTTP означает перенаправление. Возвращает true если это так, в противном случае false .Эти методы тоже могут потребоваться отдельно:
const { isRedirect } = require ( 'nettime' )
const {
getDuration , getMilliseconds ,
computeAverageDurations , createTimingsFromDurations
} = require ( 'nettime/lib/timings' ) Методы getDuration , getMilliseconds и isRedirect доступны также как статические методы функции nettime экспортируемых из основного модуля nettime .
Вместо формального стиля, позаботьтесь о поддержании существующего стиля кодирования. Добавьте модульные тесты для любой новой или измененной функциональности. Очистите и протестируйте свой код, используя Grunt.
Copyright (C) 2017-2022 Фердинанд Прантл
Лицензирован по лицензии MIT.