Node.js 22.0 منتشر شد، پلتفرمی برای اجرای برنامه های شبکه در جاوا اسکریپت. Node.js 22.0 به عنوان یک شاخه پشتیبانی بلند مدت طبقه بندی می شود، اما این وضعیت تنها در ماه اکتبر، پس از تثبیت، اختصاص داده می شود. Node.js 22.x تا 30 آوریل 2027 پشتیبانی خواهد شد. تعمیر و نگهداری شاخه LTS قبلی Node.js 20.x تا آوریل 2026 و سال قبل از آخرین شاخه LTS 18.x تا آوریل 2025 ادامه خواهد داشت. شاخه مرحلهای Node.js 21.x در تاریخ 1 ژوئن 2024 متوقف خواهد شد.
بهبودهای اصلی:
- موتور V8 به نسخه 12.4 مورد استفاده در Chromium 124 به روز شده است. از تغییرات نسبت به شاخه Node.js 21 که از موتور V8 11.8 استفاده می کرد، اشاره می شود:
- پشتیبانی از پسوند WasmGC، که انتقال برنامه های نوشته شده به زبان های برنامه نویسی که از جمع کننده زباله (Kotlin، PHP، جاوا و غیره) استفاده می کنند، به WebAssembly ساده می کند. WasmGC انواع جدیدی از ساختارها و آرایه ها را اضافه می کند که می توانند از تخصیص حافظه غیر خطی استفاده کنند.
- پشتیبانی از متد Array.fromAsync() که به صورت ناهمزمان نمونه جدیدی از یک شی Array کپی شده از یک شی تکرار شونده آرایه مانند، تکرارپذیر یا غیرهمگام را برمی گرداند.
- پشتیبانی از روش های تکرار کننده مانند .map، .filter، .find، .take، .drop، .forEach و .reduce.
- پشتیبانی از یک شیء Set که مجموعهای از مقادیر را تعریف میکند و روشهایی را ارائه میدهد که عملیات مجموعهای رایج مانند تقاطع، اتحاد، تفاوت و جمع را پیادهسازی میکند.
- کامپایلر JIT بهینهسازی Maglev به طور پیشفرض فعال است و هدف آن تولید سریع کد ماشینی با کارایی بالا برای کدهای جاوا اسکریپت است. فعال کردن Maglev می تواند به طور قابل توجهی سرعت برنامه های کوتاه مدت CLI را افزایش دهد که عملیات طولانی مدت را انجام نمی دهند، به عنوان مثال، زمان تکمیل تست Jetstrea تا 7.5٪ و تست سرعت سنج تا 5٪ کاهش می یابد.
- کار با جریانها با افزایش مقدار گزینه highWaterMark از 16 کیلوبایت به 65 کیلوبایت تسریع شده است (محدودیتی را که ضبط بافر میشود مشخص میکند). این تغییر منجر به افزایش مصرف حافظه میشود، بنابراین برنامههایی که برای اجرا با RAM محدود طراحی شدهاند، ممکن است نیاز داشته باشند از طریق فراخوانی به setDefaultHighWaterMark() به مقدار قبلی برگردند.
- بهبود عملکرد fetch() و APIهای اجراکننده آزمایشی با کارآمدتر کردن نمونه سازی AbortSignal. عملکرد API های مربوط به کار همزمان با سیستم های فایل بهبود یافته است.
- یک ویژگی آزمایشی برای استفاده از فراخوانی "require()" برای بارگیری ماژول های ESM جاوا اسکریپت (ECMAScript Modules) در حالت همزمان ارائه شده است. ماژول های ESM در مرورگرها استفاده می شوند و جایگزین ماژول های CommonJS مخصوص Node.js می شوند. برای بارگیری از طریق "require()"، ماژول ESM باید در حالت همزمان (بدون انتظار در سطح بالا) اجرا شود. پشتیبانی از طریق پرچم "--experimental-require-module" فعال می شود.
- قابلیت آزمایشی برای اجرای اسکریپت های تعریف شده در فایل package.json با استفاده از دستور "--run" اضافه شد. "
- دستور "node –watch" با اجرای یک حالت تماشای به دسته پایدار منتقل شده است که تضمین می کند هنگام تغییر فایل وارد شده، فرآیند دوباره راه اندازی می شود (به عنوان مثال، اگر "node -watch index.js" اجرا شود، هنگامی که index.js تغییر کند، فرآیند به طور خودکار مجدداً راه اندازی می شود).
- پیاده سازی بومی WebSocket API تثبیت شده است و به WebSocket اجازه می دهد در حالت مشتری بدون نصب وابستگی های اضافی استفاده شود.
- پشتیبانی جزئی برای Navigator API اضافه شده است.
- Webstreams API پشتیبانی از فرمت فشرده سازی deflate-raw را اضافه کرده است.
- توابع glob و globSync به node:fsmodule برای تطبیق الگوی مسیرهای فایل اضافه شده است.
- مدیریت بهبود یافته پشته های IPv6 پیکربندی نادرست. پیاده سازی الگوریتم Happy Eyeballs برای برگشت سریع در صورت بروز مشکل در عملکرد IPv6.
- Util API منسوخ شده است.
- نسخه های وابستگی به روز شده: npm 10.5.1، libuv 1.48.0، simdutf 5.2.3، c-ares 1.28.1، zlib 1.3.0.1-motley-24c07df، simdjson به 3.8.0، ada 2.7.7 و ada 6.6.0 .
پلتفرم Node.js میتواند هم برای پشتیبانی سمت سرور از برنامههای وب و هم برای ایجاد برنامههای شبکه استاندارد سمت کلاینت و سرور مورد استفاده قرار گیرد. برای گسترش عملکرد برنامههای Node.js، مجموعه بزرگی از ماژولها، از جمله ماژولهایی که پیادهسازی میکنند، تهیه شده است. سرورها و کلاینتهای HTTP، SMTP، XMPP، DNS، FTP، IMAP، POP3، ماژولهایی برای ادغام با چارچوبهای مختلف وب، کنترلکنندههای WebSocket و Ajax، رابطها به DBMS (MySQL، PostgreSQL، SQLite، MongoDB)، موتورهای قالب، موتورهای CSS، پیادهسازی الگوریتمهای رمزنگاری و سیستمهای مجوزدهی (OAuth)، تجزیهکنندههای XML.
برای رسیدگی به تعداد زیادی درخواست موازی، Node.js از یک مدل اجرای کد ناهمزمان مبتنی بر پردازش رویداد غیرمسدود و تعریف کنترلکنندههای برگشت تماس استفاده میکند. روش های پشتیبانی شده برای اتصالات چندگانه شامل epoll، kqueue، /dev/poll، و select است. برای مالتی پلکس کردن اتصال، از کتابخانه libuv استفاده می شود که یک افزونه برای libev در سیستم های یونیکس و IOCP در ویندوز است. کتابخانه libeio برای ایجاد یک Thread Pool استفاده می شود و c-ares برای انجام پرس و جوهای DNS در حالت غیر مسدود کننده یکپارچه شده است. تمام فراخوانیهای سیستمی که باعث مسدود شدن میشوند، در داخل thread pool اجرا میشوند و سپس، مانند کنترلکنندههای سیگنال، نتیجه کار خود را از طریق یک لوله بدون نام ارسال میکنند.
اجرای کد جاوا اسکریپت با استفاده از موتور V8 توسعه یافته توسط گوگل تضمین می شود (علاوه بر این، مایکروسافت در حال توسعه نسخه Node.js با موتور Chakra-Core است). Node.js در هسته خود شبیه به Perl AnyEvent، Ruby Event Machine، Python Twisted و اجرای رویدادها در Tcl است، اما حلقه رویداد در Node.js از توسعه دهنده پنهان است و شبیه پردازش رویداد در یک برنامه وب است. در حال اجرا در مرورگر
منبع: opennet.ru
