پلتفرم جاوا اسکریپت سمت سرور Node.js 20.0 موجود است

انتشار Node.js 20.0، یک پلتفرم برای اجرای برنامه های شبکه در جاوا اسکریپت، انجام شد. Node.js 20.0 به شاخه پشتیبانی طولانی اختصاص داده شده است، اما این وضعیت تا اکتبر، پس از تثبیت، اختصاص داده نخواهد شد. Node.js 20.x تا 30 آوریل 2026 پشتیبانی خواهد شد. تعمیر و نگهداری شعبه قبلی Node.js 18.x LTS تا آوریل 2025 و شعبه قبلی 16.x LTS تا سپتامبر 2023 ادامه خواهد داشت. شعبه 14.x LTS در 30 آوریل و شعبه موقت Node.js 19.x در تاریخ 1 ژوئن متوقف خواهند شد.

بهبودهای اصلی:

  • موتور V8 به نسخه 11.3 به روز شده است که در Chromium 113 استفاده می شود. از تغییرات نسبت به شاخه Node.js 19 که از موتور Chromium 107 استفاده می کرد، توابع String.prototype.isWellFormed و toWellFormed، Array.prototype است. و روش های TypedArray.prototype برای کار با کپی روی تغییر اشیاء Array و TypedArray، پرچم "v" در RegExp، پشتیبانی از تغییر اندازه ArrayBuffer و افزایش اندازه SharedArrayBuffer، tail-call در WebAssembly.
  • یک مکانیسم مدل مجوز آزمایشی پیشنهاد شده است که به شما امکان می دهد دسترسی به منابع خاصی را در طول اجرا محدود کنید. پشتیبانی مدل مجوز با مشخص کردن پرچم "--experimental-permission" هنگام اجرا فعال می شود. در پیاده‌سازی اولیه، گزینه‌هایی برای محدود کردن دسترسی نوشتن (--allow-fs-write) و خواندن (--allow-fs-read) به بخش‌های خاصی از FS، فرآیندهای فرزند (--allow-child-process) پیشنهاد شد. ، افزونه ها (--no-addons) و رشته ها (--allow-worker). به عنوان مثال، برای اجازه نوشتن در پوشه /tmp و خواندن فایل /home/index.js، می توانید تعیین کنید: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index.js

    برای بررسی دسترسی، پیشنهاد می شود از متد process.permission.has() استفاده کنید، به عنوان مثال، "process.permission.has('fs.write',"/tmp/test").

  • هندلرهای ماژول های خارجی ECMAScript (ESM) که از طریق گزینه "--experimental-loader" بارگیری می شوند، اکنون در یک رشته مجزا، جدا از رشته اصلی اجرا می شوند، که تقاطع کد برنامه و ماژول های ESM بارگذاری شده را حذف می کند. مشابه مرورگرها، متد import.meta.resolve() اکنون هنگام فراخوانی از داخل یک برنامه به صورت همزمان اجرا می شود. در یکی از شاخه های بعدی Node.js، پشتیبانی بارگذاری ESM برنامه ریزی شده است تا به دسته ویژگی های پایدار منتقل شود.
  • ماژول node:test (test_runner) که برای ایجاد و اجرای تست های جاوا اسکریپت که نتایج را در قالب TAP (تست هر چیزی پروتکل) برمی گرداند، طراحی شده است، به حالت پایدار منتقل شده است.
  • یک تیم عملکرد جداگانه تشکیل شده است، که در آماده سازی برای شعبه جدید، برای سرعت بخشیدن به اجزای مختلف زمان اجرا، از جمله تجزیه URL، fetch() و EventTarget کار کرده است. به عنوان مثال، سربار مقداردهی اولیه EventTarget به نصف کاهش یافته است، عملکرد متد ()URL.canParse به طور قابل توجهی بهبود یافته است، و کارایی تایمرها بهبود یافته است. علاوه بر این، انتشار یک تجزیه‌کننده URL با کارایی بالا - Ada 2.0 که به زبان C ++ نوشته شده است، در ترکیب گنجانده شده است.
  • توسعه یک ویژگی آزمایشی برای ارائه برنامه‌ها در قالب یک فایل اجرایی (SEA، Single Executable Applications) ادامه دارد. اکنون ایجاد یک فایل اجرایی نیاز به جایگزینی یک حباب ایجاد شده از یک فایل پیکربندی JSON (به جای جایگزینی یک فایل جاوا اسکریپت) دارد.
  • سازگاری Web Crypto API بهبود یافته با اجرای پروژه های دیگر.
  • اضافه شدن پشتیبانی رسمی برای ویندوز در سیستم های ARM64.
  • پشتیبانی مداوم از برنامه های افزودنی WASI (WebAssembly System Interface) برای ایجاد برنامه های کاربردی WebAssembly مستقل. نیاز به تعیین پرچم خط فرمان ویژه برای فعال کردن پشتیبانی WASI حذف شد.

پلت فرم 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

اضافه کردن نظر