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 20.04 و همچنین برای macOS 10.15+ ارائه شده است. به دلیل مشکلات ساخت موتور V8، ساخت بیلدهای 32 بیتی برای ویندوز به طور موقت متوقف شده است.
- یک گزینه آزمایشی برای ساخت یک 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 در ویندوز است. کتابخانه 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 از توسعه دهنده پنهان است و شبیه مدیریت رویداد در یک برنامه تحت وب در حال اجرا است. در مرورگر هنگام نوشتن برنامه های کاربردی برای node.js، به جای انجام "var result = db.query("select..");" باید ویژگی های برنامه نویسی مبتنی بر رویداد را در نظر بگیرید. با انتظار برای اتمام کار و پردازش بعدی نتایج، Node.js از اصل اجرای ناهمزمان استفاده می کند، یعنی. کد به "db.query("انتخاب.."، تابع (نتیجه) {result processing}) تبدیل میشود، که در آن کنترل فوراً به کد بعدی منتقل میشود و نتیجه پرس و جو با رسیدن دادهها پردازش میشود.
منبع: opennet.ru