clinic.js — مراقبة تطبيقات TypeScript

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو clinic.js؟

Clinic.js هي مجموعة أدوات لمراقبة وتحليل أداء تطبيقات Node.js المكتوبة بلغة TypeScript. تتيح للمطورين اكتشاف اختناقات الأداء، تسرب الذاكرة، ومشاكل Event Loop. توفر المكتبة تقارير بصرية على شكل flamegraph و bubbleprof و heapprofiler.

لماذا نحتاج إلى مراقبة TypeScript؟

يتم تجميع TypeScript إلى JavaScript، ولكن على مستوى التنفيذ هو نفس Node.js. بدون مراقبة، من المستحيل فهم سبب بطء التطبيق تحت الضغط. يساعد Clinic.js في:

  • اكتشاف الدوال البطيئة والعمليات غير المتزامنة
  • تحليل استخدام الذاكرة
  • تحسين Event Loop (مثلاً، عند العمل مع عمليات حسابية ثقيلة)
  • مقارنة الأداء قبل وبعد إعادة الهيكلة

التثبيت

قم بتثبيت clinic.js بشكل عام عبر npm:

npm install -g clinic

لاستخدامه في مشروع TypeScript، قم أيضًا بتثبيت الأنواع:

npm install --save-dev @types/node

الوظائف الأساسية

  • clinic doctor — تشخيص عام لصحة التطبيق (Event Loop، الذاكرة، CPU)
  • clinic flame — إنشاء مخطط اللهب (flame graph) لتحليل مكدس الاستدعاءات
  • clinic bubbleprof — تصور العمليات غير المتزامنة (الوعود، دوال الاسترجاع)
  • clinic heapprofiler — تحليل الكومة (heap) للبحث عن تسرب الذاكرة

مثال على الاستخدام مع TypeScript

لنفترض أن لديك تطبيقًا على Express مع TypeScript. قم بتشغيله باستخدام clinic doctor:

clinic doctor -- node dist/index.js

بعد الانتهاء (Ctrl+C)، سيتم فتح تقرير HTML. مثال على كود للاختبار:

import express from 'express';const app = express();

app.get('/heavy', (req, res) => { const arr = []; for (let i = 0; i < 1e6; i++) { arr.push(Math.random()); } res.send('Done');});

app.listen(3000, () => console.log('Server running'));

ثم قم بتحميله باستخدام autocannon:

npx autocannon -c 10 -d 10 http://localhost:3000/heavy

سيظهر التقرير أن الحلقة (loop) تعيق Event Loop.

متى يتم الاستخدام

  • عند انخفاض الأداء في بيئة الإنتاج (production)
  • قبل توسيع نطاق التطبيق
  • عند إعادة هيكلة أجزاء الكود الحرجة
  • لتحسين التدفقات غير المتزامنة (مثلاً، عند استخدام RxJS)

الخلاصة

Clinic.js هي أداة لا غنى عنها لأي مطور TypeScript يعمل مع Node.js. فهي تحل محل التسجيل اليدوي (logging) وتساعد في العثور بسرعة على المشاكل التي لا يمكن اكتشافها في المصحح (debugger).

توصيات