منصة JavaScript من جانب الخادم Node.js 21.0 متاحة

تم إصدار Node.js 21.0، وهو عبارة عن منصة لتشغيل تطبيقات الشبكة في JavaScript. سيتم دعم فرع Node.js 21.0 لمدة 6 أشهر. في الأيام المقبلة، سيتم الانتهاء من تثبيت فرع Node.js 20، والذي سيحصل على حالة LTS وسيتم دعمه حتى أبريل 2026. ستستمر صيانة فرع LTS السابق لـ Node.js 18.0 حتى سبتمبر 2025، والعام السابق لآخر فرع LTS 16.0 حتى أبريل 2024.

التحسينات الرئيسية:

  • تم الإعلان عن Fetch API بأنها مستقرة، ومصممة لتحميل الموارد عبر الشبكة وتبسيط كتابة كود JavaScript العالمي المناسب للعمل على جانب الخادم والعميل. يعتمد التنفيذ على التعليمات البرمجية الواردة من عميل HTTP/1.1 undici وهو أقرب ما يمكن إلى واجهة برمجة التطبيقات المماثلة المتوفرة في المتصفحات. تتضمن واجهة برمجة التطبيقات طريقة الجلب () وكائنات الرؤوس. الطلب والاستجابة، يمثلان رؤوس HTTP والطلب والاستجابة. const res = انتظار الجلب('https://nodejs.org/api/documentation.json'); إذا (res.ok) { بيانات const = انتظار res.json(); console.log(data); }
  • تم استقرار دعم WebStreams API، الذي يوفر الوصول إلى تدفقات البيانات المستلمة عبر الشبكة. تتيح واجهة برمجة التطبيقات إمكانية إضافة معالجاتك الخاصة التي تعمل مع البيانات عند وصول المعلومات عبر الشبكة، دون انتظار تنزيل الملف بأكمله. تتضمن الكائنات المتوفرة في Node.js ReadableStream*، وTransformStream*، وWritableStream*، وTextEncoderStream، وTextDecoderStream، وCompressionStream، وDecompressionStream.
  • تمت إضافة التنفيذ التجريبي لعميل WebSocket، المتوافق مع المتصفحات. لتمكين دعم WebSocket، يتم توفير علامة "--experimental-websocket".
  • تمت إضافة وضع تجريبي لاستخدام التنفيذ الافتراضي لوحدات JavaScript ESM (وحدات ECMAScript، المستخدمة في وحدات المتصفحات) بدلاً من CommonJS (خاص بـ Node.js). لا يؤثر التغيير على الوحدات النمطية التي تم تعريف تنسيقها بشكل صريح عبر حقل "النوع" في 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، لصالح تسجيل وتهيئة الاستدعاءات لتكوين الوحدات.
  • تمت إضافة خيار "مسح" إلى وظيفة fs.writeFile لإجبار البيانات على التدفق إلى محرك الأقراص بعد كل عملية كتابة.
  • تحسين أداء التعليمات البرمجية المتعلقة بتحليل عنوان URL وواجهة برمجة تطبيقات الجلب والتدفقات والعقدة:fs وHTTP.
  • تمت إضافة كائن المستكشف العالمي. على سبيل المثال، للحصول على بيانات حول عدد مراكز وحدة المعالجة المركزية، يمكنك استخدام الخاصية navigator.hardwareConcurrency.
  • في المعلمة "—test"، تمت إضافة دعم للأقنعة الشاملة لتحديد الاختبارات المراد تشغيلها (على سبيل المثال، يمكنك تحديد "—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 على أنظمة Unix و IOCP على Windows. تُستخدم مكتبة libeio لإنشاء مجموعة مؤشرات ترابط ، ويتم دمج c-ares لإجراء استعلامات DNS في وضع عدم الحظر. يتم تنفيذ جميع استدعاءات النظام التي تسبب الحجب داخل تجمع مؤشرات الترابط ، وبعد ذلك ، مثل معالجات الإشارات ، تنقل نتيجة عملهم مرة أخرى عبر أنبوب غير مسمى (أنبوب). يتم توفير تنفيذ كود JavaScript من خلال استخدام محرك V8 الذي طورته Google (بالإضافة إلى ذلك ، تقوم Microsoft بتطوير نسخة من Node.js مع محرك Chakra-Core).

في جوهره ، يشبه Node.js Perl AnyEvent و Ruby Event Machine و Python Twisted Framework وتطبيق حدث Tcl ، لكن حلقة الحدث في Node.js مخفية عن المطور وتشبه معالجة الأحداث في تطبيق ويب قيد التشغيل في المتصفح. عند كتابة تطبيقات لـ node.js ، تحتاج إلى مراعاة تفاصيل البرمجة المدفوعة بالأحداث ، على سبيل المثال ، بدلاً من تنفيذ "var result = db.query (" select .. ")؛" مع انتظار اكتمال العمل والمعالجة اللاحقة للنتائج ، يستخدم Node.js مبدأ التنفيذ غير المتزامن ، أي يتم تحويل الكود إلى "db.query (" حدد .. "، الوظيفة (النتيجة) {معالجة النتائج}) ؛" ، حيث ينتقل عنصر التحكم على الفور إلى رمز إضافي ، وستتم معالجة نتيجة الاستعلام عند وصول البيانات.

المصدر: opennet.ru

إضافة تعليق