Mencetak durasi waktu dari berbagai tahap permintaan http/s, seperti pencarian DNS, jabat tangan TLS, waktu untuk byte pertama dll. Demikian pula dengan perintah waktu, yang mengukur waktu proses, perintah nettime mengukur waktu permintaan http/s. Anda dapat menemukan informasi lebih lanjut dalam memahami & mengukur waktu HTTP dengan Node.js.
Perhatian : Opsi baris perintah berubah antara versi 0.x dan 1.x, sehingga mereka menjadi kompatibel dengan curl. Jika Anda menggunakan alat baris perintah nettime , periksa opsi yang terpengaruh:
-e, --ignore-certificate => -k, --insecure
-u, --unit => -t, --time-unit
-U, --user => -u, --user
Antarmuka terprogram tidak berubah dan tetap kompatibel.
Pastikan Anda memiliki node.js> = 14.8 diinstal. Instal Paket nettime secara global dan cetak timing situs web sampel:
$ 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) Menjalankan nettime tanpa parameter apa pun mencetak instruksi penggunaan:
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
Pastikan Anda menggunakan node.js> = 14.8. Instal paket nettime secara lokal dan dapatkan durasi waktu menunggu respons dan mengunduh konten halaman web sampel:
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 ) ) Modul utama mengekspor fungsi yang membuat permintaan HTTP/S dan mengembalikan janji ke objek hasil. Fungsi ini membawa properti nettime , getDuration , getMilliseconds dan isRedirect , sehingga ekspor dapat dikonsumsi sebagai objek dengan beberapa fungsi statis juga:
const nettime = require ( 'nettime' )
const { nettime , getDuration } = require ( 'nettime' )Argumen input adalah string dengan URL untuk membuat permintaan dengan, atau objek dengan beberapa properti.
Objek input dapat berisi:
url : String dengan URL untuk mengajukan permintaan.credentials : Objek dengan username dan password string properti yang akan digunakan untuk memformat header http otentikasi dasar.data : String atau buffer untuk mengirim ke server menggunakan HTTP Verb POST dan application/x-www-form-urlencoded secara default.failOnOutputFileError : Boolean untuk mencegah operasi waktu permintaan gagal, jika menulis ke file output gagal. Jika diatur ke false , kesalahan akan dicetak pada output standar dan kode keluar proses akan diatur ke 2. Ini berlaku hanya jika outputFile ditentukan. Standarnya true .headers : Objek dengan nama header sebagai tombol string dan nilai header sebagai nilai string.httpVersion : string dengan versi protokol ('1.0', '1.1' atau '2.0') untuk dikirim ke server. (Node.js Dukungan http dikodekan untuk 1.1. Mungkin ada perbedaan antara 1.0 dan 1.1 di sisi server saja. Node.js mendukung HTTP/2 di versi 8.4.0 atau yang lebih baru dengan-out-of-the-box.followRedirects : Boolean untuk melanjutkan mengajukan permintaan, jika respons asli berisi kode status HTTP yang mengarahkan ulangincludeHeaders : boolean untuk memasukkan headers properti ( Object ) dengan header respons dalam objek hasil yang dijanjikan. Jika outputFile ditentukan, header ditulis ke awal file output juga.method : kata kerja http untuk digunakan dalam permintaan http; GET adalah default, kecuali -i atau -d opsi tidak diatur.outputFile : Path file untuk menulis data yang diterima.rejectUnauthorized : Boolean untuk menolak menyelesaikan permintaan HTTPS, diatur ke true (default), jika validasi sertifikat situs web gagal; mengaturnya ke false membuat permintaan mengabaikan kesalahan sertifikat.returnResponse : Boolean untuk memasukkan response properti ( Buffer ) dengan data yang diterima dalam objek hasil yang dijanjikan.requestCount : Integer untuk membuat banyak permintaan, bukan satu.requestDelay : Integer untuk memperkenalkan penundaan (dalam milidetik) antara setiap dua permintaan. Standarnya adalah 100.timeout : Intere untuk mengatur waktu maksimum (dalam milidetik) permintaan tunggal harus diambil sebelum menggugurkannya.Objek hasil berisi:
httpVersion : Versi http, yang disetujui server (String).statusCode : Kode status HTTP dari respons (integer).statusMessage : Pesan Status HTTP untuk kode status (String).timings : Objek dengan properti waktu dari berbagai tahap permintaan. Pengaturan waktu adalah array dengan dua bilangan bulat - detik dan nanoseconds berlalu karena permintaan telah dibuat, seperti yang dikembalikan oleh Process.hrtime.headers : Objek opsional dengan header respons, jika diaktifkan oleh opsi includeHeaders .url : String opsional dengan URL yang diminta, jika opsi followRedirects diatur ke 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 ]
}
} Jika opsi requestCount lebih besar dari 1 , objek hasil akan dikembalikan dalam array dengan panjang yang sama dengan nilai requestCount . Jika opsi followRedirects kami ditetapkan ke true , objek hasil akan dikembalikan dalam array dengan panjang tergantung pada keberadaan dan jumlah pengalihan respons.
Catatan : Parameter time-unit tidak hanya mempengaruhi format output "teks" dari skrip baris perintah, tetapi juga yang "JSON". Jika diatur ke "MS", nilai waktu akan dicetak dalam milidetik. Jika diatur ke "S+NS", waktu akan dicetak sebagai array dalam format proses. Memanggil fungsi nettime secara terprogram akan selalu mengembalikan waktu sebagai array dalam format proses.
Fungsi -fungsi berikut diekspos sebagai ekspor bernama dari modul nettime/lib/timings untuk membantu berurusan dengan proses. Format waktu dan waktu HRRITE dari berbagai permintaan:
getDuration(start, end) : Menghitung perbedaan antara dua waktu. Mengharapkan dua array dalam proses. Format HRRITE dan mengembalikan hasilnya sebagai array dalam proses yang sama. Format HRRITE.getMilliseconds(timing) : Mengubah waktu menjadi milidetik. Mengharapkan array dalam proses. Format HRRITE dan mengembalikan hasilnya sebagai bilangan bulat.computeAverageDurations(multipleTimings) : Menghitung durasi rata -rata dari serangkaian waktu acara. Array seharusnya berisi objek dengan kunci yang sama dengan objek timings dari respons nettime . Objek yang dikembalikan akan berisi kunci yang sama yang menunjuk ke durasi peristiwa dalam format.createTimingsFromDurations(timings, startTime) : Rekonstruksi waktu acara dari durasi acara. Objek timings seharusnya berisi kunci yang sama dengan objek timings dari respons nettime , tetapi menunjuk ke durasi peristiwa dalam format. Objek yang dikembalikan akan berisi kunci yang sama, tetapi menunjuk ke waktu peristiwa dalam format Process.hrtime. Parameter startTime dapat Shoft waktu acara. Standarnya tidak ada shift - [0, 0] .isRedirect(statusCode) : Memeriksa apakah kode status HTTP berarti pengalihan. Mengembalikan true jika itu, jika tidak false .Metode -metode ini juga dapat diperlukan secara terpisah:
const { isRedirect } = require ( 'nettime' )
const {
getDuration , getMilliseconds ,
computeAverageDurations , createTimingsFromDurations
} = require ( 'nettime/lib/timings' ) Metode getDuration , getMilliseconds dan isRedirect dapat diakses juga sebagai metode statis dari fungsi nettime yang diekspor dari modul nettime utama.
Sebagai pengganti styleguide formal, berhati -hatilah untuk mempertahankan gaya pengkodean yang ada. Tambahkan tes unit untuk fungsionalitas baru atau yang diubah. Serat dan uji kode Anda menggunakan Grunt.
Hak Cipta (C) 2017-2022 Ferdinand Prantl
Berlisensi di bawah lisensi MIT.