พิมพ์ระยะเวลาของขั้นตอนต่าง ๆ ของคำขอ HTTP/S เช่นการค้นหา DNS, การจับมือกัน TLS, เวลาเป็นไบต์ครั้งแรก ฯลฯ ในทำนองเดียวกันกับคำสั่งเวลาซึ่งวัดการกำหนดเวลากระบวนการ, คำสั่ง 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 : บูลีนสำหรับการป้องกันการดำเนินการตามเวลาคำขอไม่ให้ล้มเหลวหากการเขียนไปยังไฟล์เอาต์พุตล้มเหลว หากตั้งค่าเป็น false ข้อผิดพลาดจะถูกพิมพ์บนเอาต์พุตมาตรฐานและรหัสออกกระบวนการจะถูกตั้งค่าเป็น 2 มันจะมีผลเฉพาะเมื่อระบุ outputFile ค่าเริ่มต้นเป็น trueheaders : วัตถุที่มีชื่อส่วนหัวเป็นคีย์สตริงและค่าส่วนหัวเป็นค่าสตริงhttpVersion : สตริงที่มีเวอร์ชันโปรโตคอล ('1.0', '1.1' หรือ '2.0') ที่จะส่งไปยังเซิร์ฟเวอร์ (การสนับสนุน http node.js เป็นรหัสที่ยากสำหรับ 1.1 อาจมีความแตกต่างระหว่าง 1.0 และ 1.1 ทางฝั่งเซิร์ฟเวอร์เท่านั้น node.js รองรับ http/2 ในเวอร์ชัน 8.4.0 หรือใหม่กว่าด้วยการติดตั้ง "HTTP2followRedirects : บูลีนเพื่อดำเนินการตามคำขอต่อไปหากการตอบกลับเดิมมีรหัสสถานะ HTTP ที่เปลี่ยนเส้นทางincludeHeaders : บูลีนสำหรับการรวมส่วน headers ของอสังหาริมทรัพย์ ( Object ) ที่มีส่วนหัวการตอบสนองในวัตถุผลลัพธ์ที่สัญญาไว้ หากระบุ outputFile ส่วนหัวจะถูกเขียนไปยังจุดเริ่มต้นของไฟล์เอาต์พุตด้วยmethod : คำกริยา http ที่จะใช้ในคำขอ HTTP; GET เป็นค่าเริ่มต้นเว้นแต่จะไม่ได้ตั้งค่าตัวเลือก -i หรือ -doutputFile : PATH FILE เพื่อเขียนข้อมูลที่ได้รับไปrejectUnauthorized : บูลีนเพื่อปฏิเสธการร้องขอ HTTPS จะถูกตั้งค่าเป็น true (ค่าเริ่มต้น) หากการตรวจสอบความถูกต้องของใบรับรองเว็บไซต์ล้มเหลว การตั้งค่าเป็น false ทำให้คำขอละเว้นข้อผิดพลาดใบรับรองreturnResponse : บูลีนสำหรับการรวม response ของคุณสมบัติ ( Buffer ) พร้อมข้อมูลที่ได้รับในวัตถุผลลัพธ์ที่สัญญาไว้requestCount : จำนวนเต็มสำหรับการทำหลายคำขอแทนที่จะเป็นหนึ่งrequestDelay : จำนวนเต็มเพื่อแนะนำความล่าช้า (เป็นมิลลิวินาที) ระหว่างสองคำขอ ค่าเริ่มต้นคือ 100timeout : อินเตอร์เพื่อกำหนดเวลาสูงสุด (เป็นมิลลิวินาที) คำขอเดียวควรใช้ก่อนที่จะยกเลิกวัตถุผลลัพธ์ประกอบด้วย:
httpVersion : รุ่น HTTP ซึ่งเซิร์ฟเวอร์ตอบด้วย (สตริง)statusCode : รหัสสถานะ HTTP ของการตอบสนอง (จำนวนเต็ม)statusMessage : ข้อความสถานะ HTTP สำหรับรหัสสถานะ (สตริง)timings : วัตถุที่มีคุณสมบัติเวลาจากขั้นตอนต่าง ๆ ของคำขอ การกำหนดเวลาเป็นอาร์เรย์ที่มีจำนวนเต็มสองจำนวน - วินาทีและนาโนวินาทีผ่านไปนับตั้งแต่มีการร้องขอตามที่ส่งคืนโดย process.hrtimeheaders : วัตถุเสริมที่มีส่วนหัวตอบกลับหากเปิดใช้งานโดยตัวเลือก includeHeadersurl : สตริงเสริมที่มี 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 ]
}
} หาก requestCount ตัวเลือกมากกว่า 1 วัตถุผลลัพธ์จะถูกส่งคืนในอาร์เรย์ที่มีความยาวเท่ากับค่า requestCount หากตัวเลือก followRedirects เราตั้งค่าเป็น true วัตถุผลลัพธ์จะถูกส่งคืนในอาร์เรย์ของความยาวขึ้นอยู่กับการมีอยู่และนับการตอบสนองการเปลี่ยนเส้นทาง
หมายเหตุ : พารามิเตอร์ time-unit ไม่เพียง แต่ส่งผลกระทบต่อรูปแบบเอาต์พุต "ข้อความ" ของสคริปต์บรรทัดคำสั่ง แต่ยังรวมถึง "JSON" อีกด้วย หากตั้งค่าเป็น "MS" ค่าเวลาจะถูกพิมพ์เป็นมิลลิวินาที หากตั้งค่าเป็น "S+NS" การกำหนดเวลาจะถูกพิมพ์เป็นอาร์เรย์ในรูปแบบของ HRTIME การเรียกใช้ฟังก์ชัน nettime โดยทางโปรแกรมจะส่งคืนการกำหนดเวลาเป็นอาร์เรย์ในรูปแบบของ process.hrtime
ฟังก์ชั่นต่อไปนี้จะถูกเปิดเผยตามชื่อการส่งออกจากโมดูล nettime/lib/timings เพื่อช่วยในการจัดการกับ process.ming รูปแบบเวลาและการกำหนดเวลาของ HRTime จากการร้องขอหลายครั้ง:
getDuration(start, end) : คำนวณความแตกต่างระหว่างสองการกำหนดเวลา คาดว่าจะมีสองอาร์เรย์ในรูปแบบของ HRTIME และส่งคืนผลลัพธ์เป็นอาร์เรย์ในกระบวนการเดียวกันรูปแบบของ HRTIMEgetMilliseconds(timing) : แปลงเวลาเป็นมิลลิวินาที คาดว่าจะมีอาร์เรย์ในรูปแบบของ HRTime และส่งคืนผลลัพธ์เป็นจำนวนเต็มcomputeAverageDurations(multipleTimings) : คำนวณระยะเวลาเฉลี่ยจากอาร์เรย์ของการกำหนดเวลาเหตุการณ์ อาร์เรย์ควรมีวัตถุที่มีปุ่มเดียวกับวัตถุ timings จากการตอบกลับ nettime วัตถุที่ส่งคืนจะมีคีย์เดียวกันที่ชี้ไปที่ระยะเวลาเหตุการณ์ในรูปแบบของ HRTimecreateTimingsFromDurations(timings, startTime) : สร้างการกำหนดเวลาเหตุการณ์จากระยะเวลาเหตุการณ์ วัตถุ timings ควรจะมีปุ่มเดียวกับวัตถุการ timings จากการตอบสนอง nettime แต่ชี้ไปที่ระยะเวลาเหตุการณ์ในรูปแบบของ HRTIME วัตถุที่ส่งคืนจะมีคีย์เดียวกัน แต่ชี้ไปที่เวลาเหตุการณ์ในรูปแบบของ HRTime พารามิเตอร์ startTime สามารถ Shoft เวลาเหตุการณ์ได้ ค่าเริ่มต้นคือไม่มีกะ - [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 หลัก
แทนสไตล์การจัดการอย่างเป็นทางการดูแลรักษาสไตล์การเข้ารหัสที่มีอยู่ เพิ่มการทดสอบหน่วยสำหรับฟังก์ชั่นใหม่หรือที่เปลี่ยนแปลง ผ้าสำลีและทดสอบรหัสของคุณโดยใช้คำราม
ลิขสิทธิ์ (C) 2017-2022 Ferdinand Prantl
ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT