واجهات برمجة التطبيقات لقياس الأداء
المصدر: lib/perf_hooks.js
توفر هذه الوحدة تنفيذًا لمجموعة فرعية من واجهات برمجة تطبيقات الأداء على الويب من W3C واجهات برمجة تطبيقات الأداء على الويب بالإضافة إلى واجهات برمجة تطبيقات إضافية لقياسات الأداء الخاصة بـ Node.js.
يدعم Node.js واجهات برمجة تطبيقات الأداء على الويب التالية واجهات برمجة تطبيقات الأداء على الويب:
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver(items => {
console.log(items.getEntries()[0].duration)
performance.clearMarks()
})
obs.observe({ type: 'measure' })
performance.measure('Start to Now')
performance.mark('A')
doSomeLongRunningProcess(() => {
performance.measure('A to Now', 'A')
performance.mark('B')
performance.measure('A to B', 'A', 'B')
})
const { PerformanceObserver, performance } = require('node:perf_hooks')
const obs = new PerformanceObserver(items => {
console.log(items.getEntries()[0].duration)
})
obs.observe({ type: 'measure' })
performance.measure('Start to Now')
performance.mark('A')
;(async function doSomeLongRunningProcess() {
await new Promise(r => setTimeout(r, 5000))
performance.measure('A to Now', 'A')
performance.mark('B')
performance.measure('A to B', 'A', 'B')
})()
perf_hooks.performance
مضاف في: v8.5.0
كائن يمكن استخدامه لجمع مقاييس الأداء من مثيل Node.js الحالي. وهو مشابه لـ window.performance
في المتصفحات.
performance.clearMarks([name])
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v8.5.0 | تمت الإضافة في: v8.5.0 |
name
<string>
إذا لم يتم توفير name
، فسيتم إزالة جميع كائنات PerformanceMark
من جدول زمني الأداء. إذا تم توفير name
، فسيتم إزالة العلامة المسمّاة فقط.
performance.clearMeasures([name])
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v16.7.0 | تمت الإضافة في: v16.7.0 |
name
<string>
إذا لم يتم توفير name
، فسيتم إزالة جميع كائنات PerformanceMeasure
من جدول زمني الأداء. إذا تم توفير name
، فسيتم إزالة القياس المسمّى فقط.
performance.clearResourceTimings([name])
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
name
<string>
إذا لم يتم توفير name
، فسيتم إزالة جميع كائنات PerformanceResourceTiming
من جدول زمني الموارد. إذا تم توفير name
، فسيتم إزالة المورد المسمّى فقط.
performance.eventLoopUtilization([utilization1[, utilization2]])
تمت الإضافة في: v14.10.0، v12.19.0
utilization1
<Object> نتيجة استدعاء سابق لـeventLoopUtilization()
.utilization2
<Object> نتيجة استدعاء سابق لـeventLoopUtilization()
قبلutilization1
.- الإرجاع: <Object>
ترجع طريقة eventLoopUtilization()
كائنًا يحتوي على المدة التراكمية للوقت الذي كانت فيه حلقة الحدث خاملة وفعالة كعداد ميلي ثانية عالي الدقة. قيمة utilization
هي معدل استخدام حلقة الحدث (ELU) المحسوب.
إذا لم ينتهِ التمهيد بعد على مؤشر ترابط رئيسي، فإن خصائص القيم تكون 0
. يتوفر ELU على الفور على خيوط عامل نظرًا لأن التمهيد يحدث داخل حلقة الحدث.
كلا من utilization1
و utilization2
هما معاملان اختياريان.
إذا تم تمرير utilization1
، فسيتم حساب الفرق بين أوقات active
و idle
للاستدعاء الحالي، بالإضافة إلى قيمة utilization
المقابلة، ويتم إرجاعها (على غرار process.hrtime()
).
إذا تم تمرير كل من utilization1
و utilization2
، فسيتم حساب الفرق بين الوسيطتين. هذا خيار ملائم لأنه، على عكس process.hrtime()
، فإن حساب ELU أكثر تعقيدًا من طرح واحد.
ELU مشابه لاستخدام وحدة المعالجة المركزية، إلا أنه يقيس فقط إحصائيات حلقة الحدث وليس استخدام وحدة المعالجة المركزية. إنه يمثل نسبة الوقت الذي أمضته حلقة الحدث خارج موفر حدث حلقة الحدث (مثل epoll_wait
). لا يُؤخذ أي وقت خاملة آخر لوحدة المعالجة المركزية في الاعتبار. فيما يلي مثال لكيفية امتلاك عملية خاملة في الغالب لـ ELU مرتفع.
import { eventLoopUtilization } from 'node:perf_hooks'
import { spawnSync } from 'node:child_process'
setImmediate(() => {
const elu = eventLoopUtilization()
spawnSync('sleep', ['5'])
console.log(eventLoopUtilization(elu).utilization)
})
'use strict'
const { eventLoopUtilization } = require('node:perf_hooks').performance
const { spawnSync } = require('node:child_process')
setImmediate(() => {
const elu = eventLoopUtilization()
spawnSync('sleep', ['5'])
console.log(eventLoopUtilization(elu).utilization)
})
على الرغم من أن وحدة المعالجة المركزية خاملة في الغالب أثناء تشغيل هذا البرنامج النصي، إلا أن قيمة utilization
هي 1
. هذا لأنه يمنع استدعاء child_process.spawnSync()
حلقة الحدث من المتابعة.
سيؤدي تمرير كائن محدد من قبل المستخدم بدلاً من نتيجة استدعاء سابق لـ eventLoopUtilization()
إلى سلوك غير محدد. لا يُضمن أن تعكس قيم الإرجاع أي حالة صحيحة لحلقة الحدث.
performance.getEntries()
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبِل. |
v16.7.0 | تمت الإضافة في: v16.7.0 |
- الإرجاع: <PerformanceEntry[]>
يُرجِع قائمة من كائنات PerformanceEntry
بترتيب زمني فيما يتعلق بـ performanceEntry.startTime
. إذا كنت مهتمًا فقط بإدخالات الأداء لأنواع معينة أو لها أسماء معينة، فراجع performance.getEntriesByType()
و performance.getEntriesByName()
.
performance.getEntriesByName(name[, type])
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبِل. |
v16.7.0 | تمت الإضافة في: v16.7.0 |
name
<string>type
<string>- الإرجاع: <PerformanceEntry[]>
يُرجِع قائمة من كائنات PerformanceEntry
بترتيب زمني فيما يتعلق بـ performanceEntry.startTime
حيث يكون performanceEntry.name
مساويًا لـ name
، واختياريًا، حيث يكون performanceEntry.entryType
مساويًا لـ type
.
performance.getEntriesByType(type)
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبِل. |
v16.7.0 | تمت الإضافة في: v16.7.0 |
type
<string>- الإرجاع: <PerformanceEntry[]>
يُرجِع قائمة من كائنات PerformanceEntry
بترتيب زمني فيما يتعلق بـ performanceEntry.startTime
حيث يكون performanceEntry.entryType
مساويًا لـ type
.
performance.mark(name[, options])
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبِل. لم تعد وسيطة الاسم اختيارية. |
v16.0.0 | تم التحديث ليتوافق مع مواصفات User Timing Level 3. |
v8.5.0 | تمت الإضافة في: v8.5.0 |
يُنشئ إدخال PerformanceMark
جديدًا في مخطط الجدول الزمني للأداء. PerformanceMark
هو فئة فرعية من PerformanceEntry
حيث يكون performanceEntry.entryType
دائمًا 'mark'
، ويكون performanceEntry.duration
دائمًا 0
. تُستخدم علامات الأداء لتمييز لحظات مهمة محددة في مخطط الجدول الزمني للأداء.
يتم وضع إدخال PerformanceMark
المُنشأ في مخطط الجدول الزمني العالمي للأداء ويمكن استعلامه باستخدام performance.getEntries
و performance.getEntriesByName
و performance.getEntriesByType
. عند إجراء الملاحظة، يجب مسح الإدخالات يدويًا من مخطط الجدول الزمني العالمي للأداء باستخدام performance.clearMarks
.
performance.markResourceTiming(timingInfo, requestedUrl, initiatorType, global, cacheMode, bodyInfo, responseStatus[, deliveryType])
[السجل]
الإصدار | التغييرات |
---|---|
v22.2.0 | تمت إضافة الوسيطات bodyInfo و responseStatus و deliveryType. |
v18.2.0، v16.17.0 | تمت الإضافة في: v18.2.0، v16.17.0 |
timingInfo
<Object> معلومات توقيت الاسترجاعrequestedUrl
<string> عنوان URL للموردinitiatorType
<string> اسم المُنشِئ، مثل: 'fetch'global
<Object>cacheMode
<string> يجب أن يكون وضع التخزين المؤقت سلسلة فارغة ('') أو 'local'bodyInfo
<Object> معلومات جسم استجابة الاسترجاعresponseStatus
<number> رمز حالة الاستجابةdeliveryType
<string> نوع التسليم. الافتراضي:''
.
هذه الخاصية عبارة عن امتداد من Node.js. وهي غير متوفرة في متصفحات الويب.
يُنشئ إدخالًا جديدًا PerformanceResourceTiming
في جدول زمني للموارد. PerformanceResourceTiming
هي فئة فرعية من PerformanceEntry
حيث يكون performanceEntry.entryType
دائمًا 'resource'
. تُستخدم موارد الأداء لتمييز اللحظات في الجدول الزمني للموارد.
يُوضع إدخال PerformanceMark
المُنشأ في الجدول الزمني العالمي للموارد ويمكن استعلامه باستخدام performance.getEntries
و performance.getEntriesByName
و performance.getEntriesByType
. عند إجراء الملاحظة، يجب مسح الإدخالات يدويًا من الجدول الزمني العالمي للأداء باستخدام performance.clearResourceTimings
.
performance.measure(name[, startMarkOrOptions[, endMark]])
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v16.0.0 | تم التحديث ليتوافق مع مواصفات توقيت المستخدم المستوى 3. |
v13.13.0، v12.16.3 | جعل المعلمتان startMark و endMark اختياريتين. |
v8.5.0 | تمت الإضافة في: v8.5.0 |
يُنشئ مُدخلاً جديداً PerformanceMeasure
في مخطط توقيت الأداء. PerformanceMeasure
هو فئة فرعية من PerformanceEntry
حيث يكون performanceEntry.entryType
دائمًا 'measure'
, وحيث يقيس performanceEntry.duration
عدد الميلي ثانية المنقضية منذ startMark
و endMark
.
قد يُحدد الوسيط startMark
أي PerformanceMark
موجود في مخطط توقيت الأداء، أو قد يُحدد أيًا من خصائص الموقت التي يوفرها فئة PerformanceNodeTiming
. إذا لم تكن العلامة المُسماة startMark
موجودة، فسيتم إطلاق خطأ.
يجب أن يُحدد الوسيط الاختياري endMark
أي PerformanceMark
موجود في مخطط توقيت الأداء أو أيًا من خصائص الموقت التي يوفرها فئة PerformanceNodeTiming
. سيكون endMark
هو performance.now()
إذا لم يتم تمرير أي معلمة، وإلا، إذا لم تكن العلامة المُسماة endMark
موجودة، فسيتم إطلاق خطأ.
يتم وضع مُدخَل PerformanceMeasure
المُنشأ في مخطط توقيت الأداء العام ويمكن استعراضه باستخدام performance.getEntries
, performance.getEntriesByName
, و performance.getEntriesByType
. عند إجراء الملاحظة، يجب مسح الإدخالات يدويًا من مخطط توقيت الأداء العام باستخدام performance.clearMeasures
.
performance.nodeTiming
مضاف في: v8.5.0
هذه الخاصية إضافة من Node.js. ليست متوفرة في متصفحات الويب.
مثيل من فئة PerformanceNodeTiming
يوفر مقاييس الأداء لمعالم تشغيل Node.js محددة.
performance.now()
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v8.5.0 | مضاف في: v8.5.0 |
- قيمة الإرجاع: <number>
يرجع طابع زمني بالميللي ثانية بدقة عالية، حيث يمثل 0 بداية عملية node
الحالية.
performance.setResourceTimingBufferSize(maxSize)
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v18.8.0 | مضاف في: v18.8.0 |
يحدد حجم المخزن المؤقت العالمي لتوقيت موارد الأداء إلى العدد المحدد من كائنات إدخال الأداء من نوع "resource".
بحكم الإعداد الافتراضي، يتم تعيين الحد الأقصى لحجم المخزن المؤقت إلى 250.
performance.timeOrigin
مضاف في: v8.5.0
يحدد timeOrigin
طابع زمني بالميللي ثانية بدقة عالية بدأت عنده عملية node
الحالية، مقاسةً بزمن يونكس.
performance.timerify(fn[, options])
[السجل]
الإصدار | التغييرات |
---|---|
v16.0.0 | أضيف خيار الرسم البياني. |
v16.0.0 | أعيد تنفيذه لاستخدام جافا سكريبت نقي والقدرة على قياس وظائف غير متزامنة. |
v8.5.0 | مضاف في: v8.5.0 |
fn
<Function>options
<Object>histogram
<RecordableHistogram> كائن رسم بياني تم إنشاؤه باستخدامperf_hooks.createHistogram()
والذي سيسجل مدد وقت التشغيل بالنانوثانية.
هذه الخاصية إضافة من Node.js. ليست متوفرة في متصفحات الويب.
يُغلف دالة داخل دالة جديدة تقيس وقت تشغيل الدالة المُغلّفة. يجب اشتراك PerformanceObserver
في نوع الحدث 'function'
لكي يتم الوصول إلى تفاصيل التوقيت.
import { performance, PerformanceObserver } from 'node:perf_hooks'
function someFunction() {
console.log('hello world')
}
const wrapped = performance.timerify(someFunction)
const obs = new PerformanceObserver(list => {
console.log(list.getEntries()[0].duration)
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'] })
// سيتم إنشاء إدخال خط زمني للأداء
wrapped()
const { performance, PerformanceObserver } = require('node:perf_hooks')
function someFunction() {
console.log('hello world')
}
const wrapped = performance.timerify(someFunction)
const obs = new PerformanceObserver(list => {
console.log(list.getEntries()[0].duration)
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'] })
// سيتم إنشاء إدخال خط زمني للأداء
wrapped()
إذا كانت الدالة المُغلّفة تُرجع وعدًا، فسيتم إرفاق مُعامل finally بالوعد وسيتم الإبلاغ عن المدة بمجرد استدعاء مُعامل finally.
performance.toJSON()
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن performance كمستقبل. |
v16.1.0 | تمت الإضافة في: v16.1.0 |
كائن يمثل تمثيل JSON لكائن performance
. وهو مشابه لـ window.performance.toJSON
في المتصفحات.
حدث: 'resourcetimingbufferfull'
تمت الإضافة في: v18.8.0
يتم إطلاق حدث 'resourcetimingbufferfull'
عندما يمتلئ المخزن المؤقت لتوقيت موارد الأداء العام. قم بضبط حجم المخزن المؤقت لتوقيت موارد الأداء باستخدام performance.setResourceTimingBufferSize()
أو قم بمسح المخزن المؤقت باستخدام performance.clearResourceTimings()
في مستمع الحدث للسماح بإضافة المزيد من الإدخالات إلى مخزن مؤقت جدول زمني للأداء.
Class: PerformanceEntry
تمت الإضافة في: v8.5.0
لا يُعرّض مُنشئ هذه الفئة للمستخدمين مباشرةً.
performanceEntry.duration
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceEntry كمستقبل. |
v8.5.0 | تمت الإضافة في: v8.5.0 |
العدد الإجمالي للميلي ثانية المنقضية لهذا الإدخال. لن تكون هذه القيمة ذات مغزى لجميع أنواع إدخالات الأداء.
performanceEntry.entryType
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceEntry كمستقبل. |
v8.5.0 | تمت الإضافة في: v8.5.0 |
نوع إدخال الأداء. قد يكون أحد ما يلي:
'dns'
(Node.js فقط)'function'
(Node.js فقط)'gc'
(Node.js فقط)'http2'
(Node.js فقط)'http'
(Node.js فقط)'mark'
(متوفر على الويب)'measure'
(متوفر على الويب)'net'
(Node.js فقط)'node'
(Node.js فقط)'resource'
(متوفر على الويب)
performanceEntry.name
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceEntry كمُستقبِل. |
v8.5.0 | مُضاف في: v8.5.0 |
اسم إدخال الأداء.
performanceEntry.startTime
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceEntry كمُستقبِل. |
v8.5.0 | مُضاف في: v8.5.0 |
الوقت الزمني بدقة عالية بالميلي ثانية الذي يُشير إلى وقت بدء إدخال الأداء.
Class: PerformanceMark
مُضاف في: v18.2.0، v16.17.0
- يمتد: <PerformanceEntry>
يعرض العلامات المُنشأة عبر طريقة Performance.mark()
.
performanceMark.detail
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceMark كمُستقبِل. |
v16.0.0 | مُضاف في: v16.0.0 |
تفاصيل إضافية مُحددة عند إنشاء الطريقة باستخدام Performance.mark()
.
Class: PerformanceMeasure
مُضاف في: v18.2.0، v16.17.0
- يمتد: <PerformanceEntry>
يعرض القياسات المُنشأة عبر طريقة Performance.measure()
.
لا يُعرّض مُنشئ هذه الفئة للمستخدمين مباشرةً.
performanceMeasure.detail
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceMeasure كمُستقبِل. |
v16.0.0 | مُضاف في: v16.0.0 |
تفاصيل إضافية مُحددة عند إنشاء الطريقة باستخدام Performance.measure()
.
الصنف: PerformanceNodeEntry
مضاف في: v19.0.0
- يمتد: <PerformanceEntry>
هذا الصنف هو امتداد من Node.js. إنه غير متوفر في متصفحات الويب.
يوفر بيانات توقيت مفصلة من Node.js.
لا يُعرّض مُنشئ هذا الصنف للمستخدمين مباشرةً.
performanceNodeEntry.detail
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ هذا الخاصية باستخدام كائن PerformanceNodeEntry كمستقبل. |
v16.0.0 | مضاف في: v16.0.0 |
تفاصيل إضافية خاصة بـ entryType
.
performanceNodeEntry.flags
[السجل]
الإصدار | التغييرات |
---|---|
v16.0.0 | عفا عليها الزمن في وقت التشغيل. تم نقلها الآن إلى خاصية التفاصيل عندما يكون entryType هو 'gc'. |
v13.9.0, v12.17.0 | مضاف في: v13.9.0, v12.17.0 |
[مستقر: 0 - عفا عليها الزمن]
مستقر: 0 الثبات: 0 - عفا عليها الزمن: استخدم performanceNodeEntry.detail
بدلاً من ذلك.
عندما تكون performanceEntry.entryType
مساوية لـ 'gc'
، تحتوي خاصية performance.flags
على معلومات إضافية حول عملية جمع القمامة. قد تكون القيمة واحدة من:
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_NO
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_FORCED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE
performanceNodeEntry.kind
[السجل]
الإصدار | التغييرات |
---|---|
v16.0.0 | عفا عليها الزمن في وقت التشغيل. تم نقلها الآن إلى خاصية التفاصيل عندما يكون entryType هو 'gc'. |
v8.5.0 | مضاف في: v8.5.0 |
[مستقر: 0 - عفا عليها الزمن]
مستقر: 0 الثبات: 0 - عفا عليها الزمن: استخدم performanceNodeEntry.detail
بدلاً من ذلك.
عندما تكون performanceEntry.entryType
مساوية لـ 'gc'
، تحدد خاصية performance.kind
نوع عملية جمع القمامة التي حدثت. قد تكون القيمة واحدة من:
perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR
perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR
perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL
perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
تفاصيل جمع القمامة ('gc')
عندما يكون performanceEntry.type
مساويًا لـ 'gc'
، ستكون خاصية performanceNodeEntry.detail
عبارة عن <Object> مع خاصيتين:
kind
<number> أحد ما يلي:perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR
perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR
perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL
perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
flags
<number> أحد ما يلي:perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_NO
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_FORCED
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY
perf_hooks.constants.NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE
تفاصيل HTTP ('http')
عندما يكون performanceEntry.type
مساويًا لـ 'http'
، ستكون خاصية performanceNodeEntry.detail
عبارة عن <Object> تحتوي على معلومات إضافية.
إذا كان performanceEntry.name
مساويًا لـ HttpClient
، فستحتوي detail
على الخصائص التالية: req
، res
. وستكون خاصية req
عبارة عن <Object> تحتوي على method
، url
، headers
، وستكون خاصية res
عبارة عن <Object> تحتوي على statusCode
، statusMessage
، headers
.
إذا كان performanceEntry.name
مساويًا لـ HttpRequest
، فستحتوي detail
على الخصائص التالية: req
، res
. وستكون خاصية req
عبارة عن <Object> تحتوي على method
، url
، headers
، وستكون خاصية res
عبارة عن <Object> تحتوي على statusCode
، statusMessage
، headers
.
قد يضيف هذا عبئًا إضافيًا على الذاكرة، ويجب استخدامه فقط لأغراض التشخيص، وليس تركه قيد التشغيل في الإنتاج افتراضيًا.
تفاصيل HTTP/2 ('http2')
عندما يكون performanceEntry.type
مساوياً لـ 'http2'
، ستكون خاصية performanceNodeEntry.detail
عبارة عن <Object> تحتوي على معلومات أداء إضافية.
إذا كان performanceEntry.name
مساوياً لـ Http2Stream
، فستحتوي الخاصية detail
على الخصائص التالية:
bytesRead
<number> عدد بايتات إطارDATA
المستلمة لهذاHttp2Stream
.bytesWritten
<number> عدد بايتات إطارDATA
المرسلة لهذاHttp2Stream
.id
<number> مُعرّفHttp2Stream
المرتبط.timeToFirstByte
<number> عدد الميلي ثانية المنقضية بينstartTime
لـPerformanceEntry
واستقبال أول إطارDATA
.timeToFirstByteSent
<number> عدد الميلي ثانية المنقضية بينstartTime
لـPerformanceEntry
وإرسال أول إطارDATA
.timeToFirstHeader
<number> عدد الميلي ثانية المنقضية بينstartTime
لـPerformanceEntry
واستقبال أول رأس.
إذا كان performanceEntry.name
مساوياً لـ Http2Session
، فستحتوي الخاصية detail
على الخصائص التالية:
bytesRead
<number> عدد البايتات المستلمة لهذاHttp2Session
.bytesWritten
<number> عدد البايتات المرسلة لهذاHttp2Session
.framesReceived
<number> عدد أطر HTTP/2 المستلمة بواسطةHttp2Session
.framesSent
<number> عدد أطر HTTP/2 المرسلة بواسطةHttp2Session
.maxConcurrentStreams
<number> الحد الأقصى لعدد التدفقات المفتوحة بشكل متزامن خلال عمرHttp2Session
.pingRTT
<number> عدد الميلي ثانية المنقضية منذ إرسال إطارPING
واستقبال إقراره. يظهر فقط إذا تم إرسال إطارPING
علىHttp2Session
.streamAverageDuration
<number> متوسط المدة (بالميلي ثانية) لجميع مثيلاتHttp2Stream
.streamCount
<number> عدد مثيلاتHttp2Stream
التي تم معالجتها بواسطةHttp2Session
.type
<string> إما'server'
أو'client'
لتحديد نوعHttp2Session
.
تفاصيل Timerify ('function')
عندما يكون performanceEntry.type
مساوياً لـ 'function'
، ستكون خاصية performanceNodeEntry.detail
عبارة عن <Array> تُدرج حجج الإدخال للدالة المُوقَّتة.
تفاصيل Net ('net')
عندما يكون performanceEntry.type
مساوياً لـ 'net'
، ستكون خاصية performanceNodeEntry.detail
عبارة عن <Object> تحتوي على معلومات إضافية.
إذا كان performanceEntry.name
مساوياً لـ connect
، فستحتوي detail
على الخصائص التالية: host
, port
.
تفاصيل DNS ('dns')
عندما يكون performanceEntry.type
مساوياً لـ 'dns'
، ستكون خاصية performanceNodeEntry.detail
عبارة عن <Object> تحتوي على معلومات إضافية.
إذا كان performanceEntry.name
مساوياً لـ lookup
، فستحتوي detail
على الخصائص التالية: hostname
, family
, hints
, verbatim
, addresses
.
إذا كان performanceEntry.name
مساوياً لـ lookupService
، فستحتوي detail
على الخصائص التالية: host
, port
, hostname
, service
.
إذا كان performanceEntry.name
مساوياً لـ queryxxx
أو getHostByAddr
، فستحتوي detail
على الخصائص التالية: host
, ttl
, result
. قيمة result
هي نفسها نتيجة queryxxx
أو getHostByAddr
.
الفئة: PerformanceNodeTiming
مُضافة في: v8.5.0
- يمتد: <PerformanceEntry>
هذه الخاصية هي امتداد من Node.js. إنها غير متوفرة في متصفحات الويب.
يوفر تفاصيل التوقيت لـ Node.js نفسها. لا يُعرّض مُنشئ هذه الفئة للمستخدمين.
performanceNodeTiming.bootstrapComplete
مُضافة في: v8.5.0
الوقت الزمني بدقة عالية بالميلي ثانية عند اكتمال عملية تمهيد Node.js. إذا لم تنتهِ عملية التمهيد بعد، فإن الخاصية لها قيمة -1.
performanceNodeTiming.environment
مضاف في: v8.5.0
الزمن الزمني بدقة عالية بالميلي ثانية عند تهيئة بيئة Node.js.
performanceNodeTiming.idleTime
مضاف في: v14.10.0، v12.19.0
الزمن الزمني بدقة عالية بالميلي ثانية لكمية الوقت الذي كانت فيه حلقة الأحداث خاملة داخل موفر حدث حلقة الأحداث (مثل epoll_wait
). هذا لا يأخذ استخدام وحدة المعالجة المركزية في الاعتبار. إذا لم تبدأ حلقة الأحداث بعد (مثلًا، في أول دورة من البرنامج النصي الرئيسي)، فإن الخاصية لها قيمة 0.
performanceNodeTiming.loopExit
مضاف في: v8.5.0
الزمن الزمني بدقة عالية بالميلي ثانية عند خروج حلقة أحداث Node.js. إذا لم تخرج حلقة الأحداث بعد، فإن الخاصية لها قيمة -1. لا يمكن أن يكون لها قيمة غير -1 إلا في مُعالِج حدث 'exit'
.
performanceNodeTiming.loopStart
مضاف في: v8.5.0
الزمن الزمني بدقة عالية بالميلي ثانية عند بدء تشغيل حلقة أحداث Node.js. إذا لم تبدأ حلقة الأحداث بعد (مثلًا، في أول دورة من البرنامج النصي الرئيسي)، فإن الخاصية لها قيمة -1.
performanceNodeTiming.nodeStart
مضاف في: v8.5.0
الزمن الزمني بدقة عالية بالميلي ثانية عند تهيئة عملية Node.js.
performanceNodeTiming.uvMetricsInfo
مضاف في: v22.8.0، v20.18.0
- تُرجع: <Object>
هذا عبارة عن مُغلف لدالة uv_metrics_info
. يعيد المجموعة الحالية من مقاييس حلقة الأحداث.
يوصى باستخدام هذه الخاصية داخل دالة تم جدولة تنفيذها باستخدام setImmediate
لتجنب جمع المقاييس قبل الانتهاء من جميع العمليات المجدولة خلال تكرار حلقة الأحداث الحالية.
const { performance } = require('node:perf_hooks')
setImmediate(() => {
console.log(performance.nodeTiming.uvMetricsInfo)
})
import { performance } from 'node:perf_hooks'
setImmediate(() => {
console.log(performance.nodeTiming.uvMetricsInfo)
})
performanceNodeTiming.v8Start
أضيف في: v8.5.0
الزمن الزمني بدقة عالية بالميلي ثانية عند بدء تشغيل نظام V8 الأساسي.
الصنف: PerformanceResourceTiming
أضيف في: v18.2.0، v16.17.0
- يمتد: <PerformanceEntry>
يوفر بيانات توقيت الشبكة التفصيلية المتعلقة بتحميل موارد التطبيق.
لا يُعرّض مُنشئ هذا الصنف للمستخدمين مباشرةً.
performanceResourceTiming.workerStart
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0، v16.17.0 | أضيف في: v18.2.0، v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية مباشرةً قبل إرسال طلب fetch
. إذا لم يتم اعتراض المورد بواسطة عامل، فستعيد الخاصية دائمًا 0.
performanceResourceTiming.redirectStart
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0، v16.17.0 | أضيف في: v18.2.0، v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية الذي يمثل وقت بدء عملية fetch
التي تُبدأ إعادة التوجيه.
performanceResourceTiming.redirectEnd
[السجل]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0، v16.17.0 | أضيف في: v18.2.0، v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية الذي سيتم إنشاؤه مباشرةً بعد استلام آخر بايت من استجابة آخر إعادة توجيه.
performanceResourceTiming.fetchStart
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
مُؤشّر زمني بالميلي ثانية بدقة عالية، قبل أن يبدأ Node.js في جلب المورد مباشرةً.
performanceResourceTiming.domainLookupStart
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
مُؤشّر زمني بالميلي ثانية بدقة عالية، قبل أن يبدأ Node.js في البحث عن اسم النطاق الخاص بالمورد مباشرةً.
performanceResourceTiming.domainLookupEnd
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
مُؤشّر زمني بالميلي ثانية بدقة عالية، يمثل الوقت مباشرة بعد أن ينهي Node.js البحث عن اسم النطاق الخاص بالمورد.
performanceResourceTiming.connectStart
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
مُؤشّر زمني بالميلي ثانية بدقة عالية، يمثل الوقت مباشرة قبل أن يبدأ Node.js في إنشاء الاتصال بالخادم لاسترداد المورد.
performanceResourceTiming.connectEnd
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية يمثل الوقت مباشرة بعد أن ينهي Node.js إنشاء الاتصال بالخادم لاسترداد المورد.
performanceResourceTiming.secureConnectionStart
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية يمثل الوقت مباشرة قبل أن يبدأ Node.js عملية المصافحة لتأمين الاتصال الحالي.
performanceResourceTiming.requestStart
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية يمثل الوقت مباشرة قبل أن يستقبل Node.js أول بايت من الاستجابة من الخادم.
performanceResourceTiming.responseEnd
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
الزمن الزمني بدقة عالية بالميلي ثانية يمثل الوقت مباشرة بعد أن يستقبل Node.js آخر بايت من المورد أو مباشرة قبل إغلاق اتصال النقل، أيهما يأتي أولاً.
performanceResourceTiming.transferSize
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
عدد يمثل حجم المورد المُسترد (بالبايت). يتضمن الحجم حقول رأس الاستجابة بالإضافة إلى جسم حمولة الاستجابة.
performanceResourceTiming.encodedBodySize
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
عدد يمثل الحجم (بالبايت) المُستقبَل من عملية الاسترداد (HTTP أو ذاكرة التخزين المؤقتة)، لجسم الحمولة، قبل إزالة أي ترميزات محتوى مُطبقة.
performanceResourceTiming.decodedBodySize
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء مُنشئ الخاصية هذا باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
عدد يمثل الحجم (بالبايت) المُستقبَل من عملية الاسترداد (HTTP أو ذاكرة التخزين المؤقتة)، لجسم الرسالة، بعد إزالة أي ترميزات محتوى مُطبقة.
performanceResourceTiming.toJSON()
[History]
الإصدار | التغييرات |
---|---|
v19.0.0 | يجب استدعاء هذه الطريقة باستخدام كائن PerformanceResourceTiming كمُستقبِل. |
v18.2.0, v16.17.0 | تمت الإضافة في: v18.2.0, v16.17.0 |
يُعيد كائنًا وهو التمثيل JSON لكائن PerformanceResourceTiming
Class: PerformanceObserver
تمت الإضافة في: v8.5.0
PerformanceObserver.supportedEntryTypes
تمت الإضافة في: v16.0.0
الحصول على الأنواع المدعومة.
new PerformanceObserver(callback)
[السجل]
الإصدار | التغييرات |
---|---|
v18.0.0 | تمرير مُعامل استدعاء غير صحيح إلى وسيطة callback يُلقي الآن ERR_INVALID_ARG_TYPE بدلاً من ERR_INVALID_CALLBACK . |
v8.5.0 | تمت الإضافة في: v8.5.0 |
callback
<Function>list
<PerformanceObserverEntryList>observer
<PerformanceObserver>
توفر كائنات PerformanceObserver
إشعارات عند إضافة مثيلات جديدة من PerformanceEntry
إلى جدول زمني الأداء.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries())
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark'], buffered: true })
performance.mark('test')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries())
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark'], buffered: true })
performance.mark('test')
بسبب أن مثيلات PerformanceObserver
تُدخِل عبء أداء إضافيًا خاصًا بها، يجب عدم ترك المثيلات مُشتركه في الإشعارات إلى أجل غير مسمى. يجب على المستخدمين فصل المُراقبين بمجرد عدم حاجتهم إليهم.
يتم استدعاء callback
عندما يتم إخطار PerformanceObserver
بمثيلات جديدة من PerformanceEntry
. يتلقى مُعامل الاستدعاء مثيلًا من PerformanceObserverEntryList
ومرجعًا إلى PerformanceObserver
.
performanceObserver.disconnect()
تمت الإضافة في: v8.5.0
يفصل مثيل PerformanceObserver
عن جميع الإشعارات.
performanceObserver.observe(options)
[السجل]
الإصدار | التغييرات |
---|---|
v16.7.0 | تم التحديث ليتوافق مع مستوى 2 من جدول زمني للأداء. تم إضافة خيار buffered مرة أخرى. |
v16.0.0 | تم التحديث ليتوافق مع مستوى 3 من توقيت المستخدم. تم إزالة خيار buffered. |
v8.5.0 | تمت الإضافة في: v8.5.0 |
options
<Object>type
<string> نوع واحد من <PerformanceEntry>. يجب عدم إعطاؤه إذا تم تحديدentryTypes
بالفعل.entryTypes
<string[]> مصفوفة من السلاسل التي تحدد أنواع مثيلات <PerformanceEntry> التي يهتم بها المُراقب. إذا لم يتم توفيره، فسيتم إرسال خطأ.buffered
<boolean> إذا كان صحيحًا، فسيتم استدعاء دالة مُراقب الاستجابة بقائمة من إدخالاتPerformanceEntry
المخزنة مؤقتًا على مستوى النظام. إذا كان خطأ، فسيتم إرسالPerformanceEntry
s التي تم إنشاؤها فقط بعد نقطة زمنية إلى دالة مُراقب الاستجابة. الافتراضي:false
.
اشتراك مثيل <PerformanceObserver> في إشعارات بمثيلات جديدة من <PerformanceEntry> التي تم تحديدها إما بواسطة options.entryTypes
أو options.type
:
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((list, observer) => {
// يتم استدعاء هذه الدالة مرة واحدة بشكل غير متزامن. تحتوي `list` على ثلاثة عناصر.
})
obs.observe({ type: 'mark' })
for (let n = 0; n < 3; n++) performance.mark(`test${n}`)
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((list, observer) => {
// يتم استدعاء هذه الدالة مرة واحدة بشكل غير متزامن. تحتوي `list` على ثلاثة عناصر.
})
obs.observe({ type: 'mark' })
for (let n = 0; n < 3; n++) performance.mark(`test${n}`)
performanceObserver.takeRecords()
مضاف في: v16.0.0
- الإرجاع: <PerformanceEntry[]> القائمة الحالية من الإدخالات المخزنة في مراقب الأداء، ومسحها.
الصنف: PerformanceObserverEntryList
مضاف في: v8.5.0
يستخدم صنف PerformanceObserverEntryList
لتوفير الوصول إلى مثيلات PerformanceEntry
المُمرّرة إلى PerformanceObserver
. لا يُعرّض مُنشئ هذا الصنف للمستخدمين.
performanceObserverEntryList.getEntries()
مضاف في: v8.5.0
- الإرجاع: <PerformanceEntry[]>
يُعيد قائمة من كائنات PerformanceEntry
بترتيب زمني وفقًا لـ performanceEntry.startTime
.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntries())
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 81.465639,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 81.860064,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntries())
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 81.465639,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 81.860064,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
performanceObserverEntryList.getEntriesByName(name[, type])
تم الإضافة في: v8.5.0
name
<string>type
<string>- القيمة المُرجعة: <PerformanceEntry[]>
ترجع قائمة بـ PerformanceEntry
كائنات مرتبة زمنيًا فيما يتعلق بـ performanceEntry.startTime
والتي تساوي performanceEntry.name
name
، واختياريًا، والتي تساوي performanceEntry.entryType
type
.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByName('meow'))
/**
* [
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 98.545991,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('nope')) // []
console.log(perfObserverList.getEntriesByName('test', 'mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 63.518931,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('test', 'measure')) // []
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark', 'measure'] })
performance.mark('test')
performance.mark('meow')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByName('meow'))
/**
* [
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 98.545991,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('nope')) // []
console.log(perfObserverList.getEntriesByName('test', 'mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 63.518931,
* duration: 0,
* detail: null
* }
* ]
*/
console.log(perfObserverList.getEntriesByName('test', 'measure')) // []
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['mark', 'measure'] })
performance.mark('test')
performance.mark('meow')
performanceObserverEntryList.getEntriesByType(type)
مضاف في: v8.5.0
type
<string>- قيمة الإرجاع: <PerformanceEntry[]>
يرجع قائمة بـ PerformanceEntry
كائنات مرتبة زمنيًا فيما يتعلق بـ performanceEntry.startTime
التي تساوي performanceEntry.entryType
قيمة type
.
import { performance, PerformanceObserver } from 'node:perf_hooks'
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByType('mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 55.897834,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 56.350146,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const obs = new PerformanceObserver((perfObserverList, observer) => {
console.log(perfObserverList.getEntriesByType('mark'))
/**
* [
* PerformanceEntry {
* name: 'test',
* entryType: 'mark',
* startTime: 55.897834,
* duration: 0,
* detail: null
* },
* PerformanceEntry {
* name: 'meow',
* entryType: 'mark',
* startTime: 56.350146,
* duration: 0,
* detail: null
* }
* ]
*/
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ type: 'mark' })
performance.mark('test')
performance.mark('meow')
perf_hooks.createHistogram([options])
مضاف في: v15.9.0, v14.18.0
options
<Object>lowest
<number> | <bigint> أقل قيمة يمكن تمييزها. يجب أن تكون قيمة عدد صحيح أكبر من 0. افتراضيًا:1
.highest
<number> | <bigint> أعلى قيمة قابلة للتسجيل. يجب أن تكون قيمة عدد صحيح تساوي أو أكبر من ضعفlowest
. افتراضيًا:Number.MAX_SAFE_INTEGER
.figures
<number> عدد خانات الدقة. يجب أن يكون رقمًا بين1
و5
. افتراضيًا:3
.
قيمة الإرجاع: <RecordableHistogram>
يرجع <RecordableHistogram>.
perf_hooks.monitorEventLoopDelay([options])
مُضاف في: v11.10.0
options
<Object>resolution
<number> معدل أخذ العينات بالمللي ثانية. يجب أن يكون أكبر من الصفر. افتراضيًا:10
.
الإرجاع: <IntervalHistogram>
هذه الخاصية هي امتداد من Node.js. إنها غير متوفرة في متصفحات الويب.
يُنشئ كائن IntervalHistogram
يقوم بأخذ عينات وإبلاغ تأخير حلقة الحدث بمرور الوقت. سيتم الإبلاغ عن التأخيرات بالنانو ثانية.
يعمل استخدام مؤقت للكشف عن تأخير حلقة الحدث التقريبي لأن تنفيذ المؤقتات مرتبط تحديدًا بدورة حياة حلقة حدث libuv. وهذا يعني أن التأخير في الحلقة سيؤدي إلى تأخير في تنفيذ المؤقت، وهذه التأخيرات هي تحديدًا ما يهدف هذا الواجهة البرمجية إلى اكتشافه.
import { monitorEventLoopDelay } from 'node:perf_hooks'
const h = monitorEventLoopDelay({ resolution: 20 })
h.enable()
// قم بشيء ما.
h.disable()
console.log(h.min)
console.log(h.max)
console.log(h.mean)
console.log(h.stddev)
console.log(h.percentiles)
console.log(h.percentile(50))
console.log(h.percentile(99))
const { monitorEventLoopDelay } = require('node:perf_hooks')
const h = monitorEventLoopDelay({ resolution: 20 })
h.enable()
// قم بشيء ما.
h.disable()
console.log(h.min)
console.log(h.max)
console.log(h.mean)
console.log(h.stddev)
console.log(h.percentiles)
console.log(h.percentile(50))
console.log(h.percentile(99))
Class: Histogram
مُضاف في: v11.10.0
histogram.count
مُضاف في: v17.4.0, v16.14.0
عدد العينات المسجلة بواسطة الرسم البياني.
histogram.countBigInt
مُضاف في: v17.4.0, v16.14.0
عدد العينات المسجلة بواسطة الرسم البياني.
histogram.exceeds
تم الإضافة في: v11.10.0
عدد المرات التي تجاوز فيها تأخير حلقة الحدث الحد الأقصى لتأخير حلقة الحدث لمدة ساعة واحدة.
histogram.exceedsBigInt
تم الإضافة في: v17.4.0، v16.14.0
عدد المرات التي تجاوز فيها تأخير حلقة الحدث الحد الأقصى لتأخير حلقة الحدث لمدة ساعة واحدة.
histogram.max
تم الإضافة في: v11.10.0
أقصى تأخير مسجل لحلقة الحدث.
histogram.maxBigInt
تم الإضافة في: v17.4.0، v16.14.0
أقصى تأخير مسجل لحلقة الحدث.
histogram.mean
تم الإضافة في: v11.10.0
متوسط تأخيرات حلقة الحدث المسجلة.
histogram.min
تم الإضافة في: v11.10.0
أقل تأخير مسجل لحلقة الحدث.
histogram.minBigInt
تم الإضافة في: v17.4.0، v16.14.0
أقل تأخير مسجل لحلقة الحدث.
histogram.percentile(percentile)
تم الإضافة في: v11.10.0
يرجع القيمة عند النسبة المئوية المعطاة.
histogram.percentileBigInt(percentile)
تم الإضافة في: v17.4.0، v16.14.0
يرجع القيمة عند النسبة المئوية المعطاة.
histogram.percentiles
أضيف في: v11.10.0
يرجع كائن Map
يفصل توزيع النسبة المئوية المتراكمة.
histogram.percentilesBigInt
أضيف في: v17.4.0، v16.14.0
يرجع كائن Map
يفصل توزيع النسبة المئوية المتراكمة.
histogram.reset()
أضيف في: v11.10.0
يعيد تعيين بيانات الرسم البياني التكراري التي تم جمعها.
histogram.stddev
أضيف في: v11.10.0
الانحراف المعياري لتأخيرات حلقة الحدث المسجلة.
Class: IntervalHistogram extends Histogram
Histogram
يتم تحديثه بشكل دوري على فاصل زمني معين.
histogram.disable()
أضيف في: v11.10.0
- قيمة مُرجعة: <boolean>
يعطل مؤقت فاصل التحديث. يُرجع true
إذا تم إيقاف المؤقت، false
إذا كان قد تم إيقافه بالفعل.
histogram.enable()
أضيف في: v11.10.0
- قيمة مُرجعة: <boolean>
يُمكن مؤقت فاصل التحديث. يُرجع true
إذا تم بدء تشغيل المؤقت، false
إذا كان قيد التشغيل بالفعل.
استنساخ IntervalHistogram
يمكن استنساخ مثيلات <IntervalHistogram> عبر <MessagePort>. في الطرف المتلقي، يتم استنساخ الرسم البياني التكراري ككائن <Histogram> عادي لا يُنفذ طريقتي enable()
و disable()
.
Class: RecordableHistogram extends Histogram
أضيف في: v15.9.0، v14.18.0
histogram.add(other)
أضيف في: v17.4.0، v16.14.0
other
<RecordableHistogram>
يضيف القيم من other
إلى هذا الرسم البياني التكراري.
histogram.record(val)
أضيف في: v15.9.0، v14.18.0
histogram.recordDelta()
أضيف في: v15.9.0، v14.18.0
يحسب مقدار الوقت (بالنانوثانية) الذي مضى منذ المكالمة السابقة لـ recordDelta()
ويسجل هذا المقدار في الرسم البياني.
أمثلة
قياس مدة العمليات غير المتزامنة
يستخدم المثال التالي Async Hooks وواجهات برمجة التطبيقات للأداء لقياس المدة الفعلية لعملية المهلة الزمنية (بما في ذلك مقدار الوقت الذي استغرقه تنفيذ دالة الاستدعاء).
import { createHook } from 'node:async_hooks'
import { performance, PerformanceObserver } from 'node:perf_hooks'
const set = new Set()
const hook = createHook({
init(id, type) {
if (type === 'Timeout') {
performance.mark(`Timeout-${id}-Init`)
set.add(id)
}
},
destroy(id) {
if (set.has(id)) {
set.delete(id)
performance.mark(`Timeout-${id}-Destroy`)
performance.measure(`Timeout-${id}`, `Timeout-${id}-Init`, `Timeout-${id}-Destroy`)
}
},
})
hook.enable()
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries()[0])
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['measure'], buffered: true })
setTimeout(() => {}, 1000)
'use strict'
const async_hooks = require('node:async_hooks')
const { performance, PerformanceObserver } = require('node:perf_hooks')
const set = new Set()
const hook = async_hooks.createHook({
init(id, type) {
if (type === 'Timeout') {
performance.mark(`Timeout-${id}-Init`)
set.add(id)
}
},
destroy(id) {
if (set.has(id)) {
set.delete(id)
performance.mark(`Timeout-${id}-Destroy`)
performance.measure(`Timeout-${id}`, `Timeout-${id}-Init`, `Timeout-${id}-Destroy`)
}
},
})
hook.enable()
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntries()[0])
performance.clearMarks()
performance.clearMeasures()
observer.disconnect()
})
obs.observe({ entryTypes: ['measure'], buffered: true })
setTimeout(() => {}, 1000)
قياس مدة تحميل التبعيات
يقيس المثال التالي مدة عمليات require()
لتحميل التبعيات:
import { performance, PerformanceObserver } from 'node:perf_hooks'
// تفعيل المُراقب
const obs = new PerformanceObserver(list => {
const entries = list.getEntries()
entries.forEach(entry => {
console.log(`import('${entry[0]}')`, entry.duration)
})
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'], buffered: true })
const timedImport = performance.timerify(async module => {
return await import(module)
})
await timedImport('some-module')
'use strict'
const { performance, PerformanceObserver } = require('node:perf_hooks')
const mod = require('node:module')
// تصحيح مُعامل require
mod.Module.prototype.require = performance.timerify(mod.Module.prototype.require)
require = performance.timerify(require)
// تفعيل المُراقب
const obs = new PerformanceObserver(list => {
const entries = list.getEntries()
entries.forEach(entry => {
console.log(`require('${entry[0]}')`, entry.duration)
})
performance.clearMarks()
performance.clearMeasures()
obs.disconnect()
})
obs.observe({ entryTypes: ['function'], buffered: true })
require('some-module')
قياس مدة رحلة HTTP المُستديرة الواحدة
يستخدم المثال التالي لتتبع الوقت الذي يقضيه عميل HTTP (OutgoingMessage
) وطلب HTTP (IncomingMessage
). بالنسبة لعميل HTTP، فهذا يعني الفترة الزمنية بين بدء الطلب واستلام الاستجابة، وبالنسبة لطلب HTTP، فهذا يعني الفترة الزمنية بين استلام الطلب وإرسال الاستجابة:
import { PerformanceObserver } from 'node:perf_hooks'
import { createServer, get } from 'node:http'
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['http'] })
const PORT = 8080
createServer((req, res) => {
res.end('ok')
}).listen(PORT, () => {
get(`http://127.0.0.1:${PORT}`)
})
'use strict'
const { PerformanceObserver } = require('node:perf_hooks')
const http = require('node:http')
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['http'] })
const PORT = 8080
http
.createServer((req, res) => {
res.end('ok')
})
.listen(PORT, () => {
http.get(`http://127.0.0.1:${PORT}`)
})
قياس مدة net.connect
(لـ TCP فقط) عند نجاح الاتصال
import { PerformanceObserver } from 'node:perf_hooks'
import { connect, createServer } from 'node:net'
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['net'] })
const PORT = 8080
createServer(socket => {
socket.destroy()
}).listen(PORT, () => {
connect(PORT)
})
'use strict'
const { PerformanceObserver } = require('node:perf_hooks')
const net = require('node:net')
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['net'] })
const PORT = 8080
net
.createServer(socket => {
socket.destroy()
})
.listen(PORT, () => {
net.connect(PORT)
})
قياس مدة DNS عند نجاح الطلب
import { PerformanceObserver } from 'node:perf_hooks'
import { lookup, promises } from 'node:dns'
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['dns'] })
lookup('localhost', () => {})
promises.resolve('localhost')
'use strict'
const { PerformanceObserver } = require('node:perf_hooks')
const dns = require('node:dns')
const obs = new PerformanceObserver(items => {
items.getEntries().forEach(item => {
console.log(item)
})
})
obs.observe({ entryTypes: ['dns'] })
dns.lookup('localhost', () => {})
dns.promises.resolve('localhost')