راهنمای جامع Trace Events و TTY در Node.js

ماژول‌های node:trace_events و node:tty دو بخش مهم و تخصصی در Node.js هستند. Trace Events ابزاری قدرتمند برای جمع‌آوری داده‌های عملکردی، رویدادهای V8، async_hooks، فایل‌سیستم، شبکه و سایر بخش‌های داخلی Node.js است. این داده‌ها برای پروفایلینگ، دیباگینگ عمیق و تحلیل رفتار برنامه استفاده می‌شوند. TTY نیز امکان تعامل با ترمینال را فراهم می‌کند و برای ساخت ابزارهای CLI، مدیریت رنگ‌ها، اندازهٔ ترمینال، حالت raw و کنترل مکان‌نما کاربرد دارد. این مقاله هر دو ماژول را به‌صورت کامل و ساختاریافته توضیح می‌دهد.

TTYTrace Events

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۹ دی ۱۴۰۴

1. معرفی Trace Events


ماژول node:trace_events یک سیستم ردیابی داخلی است که داده‌های تولیدشده توسط V8، هستهٔ Node.js و کد کاربر را جمع‌آوری می‌کند. خروجی این سیستم با ابزار chrome://tracing سازگار است.


2. فعال‌سازی Trace Events


می‌توان Trace Events را از طریق خط فرمان یا برنامه‌نویسی فعال کرد.


2.1 فعال‌سازی از طریق CLI


node --trace-event-categories v8,node,node.async_hooks app.js

2.2 فعال‌سازی از طریق ماژول


const { createTracing } = require('node:trace_events');
const tracing = createTracing({ categories: ['node.perf'] });
tracing.enable();
// ...
tracing.disable();

3. دسته‌بندی‌های Trace Events


Node.js دسته‌های مختلفی برای ردیابی دارد، از جمله:

  • node.async_hooks
  • node.fs.sync / node.fs.async
  • node.net.native
  • node.perf
  • node.http
  • v8 (GC، کامپایل، اجرا)
  • node.module_timer

4. فایل خروجی Trace


فایل خروجی به‌صورت پیش‌فرض:

node_trace.${rotation}.log

قابل تغییر با:

--trace-event-file-pattern '${pid}-${rotation}.log'

5. مشاهده Trace در Chrome


فایل خروجی را در chrome://tracing باز کنید.


6. APIهای مهم


6.1 createTracing()


ساخت یک Tracing object.

6.2 tracing.enable()


فعال‌سازی دسته‌های مشخص‌شده.

6.3 tracing.disable()


غیرفعال‌سازی دسته‌ها.

6.4 getEnabledCategories()


نمایش دسته‌های فعال.

7. محدودیت‌ها


  • در Worker Threads در دسترس نیست.
  • زمان‌بندی‌ها بر اساس microseconds هستند.

8. نمونهٔ جمع‌آوری Trace با Inspector


می‌توان از ماژول inspector برای جمع‌آوری داده استفاده کرد.

1. معرفی TTY


ماژول node:tty ابزارهایی برای تعامل با ترمینال (TTY) فراهم می‌کند. در حالت عادی:

  • process.stdin → tty.ReadStream
  • process.stdout → tty.WriteStream
  • process.stderr → tty.WriteStream

2. تشخیص TTY بودن محیط


process.stdout.isTTY  // true یا false

3. کلاس tty.ReadStream


  • isRaw: آیا ترمینال در حالت raw است؟
  • setRawMode(true/false): فعال‌سازی حالت raw

حالت Raw چیست؟


در حالت raw:

  • ورودی کاراکتر به کاراکتر دریافت می‌شود.
  • ترمینال echo نمی‌کند.
  • Ctrl+C سیگنال SIGINT تولید نمی‌کند.

4. کلاس tty.WriteStream


  • columns / rows: اندازهٔ ترمینال
  • cursorTo(x, y): حرکت مکان‌نما
  • moveCursor(dx, dy): جابه‌جایی نسبی
  • clearLine(): پاک کردن خط
  • clearScreenDown(): پاک کردن صفحه از مکان‌نما به پایین
  • getColorDepth(): عمق رنگ ترمینال
  • hasColors(): بررسی پشتیبانی رنگ

5. رویداد resize


process.stdout.on('resize', () => {
  console.log(process.stdout.columns, process.stdout.rows);
});

6. تابع tty.isatty()


تشخیص اینکه یک file descriptor مربوط به TTY است یا خیر.


7. کاربردهای رایج TTY


  • ساخت CLIهای حرفه‌ای
  • ساخت ابزارهای interactive
  • کنترل رنگ‌ها و استایل‌ها
  • ساخت ترمینال‌های سفارشی

نتیجه‌گیری


ماژول‌های trace_events و tty دو ابزار قدرتمند برای توسعه‌دهندگان حرفه‌ای Node.js هستند. Trace Events امکان تحلیل عمیق عملکرد و رفتار برنامه را فراهم می‌کند، در حالی که TTY ابزارهای لازم برای ساخت رابط‌های خط فرمان پیشرفته را ارائه می‌دهد. ترکیب این دو ماژول می‌تواند در ساخت ابزارهای توسعه، پروفایلینگ، دیباگینگ و CLIهای حرفه‌ای بسیار مؤثر باشد.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه