~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های حرفهای بسیار مؤثر باشد.
نوشته و پژوهش شده توسط دکتر شاهین صیامی