Node.js 21.0 منتشر شد، پلتفرمی برای اجرای برنامه های شبکه در جاوا اسکریپت. شعبه Node.js 21.0 به مدت 6 ماه پشتیبانی می شود. در روزهای آتی، تثبیت شعبه Node.js 20 به پایان می رسد که وضعیت LTS دریافت می کند و تا آوریل 2026 پشتیبانی می شود. تعمیر و نگهداری شاخه LTS قبلی Node.js 18.0 تا سپتامبر 2025 و سال قبل از آخرین شاخه LTS 16.0 تا آوریل 2024 ادامه خواهد داشت.
بهبودهای اصلی:
- Fetch API پایدار اعلام شده است، برای بارگذاری منابع از طریق شبکه و ساده کردن نوشتن کد جاوا اسکریپت جهانی مناسب برای کار در سمت سرور و کلاینت طراحی شده است. پیاده سازی بر اساس کد از سرویس گیرنده HTTP/1.1 undici است و تا حد امکان به API مشابه ارائه شده در مرورگرها نزدیک است. API شامل متد fetch() و اشیاء Headers است. درخواست و پاسخ، نشان دهنده هدرهای HTTP، درخواست و پاسخ. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- پشتیبانی از WebStreams API، که دسترسی به جریان های داده دریافتی از طریق شبکه را فراهم می کند، تثبیت شده است. API این امکان را فراهم میکند که کنترلکنندههای خود را اضافه کنید که با دادهها کار میکنند، بدون اینکه منتظر دانلود کل فایل باشید. اشیاء موجود در Node.js عبارتند از ReadableStream*، TransformStream*، WritableStream*، TextEncoderStream، TextDecoderStream، CompressionStream و DecompressionStream.
- اضافه شدن اجرای آزمایشی سرویس گیرنده WebSocket، سازگار با مرورگرها. برای فعال کردن پشتیبانی WebSocket، پرچم "--experimental-websocket" ارائه شده است.
- یک حالت آزمایشی برای استفاده از اجرای پیشفرض ماژولهای جاوا اسکریپت ESM (ماژولهای ECMAScript، که در ماژولهای مرورگرها استفاده میشود) به جای CommonJS (مخصوص Node.js) اضافه شده است. این تغییر بر ماژولهایی که فرمت آنها به صراحت از طریق فیلد "type" در package.json تعریف شده است، از طریق پرچم "--input-type" مشخص شده است، یا به دلیل پسوند فایل (mjs. برای ESM، .cjs. برای CommonJS). با این حال، ماژولهایی که بهصراحت بهعنوان CommonJS تعریف نشدهاند (مثلاً دارای پسوند «.js» هستند) وقتی حالت جدید فعال شود، بهعنوان ماژولهای ESM تلقی میشوند. برای فعال کردن تنظیمات ماژول جدید، پرچم "--experimental-default-type" پیشنهاد شده است.
- موتور V8 به نسخه 11.8 بهروزرسانی شده است که در Chromium 118 استفاده میشود، که اکنون از روش ArrayBuffer.prototype.transfer، توانایی گروهبندی آرایهها (روش groupBy) و دستورالعملهای WebAssembly برای پردازش ثابتها (i32.add، i32.sub، i32.mul، i64 .add، i64.sub و i64.mul).
- پشتیبانی از کنترل کننده globalPreload به نفع ثبت و تنظیم اولیه تماس ها برای پیکربندی ماژول ها متوقف شده است.
- یک گزینه "flush" به تابع fs.writeFile اضافه شده است تا پس از هر عملیات نوشتن، داده ها را مجبور به شستشو در درایو کند.
- بهبود عملکرد کد مربوط به تجزیه URL، واکشی API، جریانها، node:fs و HTTP.
- شی ناوبر جهانی اضافه شد. به عنوان مثال، برای به دست آوردن اطلاعات در مورد تعداد هسته های CPU، می توانید از ویژگی navigator.hardwareConcurrency استفاده کنید.
- در پارامتر "-test"، پشتیبانی از ماسک های glob برای انتخاب تست های اجرا شده اضافه شده است (برای مثال، می توانید "—test **/*.test.js." را مشخص کنید).
- بسته منیجر npm 10.2.0 و تجزیه کننده llhttp 9.1.2 به روز شده اند.
- پشتیبانی از Visual Studio 2019 و نسخههای macOS قدیمیتر از 11.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 از توسعه دهنده پنهان است و شبیه مدیریت رویداد در یک برنامه تحت وب در حال اجرا است. در مرورگر هنگام نوشتن برنامه های کاربردی برای node.js، به جای انجام "var result = db.query("select..");" باید ویژگی های برنامه نویسی مبتنی بر رویداد را در نظر بگیرید. با انتظار برای اتمام کار و پردازش بعدی نتایج، Node.js از اصل اجرای ناهمزمان استفاده می کند، یعنی. کد به "db.query("انتخاب.."، تابع (نتیجه) {result processing}) تبدیل میشود، که در آن کنترل فوراً به کد بعدی منتقل میشود و نتیجه پرس و جو با رسیدن دادهها پردازش میشود.
منبع: opennet.ru