الجديد في Node.js v20 (عداء اختبار ، نموذج الإذن ، SEA ، محرك V8 JS 11.3)
نشرت: 2023-04-28Node.js v20 متاح الآن! في 18 أبريل 2023 ، تم الإعلان عنه ويمكن للجميع استخدامه الآن. مع هذا الإصدار ، يجب أن يكون Node.js أكثر أمانًا ويعمل بشكل أفضل.
من المهم أن تعرف - نظرًا لأن هذا الإصدار ذو رقم زوجي ، فمن المقرر أن يصبح إصدار دعم طويل المدى (LTS) في أكتوبر 2023 وسيتم دعمه حتى أبريل 2026. ومع ذلك ، فإن فريق Node.js يسعى بنشاط للحصول على المجتمع التعليقات لتحديد أي مشكلات وإصلاحها قبل ترقيتها إلى LTS.
يجلب هذا الإصدار الجديد من Node.js تحديثات وميزات مثيرة سيقدرها المطورون بالتأكيد مثل نموذج الإذن التجريبي ، import.meta.resolve
، عداء اختبار مستقر ، يقوم بتحديث محرك V8 JavaScript إلى الإصدار 11.3 ، مما يوفر تحسينات في الأداء وخطأ إصلاحات وغير ذلك الكثير.
في هذه المقالة ، سوف تستكشف التغييرات التي تم إدخالها في Node.js v20 ، مما يوفر نظرة متعمقة على ميزاته وإمكانياته الجديدة.
الشروع في العمل مع Node.js v20
تثبيت Node.js v20 مشابه تمامًا للإصدارات الأخرى من Node.js. كل ما عليك فعله هو:
- قم بتنزيل حزمة المثبت من موقع Node.js الرسمي.
- بمجرد تنزيل برنامج التثبيت ، قم بتشغيله واتبع التعليمات لإكمال عملية التثبيت. هذه العملية واضحة ومباشرة ، وتحتاج فقط إلى الموافقة على اتفاقية الترخيص والنقر فوق الزر "التالي".
- أعد تشغيل النظام / الجهاز الخاص بك بعد اكتمال عملية التثبيت للتأكد من أن جميع التغييرات سارية المفعول.
- تحقق من تثبيت Node.js عن طريق تشغيل الأمر التالي:
node -v
إذا رأيت رقم الإصدار (v20.0.0) ، فهذا يعني أنه تم تثبيت Node.js بشكل صحيح ، وأنت جاهز لبدء العمل مع Node.js v20.
ما الجديد في Node.js v20؟
دعنا نستكشف التحديثات الخمسة الرئيسية التي تم تقديمها مع إصدار Node.js هذا. تشمل هذه الميزات:
نموذج الإذن التجريبي
يعد تقديم نموذج الأذونات التجريبي في Node.js v20 إضافة مهمة تمنح المطورين مزيدًا من التحكم في الوصول إلى موارد محددة أثناء التنفيذ.
هذه الميزة الجديدة مفيدة عندما يكون استخدام الموارد والأمان أمرًا بالغ الأهمية ، كما هو الحال في بيئة الإنتاج.
يأتي نموذج الإذن بعدة قدرات ، بما في ذلك تقييد الوصول إلى نظام الملفات ، وعملية الطفل ، وخيوط العمل ، والوظائف الإضافية الأصلية.
يمكن للمطورين استخدام علامات مثل --allow-fs-read
و --allow-fs-write
و --allow-child-process
لتحديد الموارد التي يمكن الوصول إليها. لتنشيط هذه العلامات ، يحتاج المطورون إلى استخدام علامة --experimental-permission
جنبًا إلى جنب مع الأذونات المطلوبة.
فيما يلي مثال على كيفية استخدام نموذج الأذونات للسماح بوصول القراءة والكتابة إلى نظام الملفات بأكمله:
$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js
يمكن للمطورين أيضًا استخدام نموذج الإذن لتحديد الوصول إلى مجلدات وملفات محددة. على سبيل المثال ، يسمح الأمر التالي بالوصول للكتابة إلى المجلد / tmp / :
$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js
تتمثل إحدى الفوائد المهمة لنموذج الأذونات في القدرة على ممارسة المزيد من التحكم الدقيق في وصول نظام الملفات. على سبيل المثال ، يمكن للمطورين تحديد المسارات وأنماط أحرف البدل للسماح بالوصول إلى مجلدات أو ملفات محددة.
$ node --experimental-permission --allow-fs-read=/home/user/* index.js
يمنح الأمر أعلاه حق الوصول للقراءة إلى جميع المجلدات داخل الدليل / home / user / .
يمكن أيضًا استخدام خاصية الإذن الخاصة بكائن العملية للتحقق مما إذا تم منح إذن معين في وقت التشغيل. على سبيل المثال ، إذا كنت تريد التحقق مما إذا كانت عملية Node.js لديك تتمتع بحق الوصول للقراءة إلى مجلد معين ، / home / user / documents ، فيمكنك استخدام الكود التالي:
if (process.permission.has('fs.read', '/home/user/documents')) { console.log('Read access granted to /home/user/documents'); } else { console.log('Read access not granted to /home/user/documents'); }
باستخدام نموذج الإذن ، يكون لديك تحكم أكثر دقة في الوصول إلى نظام ملفات عمليات Node.js الخاص بك ، مما قد يؤدي إلى تحسين الأمان واستخدام الموارد بشكل أكثر كفاءة.
من الأهمية بمكان ملاحظة أن نموذج الإذن لا يزال تجريبيًا وقد يتغير في الإصدارات المستقبلية من Node.js. يُنصح بالبقاء على اطلاع دائم بوثائق نموذج الإذن وتوخي الحذر عند استخدام هذه الميزات التجريبية.
عداء اختبار مستقر
يتضمن Node.js v20 إصدارًا ثابتًا من وحدة test_runner التي تمكن المطورين من إنشاء مجموعات اختبار JavaScript وتشغيلها بسرعة وسهولة دون تثبيت تبعيات إضافية.
يتضمن عداء الاختبار الثابت الآن العديد من الكتل الأساسية ، مثل describe
، it
/ test
، والخطافات ، لتأليف وتنظيم ملفات الاختبار ، جنبًا إلى جنب مع الاستهزاء ، ووضع المشاهدة ، والقدرة على تشغيل ملفات اختبار متعددة بالتوازي باستخدام node --test
أمر node --test
.
فيما يلي مثال على كيفية استخدام عداء الاختبار:
import { test, mock } from 'node:test'; import assert from 'node:assert'; import fs from 'node:fs'; mock.method(fs, 'readFile', async () => "Hello World"); test('synchronous passing test', async (t) => { // This test passes because it does not throw an exception. assert.strictEqual(await fs.readFile('a.txt'), "Hello World"); });
يقدم عداء الاختبار مراسلي اختبار قابلين للتكوين ومخصصين عبر علم --test-reporter
الاختبار وتغطية الاختبار التجريبية من خلال علامة --experimental-test-coverage
وإمكانيات السخرية.
على الرغم من أنه لا يُقصد منه استبدال أطر الاختبار كاملة الميزات مثل Jest أو Mocha ، فإن عداء الاختبار الثابت يوفر طريقة بسيطة وسريعة لإنشاء مجموعات اختبار. لقد تم تحسينه بشكل كبير منذ تقديمه في Node.js v19 ، وبفضل اختبار المستخدم النهائي وردود الفعل ، فقد تم تصنيفه الآن على أنه مستقر في Node.js v20.
يمكن العثور على مزيد من المعلومات في طلب السحب المدمج هذا.
تم تحديث محرك جافا سكريبت V8 إلى 11.3
تم تحديث محرك V8 JavaScript ، الذي يشغل Node.js ، إلى الإصدار 11.3 في Node.js v20. يؤدي ذلك إلى تحسين الأداء وتقديم ميزات لغة جديدة. بعض الميزات الجديدة التي يتضمنها هذا التحديث:
-
String.prototype.isWellFormed
andtoWellFormed
: هذه الطرق مفيدة بشكل خاص لضمان تنسيق سلسلة مناسب. يساعد هذا في التأكد من أن إدخال سلسلة المستخدم بتنسيق UTF-16 الصحيح ، مما يقلل من الأخطاء في عصر الرموز التعبيرية. - الأساليب التي تغير Array و TypedArray بالنسخ: يمكن أن يكون هذا مفيدًا لإنشاء نسخ معدلة من المصفوفات دون التأثير على البيانات الأصلية ، والتي تكون ذات صلة خاصة في الحالات التي تحتاج فيها إلى الاحتفاظ بالبيانات الأصلية للمقارنة أو لأغراض أخرى.
-
ArrayBuffer
يمكن تغيير حجمه وSharedArrayBuffer
القابل للنمو: يوفر مرونة أكبر ، مما يسمح بتخصيص ذاكرة أكثر كفاءة. - علامة RegExp v مع مجموعة تدوين وخصائص السلاسل: تضيف وظائف للتعبيرات العادية.
- استدعاء ذيل WebAssembly: يوفر طريقة لتحسين أنواع معينة من استدعاءات الوظائف.
تُظهر هذه التحديثات الالتزام المستمر لمجتمع تطوير Node.js لتحسين الأداء والوظائف.
import.meta.resolve () المتزامن
في Node.js v20 ، تم تقديم import.meta.resolve()
، مما يسهل كتابة البرامج النصية غير الحساسة للموقع. تعود هذه الوظيفة بشكل متزامن ، على غرار سلوك المتصفح ، مما يسمح بتنفيذ أكثر كفاءة.
لا يزال من الممكن تعريف خطافات حل أداة تحميل المستخدم على أنها دالة غير متزامنة ، لكن import.meta.resolve()
سيستمر في العودة بشكل متزامن لكود التطبيق حتى إذا تم تحميل أدوات حل المشكلات غير المتزامنة.
يسمح السلوك المتزامن لـ import.meta.resolve()
بتنفيذ تعليمات برمجية أكثر كفاءة ، خاصة عند التعامل مع كميات كبيرة من البيانات. بصفتك مؤلفًا ، يمكنك تعريف حل الخطافات كوظائف متزامنة أو غير متزامنة ، بناءً على تفضيلاتك. سيستمر تنفيذ كود التطبيق بشكل متزامن بغض النظر عما إذا كان هناك خطافات حل غير متزامنة تم تحميلها أم لا.
التطبيقات التجريبية الفردية القابلة للتنفيذ (SEA)
التطبيقات التجريبية الفردية القابلة للتنفيذ (SEA) هي ميزة جديدة تم تقديمها في Node.js v20 والتي تسمح بتجميع تطبيقك مع Node.js الثنائي ، مما يتيح للمستخدمين النهائيين توزيعه وتشغيله كملف واحد قابل للتنفيذ.
لقد كان هذا طلبًا منذ فترة طويلة من المجتمع ، وكان الفريق يعمل على تحسين النهج على مدار العام الماضي.
في Node.js v20 ، يتطلب إنشاء تطبيق واحد قابل للتنفيذ حقن blob أعده Node.js من تكوين JSON بدلاً من حقن ملف JS الخام.
blob هو ملف يحتوي على بيانات ثنائية ، في هذه الحالة ، يتم إعدادها بواسطة Node.js ، ويتم حقنها في الملف الثنائي. تم إجراء هذا التغيير لتمكين تضمين العديد من الموارد المشتركة الموجودة في التقييم البيئي الاستراتيجي ، مما يفتح حالات استخدام جديدة.
فيما يلي مثال على ملف sea-config.jso n:
{ "main": "myscript.js", "output": "sea-prep.blob" }
عند تنفيذه باستخدام node --experimental-sea-config sea-config.json
، تتم كتابة النقطة في ملف sea-prep.blob ، والذي يمكن بعد ذلك إدخاله في الملف الثنائي.
تتيح ميزة SEA للمطورين توزيع تطبيقات Node.js دون مطالبة المستخدمين بتثبيت Node.js. تم إنشاء الوظيفة بواسطة Darshan Sen ، الذي فاز بالمساهمة البارزة من جائزة New Arrival كجزء من جوائز JavaScriptLandia في OpenJS World.
تقوم Microsoft ، العضو في OpenJS Foundation ، بالتحقيق في هذه الميزة كطريقة لتقليل هجمات المتجهات وتمكين بنية Node.js للحصول على تجربة أفضل. بينما لا تزال ميزة التقييم البيئي الاستراتيجي (SEA) تجريبية ، إلا أنها تمثل تطورًا جديدًا مثيرًا لمجتمع Node.js.
أداء
يأتي Node.js v20 مع تحسينات كبيرة في وقت تشغيله ، مع تركيز متجدد على الأداء من قبل فريق أداء Node.js الذي تم تشكيله حديثًا. تشمل التحسينات تحسينات على الأجزاء الأساسية من وقت التشغيل ، مثل URL و fetch()
و EventTarget
.
أحد التحسينات الملحوظة هو خفض تكلفة تهيئة EventTarget
، والتي تم تخفيضها بمقدار النصف ، مما أدى إلى وصول أسرع إلى جميع الأنظمة الفرعية التي تستخدمها. بالإضافة إلى ذلك ، تم استخدام مكالمات V8 Fast API لتحسين الأداء في واجهات برمجة التطبيقات مثل URL.canParse()
وأجهزة ضبط الوقت.
تغيير محدد آخر هو تضمين الإصدار 2.0 المحدث من Ada ، محلل URL سريع ومتوافق مع المواصفات مكتوب بلغة C ++.
ملخص
في هذه المقالة ، تعلمت بعض الميزات الرئيسية (التجريبية والمستقرة) والتحسينات التي يجلبها Node.js v20 ، مثل التحسينات على محرك V8 JavaScript ، والأداء ، ومشغل الاختبار ، وإدخال نموذج الإذن التجريبي ، وتطبيقات التنفيذ الفردي .
من المهم أن تعرف أن الإصدار 14 من Node.js سينتهي في نهاية العمر في أبريل 2023 ، لذلك يُنصح بالبدء في التخطيط للترقية إلى Node.js v18 (LTS) أو vNode.js 20 (سيصبح قريبًا LTS).
هل ترغب في تجربة أحدث إصدار من Node.js؟ يمكنك القيام بذلك عن طريق نشر تطبيق Node.js الخاص بك على Kinsta والحصول على أول 20 دولارًا لنا. نحن ندعم بالفعل Node.js v20 ، مما يعني أنه يمكنك اختبار ميزاته وإمكانياته الجديدة بدءًا من اليوم.
الان حان دورك! ما الميزات أو التحسينات التي تجدها أكثر إثارة للاهتمام في Node.js v20؟ هل هناك أي أشياء مهمة ربما أغفلناها؟ اسمحوا لنا أن نعرف في التعليقات.