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

تم إطلاق Node.js 20.0 ، وهو نظام أساسي لتنفيذ تطبيقات الشبكة في JavaScript. تم تعيين 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 ، واستدعاء الذيل في WebAssembly.
  • تم اقتراح آلية نموذج إذن تجريبي تسمح لك بتقييد الوصول إلى موارد معينة أثناء التنفيذ. يتم تمكين دعم نموذج الإذن من خلال تحديد علامة "--إذن تجريبي" عند التشغيل. في التنفيذ الأولي ، تم اقتراح خيارات لتقييد الكتابة (--allow-fs-write) وقراءة (--allow-fs-read) الوصول إلى أجزاء معينة من FS ، والعمليات الفرعية (--allow-child-process) والوظائف الإضافية (- بدون إضافات) والمواضيع (- السماح للعاملين). على سبيل المثال ، للسماح بالكتابة إلى الدليل / tmp وقراءة ملف /home/index.js ، يمكنك تحديد: node --experimental-إذن --allow-fs-write = / tmp / --allow-fs-read = / home / index.js index.js

    للتحقق من الوصول ، يُقترح استخدام طريقة process.permission.has () ، على سبيل المثال ، "process.permission.has ('fs.write'،" / tmp / test ").

  • يتم الآن تنفيذ معالجات وحدات ECMAScript الخارجية (ESMs) التي تم تحميلها عبر خيار "- محمل تجريبي" في سلسلة منفصلة ، معزولة عن الخيط الرئيسي ، مما يلغي تقاطع كود التطبيق ووحدات ESM المحملة. على غرار المتصفحات ، يتم الآن تنفيذ طريقة import.meta.resolve () بشكل متزامن عند استدعائها من داخل أحد التطبيقات. في أحد الفروع التالية لـ Node.js ، من المخطط نقل دعم تحميل ESM إلى فئة الميزات الثابتة.
  • العقدة: تم نقل وحدة الاختبار (test_runner) ، المصممة لإنشاء وتشغيل اختبارات JavaScript التي تُرجع النتائج بتنسيق TAP (اختبار بروتوكول أي شيء) ، إلى مستقر.
  • تم تشكيل فريق أداء منفصل ، والذي ، استعدادًا للفرع الجديد ، عمل على تسريع مكونات وقت التشغيل المختلفة ، بما في ذلك تحليل عناوين URL و fetch () و EventTarget. على سبيل المثال ، تم تخفيض النفقات العامة لتهيئة EventTarget إلى النصف ، وتم تحسين أداء طريقة URL.canParse () بشكل ملحوظ ، كما تم تحسين كفاءة أجهزة ضبط الوقت. بالإضافة إلى ذلك ، تم تضمين إصدار محلل URL عالي الأداء - Ada 2.0 ، المكتوب بلغة C ++ ، في التكوين.
  • استمر تطوير ميزة تجريبية لتقديم التطبيقات في شكل ملف تنفيذي واحد (SEA ، تطبيقات فردية قابلة للتنفيذ). يتطلب إنشاء ملف تنفيذي الآن استبدال blob تم إنشاؤه من ملف تكوين JSON (بدلاً من استبدال ملف JavaScript).
  • التوافق المحسن لواجهة برمجة تطبيقات تشفير الويب مع تطبيقات من مشاريع أخرى.
  • تمت إضافة الدعم الرسمي لنظام التشغيل Windows على أنظمة ARM64.
  • استمرار الدعم لملحقات WASI (واجهة نظام WebAssembly) لإنشاء تطبيقات 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 على أنظمة 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

إضافة تعليق