Node.js داره یه ماژول بنچمارک رسمی میگیره
خلاصهٔ کاملتر
Node.js سالهاست یه test runner توکار داره، ولی برای بنچمارک زدن همیشه باید سراغ ابزارهای بیرونی میرفتی. دو PR به شمارههای 65606 و 65631 میخوان این رو عوض کنن: یه ماژول تجربی به اسم node:bench که APIش عمداً خیلی شبیه node:test طراحی شده، تا کسی که با تستنویسی توی Node.js آشناست، بلافاصله بلد باشه بنچمارک هم بنویسه.
برای اجرا از فلگ --bench استفاده میشه که فایل یا الگوی glob میگیره، فایلها رو مرتب میکنه و به ترتیب اجراشون میکنه. حالت پیشفرض --bench-isolation=process هر فایل بنچمارک رو توی یه پروسهی فرزند جداگونه اجرا میکنه و فقط یه خلاصهی نهایی برمیگردونه؛ این باعث میشه نتیجهی هر فایل از بقیهی فایلها تأثیر نگیره.
حالت --bench-isolation=none همهچیز رو توی یه پروسه ایمپورت میکنه که سریعتر بالا میاد ولی state و heap بین فایلها مشترک میمونه. فلگهای دیگهای هم برای نامگذاری، تعداد sample، warmup و انتخاب ریپورتر هست، و ریپورترهای توکار spec و json هستن.
میشه بنچمارکها رو برنامهنویسیشده هم اجرا کرد: تابع run() که مثل نسخهی node:test کار میکنه، یه BenchmarksStream برمیگردونه؛ یه stream.Readable که رکوردهایی مثل bench:plan، bench:start، bench:sample، bench:complete و bench:summary رو بهعنوان event پخش میکنه.
سه تا API هم هست که ابزارهای سطح بالاتر رو روی node:bench بسازن: createRunner یه runner جدا با تنظیمات خودش میده، runFile فقط یه فایل بنچمارک رو توی یه پروسهی تازه اجرا میکنه بدون هیچ globbing یا زمانبندیای، و context.diagnostic() به یه بنچمارک اجازه میده پیام info یا warning بفرسته.
یه اضافهی کوچیک هم به perf_hooks اومده: histogram.meanCI() که یه بازهی اطمینان دوطرفه برای میانگین حساب میکنه، همون چیزی که ستون CI نودوپنجدرصد ریپورتر spec روش ساخته شده. این شاخه چند تا از بنچمارکهای خود هستهی Node.js رو هم به node:bench منتقل کرده تا نشون بده واقعاً کار میکنه. فعلاً وضعیتش Stability 1.0 یعنی Early Developmentـه و فلگهای CLIش هم تجربی هستن.
نکات کلیدی:
- دو PR شمارهی 65606 و 65631 ماژول تجربی node:bench رو پیشنهاد دادن
- APIش عمداً شبیه node:test طراحی شده، با اجرا از طریق فلگ --bench
- حالت پیشفرض هر فایل رو توی یه پروسهی جدا ایزوله میکنه؛ --bench-isolation=none سریعتره ولی state مشترک میشه
- تابع run() یه BenchmarksStream با eventهایی مثل bench:sample و bench:summary برمیگردونه
- histogram.meanCI() هم به perf_hooks اضافه شده؛ وضعیت فعلی ماژول Early Development و تجربیه




