الواجهات البرمجية لتوقيت الأداء (Performance Timing API)

من موسوعة حسوب
< Node.js
مراجعة 08:36، 24 أغسطس 2018 بواسطة رهف-النجار (نقاش | مساهمات) (انشاء صفحة الجزء الأول)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

الاستقرار: 1- تجريبي.

تقدم الواجهة البرمجية لتوقيت الأداء تطبيقًا لمواصفات W3C Performance Timeline. الغرض من  الواجهة البرمجية (API) هو دعم مجموعة من مقاييس الأداء عالية الدقة. والتي هي نفس واجهات الأداء المُطبّقة في متصفحات الويب الحديثة.

const { PerformanceObserver, performance } = require('perf_hooks');

const obs = new PerformanceObserver((items) => {
  console.log(items.getEntries()[0].duration);
  performance.clearMarks();
});
obs.observe({ entryTypes: ['measure'] });

performance.mark('A');
doSomeLongRunningProcess(() => {
  performance.mark('B');
  performance.measure('A to B', 'A', 'B');
});

الصنف Performance

أُضيف في الإصدار: 8.5.0.

performance.clearMarks([name‎]‎)‎

أُضيفت في الإصدار: 8.5.0

  • name <string>‎

إذا لم يكن المعامل name مُزودًا، فستُمسَح كل كائنات PerformanceMark من الجدول الزمني للأداء. أما إذا كانت قيمة name مزوّدة، فستُمسح العلامة المسماة فقط.

performance.mark([name]‎)‎

أُضيفت في الإصدار: 8.5.0.

  • name <string>‎

تُنشِئ مُدخل  PerformanceMark جديد في الجدول الزمني للأداء .الصنف PerformanceMark هو صنف فرعي من PerformanceEntry وفيه تكون قيمة performanceEntry.entryType دائمًا 'mark' ( مُعلّمًا). وقيمة performanceEntry.duration  دائمًا 0. تُستخدم علامات الأداء لتعليم لحظات محددة مهمة في الجدول الزمني للأداء.

(performance.measure(name, startMark, endMark

أُضيفت في الإصدار: 8.5.0.

  • name <string>‎
  • startMark <string>‎
  • <endMark <string

تُنشِئ مُدخل PerformanceMeasure جديد في الجدول الزمني للأداء. الصنف  PerformanceMeasure هو صنف فرعي من الصنف PerformanceEntry فيه الخاصية performanceEntry.entryType ذات قيمة 'measure' (قياس) دائمًا، والخاصية performanceEntry.duration خاصته تقيس عدد الملي ثانية المنقضي منذ startMark و endMark.

قد يُعرِّف الوسيط startMark أي PerformanceMark موجودة في الجدول الزمني للأداء، أو قد يعرّف أي من خاصيات البصمة الزمنية (timestamp) المقدمة من قبل الصنف PerformanceNodeTiming. إذا كانت قيمة startMark المُسمّاة غير موجودة، حينذاك تُهيأ قيمة المعامل startMark وتُضبَط إلى timeOrigin افتراضيًا.

يجب أن يُعرِّف الوسيط endMark أي PerformanceMark موجودة في الجدول الزمني للأداء، أو أي من  خاصيات البصمة الزمنية (timestamp) المقدمة من خلال الصنف PerformanceNodeTiming. إذا كان العامل endMark  المسمّى غير موجود، فسوف يُرمى خطأ.

performance.nodeTiming

أُضيفت في الإصدار: 8.5.0.

  • <PerformanceNodeTiming>
  • نسخة من الصنف PerformanceNodeTiming  والتي تقدم مقاييس أداء لمراحل تشغيل Node.js محددة.

performance.now(‎)‎

أُضيفت في الإصدار: 8.5.0.

القيمة المعادة :<number>

تعيد البصمة الزمنية الحالية عالية الدقة بالميلي ثانية، حيث تمثل القيمة 0 بداية عملية node الحالية.

performance.timeOrigin

أُضيفت في الإصدار: 8.5.0.

  • <number>

تحدد الخاصية timeOrigin بصمة زمنية عالية الدقة بالميلي ثانية والتي بدأت فيها عملية node الحالية، مقاسة بتوقيت يونكس.

performance.timerify(fn)‎

أُضيفت في الإصدار: 8.5.0.

  • fn ‎<‎Function‎>‎

تُغلّف الدالة بدالة جديدة والتي تقيس زمن التشغيل للدالة المُغلّفة. يجب أن تكون قيمة PerformanceObserver مشترِكة ً(subscribed) بنوع الحدث 'function' من أجل إمكانية الوصول لتفاصيل الزمن.

const {
  performance,
  PerformanceObserver
} = require('perf_hooks');

function someFunction() {
  console.log('hello world');
}

const wrapped = performance.timerify(someFunction);

const obs = new PerformanceObserver((list) => {
  console.log(list.getEntries()[0].duration);
  obs.disconnect();
});
obs.observe({ entryTypes: ['function'] });

// سوف يُنشأ مُدخل الجدول الزمني للأداء
wrapped();

الصنف:PerformanceEntry

أُضيف في الإصدار: 8.5.0.

performanceEntry.duration

أُضيفت في الإصدار: 8.5.0.

  • <number>

العدد الكلي بالميلي ثانية المنقضي من أجل هذا المُدخل. لن تكون هذه القيمة ذات معنى من أجل جميع أنواع مدخلات الأداء.

performanceEntry.name

أُضيفت في الإصدار: 8.5.0.

  • <string>

اسم مُدخل الأداء.

performanceEntry.startTime

أُضيفت في الإصدار: 8.5.0.

  • <number>

البصمة الزمنية عالية الدقة بالميلي ثانية التي تُشير إلى زمن البداية لمُدخل الأداء.

performanceEntry.entryType

أُضيفت في الإصدار: 8.5.0.

  • <string>

نوع مُدخل الأداء، حاليًا قد يكون  إما 'node' أو 'mark' أو'measure' أو 'gc' أو'function' أو 'http2'.

performanceEntry.kind

أُضيفت في الإصدار: 8.5.0.

  • <number>

عندما تكون قيمة الخاصية 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

الصنف: PerformanceNodeTiming extends PerformanceEntry

أُضيف في الإصدار: 8.5.0.

يقدم تفاصيل التوقيت لمنصة Node.js نفسها.