Node.js 18.0 منتشر شد، پلتفرمی برای اجرای برنامه های شبکه در جاوا اسکریپت. Node.js 18.0 به عنوان یک شاخه پشتیبانی بلند مدت طبقه بندی می شود، اما این وضعیت تنها در ماه اکتبر، پس از تثبیت، اختصاص داده می شود. Node.js 18.x تا آوریل 2025 پشتیبانی خواهد شد. تعمیر و نگهداری شاخه LTS قبلی Node.js 16.x تا آوریل 2024 و سال قبل از آخرین شاخه LTS 14.x تا آوریل 2023 ادامه خواهد داشت. شعبه 12.x LTS در 30 آوریل متوقف خواهد شد و شاخه مرحلهای Node.js 17.x در تاریخ 1 ژوئن متوقف خواهد شد.
بهبودهای اصلی:
- موتور V8 به نسخه 10.1 به روز شده است که در Chromium 101 استفاده می شود. در مقایسه با نسخه 17.9.0 Node.js، اکنون از ویژگی هایی مانند متدهای findLast و findLastIndex برای یافتن عناصر نسبت به انتهای آن پشتیبانی می شود. یک آرایه و تابع Intl.supportedValuesOf. Intl.Locale API بهبود یافته. مقداردهی اولیه فیلدهای کلاس و متدهای خصوصی تسریع شده است.
- API تجربی fetch() بهطور پیشفرض فعال است و برای بارگیری منابع در شبکه طراحی شده است. پیاده سازی بر اساس کد از سرویس گیرنده HTTP/1.1 undici است و تا حد امکان به API مشابه ارائه شده در مرورگرها نزدیک است. این شامل پشتیبانی از رابط های FormData، Headers، Request و Response برای دستکاری هدرهای درخواست و پاسخ HTTP است. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- یک پیادهسازی آزمایشی از Web Streams API اضافه شده است که دسترسی به جریانهای داده دریافتی از طریق شبکه را فراهم میکند. API این امکان را فراهم میکند که کنترلکنندههای خود را برای کار با دادهها با رسیدن اطلاعات از طریق شبکه، بدون منتظر ماندن برای دانلود کل فایل اضافه کنید. اشیایی که اکنون در Node.js موجود هستند عبارتند از ReadableStream*، TransformStream*، WritableStream*، TextEncoderStream، TextDecoderStream، CompressionStream و DecompressionStream.
- Blob API به حالت پایدار منتقل شده است و به شما این امکان را می دهد که داده های خام تغییرناپذیر را برای استفاده ایمن در رشته های کارگری مختلف کپسوله کنید.
- BroadcastChannel API پایدار شده است و به شما امکان می دهد تبادل پیام ها را در حالت ناهمزمان در قالب "یک فرستنده - گیرندگان بسیاری" سازماندهی کنید.
- گره ماژول آزمایشی اضافه شد: تست برای ایجاد و اجرای آزمایشهایی در جاوا اسکریپت که نتایج را در قالب TAP (تست هر چیزی پروتکل) برمیگرداند.
- اکنون ایجاد نسخههای آماده برای استفاده در Red Hat Enterprise امکانپذیر است. Linux (RHEL) 8 و سایر توزیعهای مبتنی بر Glibc 2.28+، از جمله Debian 10 و Ubuntu ۲۰.۰۴، و همچنین برای macOS ۱۰.۱۵+. به دلیل مشکلاتی که در ساخت موتور V8 وجود دارد، ساختهای ۳۲ بیتی برای Windows.
- یک گزینه آزمایشی برای ساخت یک Node.js قابل اجرا با مؤلفههای انتخاب شده توسط کاربر که در هنگام راهاندازی مقداردهی اولیه شدهاند، ارائه میکند. برای تعریف اجزای شروع، گزینه "--node-snapshot-main" به اسکریپت ساخت پیکربندی اضافه شده است، به عنوان مثال، "./configure —node-snapshot-main=marked.js; گره نام"
پلتفرم 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 در IOCP است، برای مالتیپلکس اتصال استفاده میشود. Windowsکتابخانهی libeio برای ایجاد یک مخزن نخ (thread pool) استفاده میشود و c-ares برای انجام کوئریهای DNS در حالت غیر مسدودکننده (non-blocking) یکپارچه شده است. تمام فراخوانیهای سیستم مسدودکننده درون مخزن نخ اجرا میشوند و سپس، مانند کنترلکنندههای سیگنال، نتایج خود را از طریق یک لولهی بدون نام برمیگردانند. اجرای جاوا اسکریپت توسط موتور V8 گوگل ارائه میشود (مایکروسافت نیز در حال توسعهی نوعی از Node.js با موتور Chakra-Core است).
Node.js در هسته خود شبیه به Perl AnyEvent، Ruby Event Machine، Python Twisted و پیاده سازی رویداد Tcl است، اما حلقه رویداد در Node.js از توسعه دهنده پنهان است و شبیه مدیریت رویداد در یک برنامه تحت وب در حال اجرا است. در مرورگر هنگام نوشتن برنامه های کاربردی برای node.js، به جای انجام "var result = db.query("select..");" باید ویژگی های برنامه نویسی مبتنی بر رویداد را در نظر بگیرید. با انتظار برای اتمام کار و پردازش بعدی نتایج، Node.js از اصل اجرای ناهمزمان استفاده می کند، یعنی. کد به "db.query("انتخاب.."، تابع (نتیجه) {result processing}) تبدیل میشود، که در آن کنترل فوراً به کد بعدی منتقل میشود و نتیجه پرس و جو با رسیدن دادهها پردازش میشود.
منبع: opennet.ru
