تقدم Node.js أدوات قوية لقياس وتحسين أداء تطبيقاتك. واحدة من هذه الأدوات هي Performance API، التي تسمح للمطورين بالتقاط طوابع زمنية عالية الدقة ومقاييس أداء متنوعة. ستقدم لك هذه الدليل مكونات رئيسية من Performance API في Node.js وكيفية استخدامها بفعالية.
لماذا يعد الأداء مهماً في Node.js
تتألق Node.js في هيكلها المعتمد على الأحداث وغير المتزامن، والذي يتناسب تمامًا مع المهام المعتمدة على الإدخال/الإخراج. ومع ذلك، حتى في هذا البيئة غير المحجوزة، يبقى الأداء هو الأهم. التطبيقات البطيئة تؤدي إلى إحباط المستخدمين وتعيق قابلية التوسع. يصبح تحديد عنق الزجاجة وتحسين التعليمات البرمجية أمرًا أساسيًا للحصول على تجربة مستخدم سلسة.
مهتم بزيادة وقت استجابة واجهة برمجة التطبيقات الخاصة بك? يقدم المقال التالي دليل خطوة بخطوة حول كيفية زيادة وقت استجابة واجهة برمجة التطبيقات الخاصة بك.

لماذا نستخدم Performance API في Node.js؟
- تحديد عنق الزجاجة للأداء: يمكن أن تؤدي عناقات الزجاجة في الأداء إلى تدهور كبير في تجربة المستخدم. باستخدام Performance API، يمكن للمطورين تحديد الأوقات الدقيقة التي تحدث فيها التأخيرات، سواء في تنفيذ الدوال أو تحميل الموارد أو معالجة طلبات HTTP. هذه الدقة تمكن من تحسينات مستهدفة.
- تحسين استخدام الموارد: يساعد مراقبة الأداء في فهم كيفية استخدام الموارد مثل وحدة المعالجة المركزية والذاكرة. من خلال تحديد الاستخدام غير الفعال للموارد، يمكن للمطورين تحسين التعليمات البرمجية الخاصة بهم لتكون أكثر كفاءة، مما يقلل من التكاليف ويحسن من قابلية التوسع.
- تعزيز تجربة المستخدم: التطبيقات التي تستجيب بسرعة توفر تجربة مستخدم أفضل. تساعد Performance API في قياس المقاييس الرئيسية مثل الوقت إلى أول بايت (TTFB) والطلاء الأول المحتوي (FCP)، مما يسمح للمطورين بإجراء تحسينات تؤدي إلى أوقات تحميل أسرع وتفاعلات أكثر سلاسة.
- تحسين استقرار التطبيقات: تساعد المراقبة المستمرة للأداء في اكتشاف الشذوذ والمشاكل المحتملة قبل أن تصبح حرجة. يضمن هذا النهج الاستباقي زيادة مستوى التشغيل وموثوقية التطبيق.
مقدمة إلى Performance API في Node.js
تتميز Performance API، المتاحة عبر وحدة perf_hooks
، بتزويد مطوري Node.js بمجموعة شاملة من الأدوات لقياس وتحليل أداء التطبيقات. إنها توفر ميزة كبيرة مقارنة بالطرق التقليدية مثل Date.now()
، حيث تقدم توقيتًا عالي الدقة ونهجًا أكثر تنظيمًا لتقييم الأداء. في طريقة Date.now()
، سترى شيئًا مثل؛
const startTime = Date.now();
// call a function to perform a task()
console.log(`مدة المهمة: ${Date.now() - startTime} ميلي ثانية`);
تعمل دالة Date.now() بشكل جيد، ولكن مرة أخرى بينما تبدو بسيطة، يمكن أن تكون هذه الطريقة غير موثوقة بسبب تغييرات الساعة النظامية التي يمكن أن تؤثر على القياسات.
هنا تأتي Performance API في Node.js إلى المشهد. نريد أن نكون قادرين على قياس استخدام الوقت في تطبيقاتنا بالكامل دون ان نتأثر بعوامل مثل ساعة النظام، أليس كذلك؟
تدور Performance API في Node.js حول عدة طرق وفئات أساسية مقدمة من وحدة perf_hooks
. تشمل هذه:
يخدم كل من هذه الأدوات غرضًا مميزًا في التقاط وتحليل مقاييس الأداء.
استخدام performance.now()
تقوم طريقة performance.now()
بإرجاع طابع زمني عالي الدقة بالميلي ثانية. هذا مفيد لقياس الفترات الزمنية ضمن تطبيقك بدقة أكبر من Date.now()
.
للحصول على مدة المهمة، أضف طريقة performance.now() في بداية ونهاية العملية التي تريد قياسها كما يلي;
const { performance } = require('node:perf_hooks');
const start = performance.now();
// قم بإجراء بعض العمليات
const end = performance.now();
console.log(`الوقت المستغرق: ${end - start} ميلي ثانية`);
في البداية، نستورد الأداء من وحدات node، ثم نقوم بإنشاء ثوابت البداية والنهاية وتعيين طرق performance.now لها للحصول على الوقت الدقيق للعملية.
يجب أن يبدو الناتج من الكود أعلاه كالآتي؛
الوقت المستغرق: 1253.**** ميلي ثانية.
استخدام performance.mark()
تسمح لك طريقة performance.mark()
في Node.js بإنشاء طوابع زمنية مسماة (أو علامات) في نقاط محددة في الشيفرة الخاصة بك. تساعد هذه العلامات في قياس الوقت المستغرق بين أجزاء مختلفة من تطبيقك، مما يتيح لك رؤى حول عنق الزجاجة للأداء.
const { performance } = require('node:perf_hooks');
performance.mark('A');
// بعض العمليات
performance.mark('B');
في هذا المثال، تقوم performance.mark('A') وperformance.mark('B') بإنشاء علامتين تحملان 'A' و'B' على التوالي.
يمكن أن تتضمن العلامات أيضًا تفاصيل إضافية، والتي يمكن أن تكون مفيدة للتصحيح أو التحليل الإضافي.performance.mark('A', { detail: 'بداية العملية' }); performance.mark('B', { detail: 'نهاية العملية' });
هنا، توفر خاصية detail
معلومات إضافية حول ما تمثله كل علامة.
بمجرد أن تقوم بإنشاء العلامات، يمكنك قياس المدة الزمنية بينها باستخدام performance.measure()
.
استخدام performance.measure()
performance.measure()
هي دالة ضمن Performance API في Node.js التي تحسب تحديدًا المدة الزمنية بين نقطتين marked في جدول تنفيذ تطبيقك. بشكل أساسي، تقوم بإنشاء إدخال قياس وتخزين الوقت المستغرق للاسترجاع والتحليل لاحقًا.
تذكر أننا في قسم performance.mark()
قمنا بإنشاء علامتين: A
وB
. في هذا القسم، سنختبرهم ونرى كيف تعمل performance.mark()
مع performance.measure()
.
performance.measure('من A إلى B', 'A', 'B');
const measures = performance.getEntriesByType('measure');
measures.forEach(measure => {
console.log(`${measure.name}: ${measure.duration}ms`);
});
سيؤدي هذا إلى إنشاء قياس يسمى 'من A إلى B'، الذي يحسب الوقت المستغرق بين العلامتين 'A' و 'B'.
عند تشغيل الكود أعلاه، سيعرض الناتج المدة الزمنية بين العلامتين 'A' و 'B'. إليك مثال على ما قد يطبعه وحدة التحكم مثل:
من A إلى B: 12.345ms
تشير هذه النتيجة إلى أن العمليات بين العلامتين 'A' و 'B' استغرقت حوالي 12.345 ميلي ثانية لإكمالها.
استخدام PerformanceObserver
تسمح واجهة PerformanceObserver
في Node.js للمطورين بمراقبة ومعالجة إدخالات الأداء مثل العلامات، القياسات، وإدخالات توقيت الموارد بشكل غير متزامن. وهي مفيدة بشكل خاص لمراقبة والتفاعل مع بيانات الأداء أثناء جمعها، مما يجعلها أداة أساسية للتحليل الفوري للأداء والتحسين.
لاستخدام PerformanceObserver
، تحتاج إلى إنشاء مثال منه وتحديد دالة رد نداء ستتعامل مع إدخالات الأداء. إليك إعداد أساسي:
const { PerformanceObserver, performance } = require('node:perf_hooks');
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry);
});
});
observer.observe({ entryTypes: ['mark', 'measure'] });
في هذا المثال:
- استيراد
PerformanceObserver
وperformance
: يتم استيراد كائناتPerformanceObserver
وperformance
من وحدةperf_hooks
. - إنشاء مراقب: يتم إنشاء مثال من
PerformanceObserver
مع دالة رد نداء. يتم استدعاء هذه الدالة في كل مرة يتم فيها تسجيل إدخالات أداء جديدة. - مراقبة أنواع الإدخالات: يتم استدعاء أسلوب
observer.observe
مع كائن يحدد أنواع الإدخالات المراد مراقبتها (mark
وmeasure
في هذه الحالة).
حالات الاستخدام العملية لـ PerformanceObserver
1. مراقبة الأداء في الوقت الحقيقي:
PerformanceObserver
يسمح لك بمراقبة أداء التطبيق بشكل مستمر، مما يوفر تعليقات فورية حول مشكلات الأداء. هذا مفيد بشكل خاص في بيئات الإنتاج حيث تكون بيانات الأداء في الوقت الحقيقي حاسمة.
2. تحليل تحميل الموارد:
- من خلال مراقبة إدخالات توقيت الموارد، يمكن للمطورين تحليل كيفية تحميل موارد مختلفة (مثل السكريبتات، أوراق الأنماط، والصور)، مما يساعد في تحسين أوقات التحميل.
3. تصحيح الأخطاء والتحليل:
- خلال التطوير، يمكن استخدام
PerformanceObserver
لتحليل أجزاء معينة من الشيفرة، وتحديد الدوال البطيئة والعنق الزجاجة المحتمل.
4. قياسات أداء مخصصة:
- يمكن للمطورين إنشاء قياسات أداء مخصصة من خلال وضع علامات وقياس النقاط المهمة في التطبيق، مما يسمح بالتحليل الأكثر تفصيلاً للأداء الذي يتناسب مع الاحتياجات المحددة للتطبيق.
اختبار التطبيق في Node.js
حتى الآن، تعلمنا عن Performance API في Node.js، لماذا هو مهم، كيف يعمل، وكيف يختلف عن الدالة الافتراضية Date.now()
.
إذا كنت تبني تطبيقًا، فسوف ترغب في التركيز على بناء تطبيقك وترك الاختبارات للخدمات الأخرى. حسنًا، بفضل Apidog، يمكنك اختبار واجهات برمجة التطبيقات والتطبيقات الخاصة بك.

Apidog هي أداة قوية مصممة خصيصًا لاختبار واجهات برمجة التطبيقات، بما في ذلك اختبار الأداء. يوفر حلول شاملة لإنشاء وإدارة واختبار واجهات برمجة التطبيقات. يسمح لك Apidog بمحاكاة سلوك واجهات برمجة التطبيقات، وتحديد حالات الاختبار، وتوليد تقارير مفصلة. مع واجهته السهلة الاستخدام، يمكنك بسهولة تكوين اختبارات الأداء، وتحليل أوقات الاستجابة، وتحديد مشاكل الأداء.

الخاتمة
توفر Performance API في Node.js، بما في ذلك أدوات مثل performance.mark()
وperformance.measure()
وPerformanceObserver
، للمطورين قدرات قوية لمراقبة وتحسين أداء التطبيق. من خلال الاستفادة من هذه الأدوات، يمكنك الحصول على رؤى دقيقة حول خصائص الأداء لتطبيقات Node.js الخاصة بك، وتحديد عنق الزجاجة، وتنفيذ تحسينات مستهدفة لتعزيز الكفاءة وتجربة المستخدم.
بالإضافة إلى Performance API، فإن استخدام أفضل ممارسات واجهة برمجة التطبيقات/التطبيقات، والاختبار الشامل للتحميل والمراقبة يمكن أن يعزز أداء تطبيقاتك بشكل كبير. تضمن هذه الجهود المجمعة أن تعمل تطبيقات Node.js الخاصة بك بسلاسة، وتتعامل بفعالية، وتوفر تجربة مستخدم متفوقة، مما يحافظ على ميزة تنافسية في السوق.