يطبع المدة الزمنية لمختلف المراحل من طلب HTTP/S ، مثل البحث عن DNS ، مصافحة TLS ، الوقت للبايت الأول وما إلى ذلك على غرار أمر الوقت ، الذي يقيس توقيت العملية ، يقيس أمر nettime توقيت HTTP/S. يمكنك العثور على مزيد من المعلومات في فهم وقياس توقيت HTTP مع Node.js.
الانتباه : تم تغيير خيارات خط الأوامر بين إصدارات 0.x و 1.x ، بحيث تصبح متوافقة مع حليقة. إذا كنت تستخدم أداة سطر أوامر 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 VERB HTTP application/x-www-form-urlencoded افتراضيًا.failOnOutputFileError : منطقية لمنع عملية توقيت الطلب من الفشل ، إذا فشلت الكتابة إلى ملف الإخراج. إذا تم تعيينه على 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 أو الأحدث.followRedirects : منطقية لمواصلة تقديم الطلبات ، إذا كانت الاستجابة الأصلية تحتوي على رمز حالة HTTP إعادة توجيهincludeHeaders : منطقية لتضمين headers الممتلكات ( Object ) مع رؤوس الاستجابة في كائن النتيجة الموعودة. إذا تم تحديد outputFile ، تتم كتابة الرؤوس إلى بداية ملف الإخراج أيضًا.method : VERB HTTP لاستخدامها في طلب HTTP ؛ GET هو الافتراضي ، ما لم يتم تعيين خيارات -i أو -d .outputFile : مسار الملف لكتابة البيانات المستلمة إلى.rejectUnauthorized : تم تعيين منطقية لرفض الانتهاء من طلب HTTPS ، على true (الافتراضي) ، إذا فشل التحقق من شهادة موقع الويب ؛ إعداده على false يجعل الطلب تجاهل أخطاء الشهادة.returnResponse : منطقية لتضمين response الممتلكات ( Buffer ) مع البيانات المستلمة في كائن النتيجة الموعودة.requestCount : عدد صحيح لتقديم طلبات متعددة بدلا من واحد.requestDelay : عدد صحيح لتقديم تأخير (بالميلي ثانية) بين كل اثنين من الطلبات. الافتراضي هو 100.timeout : intere لتعيين الحد الأقصى للوقت (بالميلي ثانية) يجب أن يتخذ طلب واحد قبل إحباطه.يحتوي كائن النتيجة على:
httpVersion : إصدار HTTP ، والذي استجاب الخادم بـ (سلسلة).statusCode : HTTP رمز الحالة للاستجابة (عدد صحيح).statusMessage : رسالة حالة http لرمز الحالة (السلسلة).timings : كائن مع خصائص توقيت من مراحل مختلفة من الطلب. التوقيت عبارة عن صفيف مع اثنين من الأعداد الصحيحة - ثواني وتم تمرير النانوسية منذ تقديم الطلب ، كما تم إرجاعه بواسطة Process.Hrime.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 للمساعدة في التعامل مع تنسيق وتوقيت Trime من Trime من طلبات متعددة:
getDuration(start, end) : يحسب الفرق بين توقيتين. يتوقع صفيفتين في عملية.getMilliseconds(timing) : يحول التوقيت إلى ميلي ثانية. يتوقع صفيفًا في تنسيق Process.computeAverageDurations(multipleTimings) : يحسب متوسط فترات من مجموعة من توقيت الأحداث. من المفترض أن تحتوي الصفيف على كائنات ذات مفاتيح نفس كائن timings من استجابة nettime . سيحتوي الكائن الذي تم إرجاعه على نفس المفاتيح التي تشير إلى فترات الحدث في عملية.createTimingsFromDurations(timings, startTime) : إعادة بناء توقيتات الأحداث من فترات الأحداث. من المفترض أن يحتوي كائن timings على نفس مفاتيح كائن timings من استجابة nettime ، ولكن يشير إلى فترات الحدث في تنسيق Trime. سيحتوي الكائن الذي تم إرجاعه على نفس المفاتيح ، ولكن الإشارة إلى أوقات الحدث في عملية. يمكن لمعلمة 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.
حقوق الطبع والنشر (C) 2017-2022 Ferdinand Prantl
مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.