دينو مقابل نود.جي.إس: المواجهة التي لم يطلبها أحد ولكن الجميع بحاجة إليها

حسناً، تخيل هذا: الساعة 11 مساءً، لدي فنجان من القهوة التي somehow باردة وحارقة (مهارة أتقنتها)، وأنا أنحدر في حفرة الأرنب الخاصة بـ JavaScript runtimes. نعم، أعلم، ليلة جمعة مجنونة، أليس كذلك؟ لكن مهلاً، عندما تكون مهندس برمجيات، فإن فكرتك عن “المرح” تتضمن أحياناً مقارنة Deno وNode.js بينما قطتك تحكم عليك من عبر الغرفة.

للحصول على بعض الخلفية حول هذه الفكرة، كنت أتعامل مع Node.js لسنوات الآن. إنه مثل تلك الملابس المهترئة في خزانة ملابسك التي لا يمكنك التخلص منها لأنها لا تزال في حالة عمل (جودة) جيدة. إنه مريح، ومع ذلك، في بعض الأحيان، تفكر في الحصول على أشياء مشابهة تكون عصرية في السوق – النسخ الجديدة والمعدلة، كما تعلم.

نعود إلى الموضوع الرئيسي، يدخل Deno، المنافس العصري الذي يتحدث عنه الجميع. اعتدت على Node.js لسنوات، لذلك من الطبيعي بالنسبة لي أن أستكشف العنصر بعمق وأتحقق بنفسي مما إذا كان يستحق كل هذا الضجيج حوله أو إذا كان لديه وقت تشغيل متساوي أو حتى أفضل. لذا، هل نبدأ في تفكيكه لنفهمه بشكل أفضل؟

الانطباعات الأولى: من يطلق أسماء على هذه الأشياء؟

في أواخر الفترة الزمنية لعقد 2000، عندما كانت التكنولوجيا تشبه إلى حد ما الرضيع، كان Node.js موجودًا في الصناعة منذ عام 2009. بني على محرك V8 لـ Chrome، ساعدنا Node.js بثبات في بناء تطبيقات قابلة للتوسيع. يمكنك أن تفهمها على أنها تلك النسخة من جافا سكريبت، التي تعتمد عليها بشكل كبير وتفضلها الجميع.

في آخر الأخبار، تم إطلاق Deno في عام 2018. ونعم، تم تطويره أيضًا من قبل نفس الشخص، Ryan Dahl، المبتكر الأصلي لـ Node.js الشهير.مفاجأة، أليس كذلك؟ عاد، وأشار إلى كل شيء اعتقد أنه أخطأ فيه مع Node، ثم ذهب قائلاً: “امسك قهوتي. سأصلح الأمر”. ولد Deno مع الأمان والبساطة والميزات الحديثة في صميمه. وإذا كنت تتساءل عن الاسم… صراحة، لا أعرف. ولكن Deno هو كلمة مبعوثة من Node، لذلك هناك ذلك.

الجولة الأولى: الأمان

لنتحدث عن الأمان، لأنه إذا كنت تشبهني بأي شيء، فقد كان لديك لحظة واحدة على الأقل من “أوه لا، لقد كشفت بطريق الخطأ مفتاح API”، (لا نتحدث عن تلك المشروع بعد الآن).

تترك Node.js أمان للمطور، مما يعني أنه من الأفضل أن تعرف طريقك حول ملفات .env والصلاحيات — وإلا. أما Deno، فهو كصديق الذي يعاني من الوسواس القهري الذي نملكه جميعًا ويصر على التحقق المزدوج من الأقفال. على أي حال، يعمل Deno بشكل افتراضي في نطاق رملي محمي لا يسمح لك بالوصول إلى الشبكة، أو نظام الملفات، أو حتى متغيرات البيئة ما لم يتم منح إذن صريح.

إليك مثال:

Node.js

JavaScript

 

Deno

JavaScript

 

ولكن إذا حاولت تشغيل تلك الشفرة Deno بدون أذونات، ستحصل على رسالة خطأ كبيرة:

JavaScript

 

نعم، Deno لا يتلاعب. ستحتاج إلى تمرير العلامات تلك مثل --allow-write بشكل صريح عند تشغيل السكربت. هل هذا مزعج قليلا؟ بالتأكيد. ولكن هل ينقذك من إطلاق الفوضى عن غير قصد؟ بالتأكيد.

الجولة الثانية: الأداء

الآن، لست مدمن سرعة، ولكن عندما يتعلق الأمر بأوقات التشغيل، يُعتبر الأداء أمرًا مهمًا. تريد تطبيقك أن يستجيب بشكل أسرع من أصدقائك عندما تسأل: “من يرغب في البيتزا؟”

كلا من Node.js و Deno يستخدمان محرك V8، لذا هما سريعان. لكن Deno مكتوب بلغة Rust، مما يمنحه ميزة طفيفة من حيث الأداء والموثوقية. ميزات أمان الذاكرة في Rust ونموذج التزامن يجعله وحشًا تحت الغطاء. ومع ذلك، فإن Node.js موجود منذ فترة أطول، و تحسينات أدائه مُختبرة في المعارك.

لقد قمت بتشغيل بعض الاختبارات لأنني، حسنًا، مهووس:

خادم HTTP أساسي في Node.js:

JavaScript

 

خادم HTTP أساسي في Deno:

JavaScript

 

النتائج؟ كان Deno أسرع قليلاً في معالجة الطلبات، لكننا نتحدث عن ميلي ثانية هنا. بالنسبة لمعظم التطبيقات في العالم الحقيقي، لن يكون الفرق مُغيرًا للعبة – إلا إذا كنت تحاول بناء تويتر القادم (أو X؟ هل هذا ما نسميه الآن؟).

الجولة 3: تجربة المطور

حسنًا، هذه النقطة أثرت فيّ بشدة. إذا كنت تستخدم Node.js، فأنت تعرف أن npm هو شريان حياة مشروعك. هذه هي الطريقة التي تثبت بها الحزم، وتدير التبعيات، وأحيانًا تصرخ في شاشتك عندما تنمو node_modules إلى 2 جيجابايت.

قال Deno، “لا، نحن لا نستخدم npm هنا.” بدلاً من ذلك، يستخدم نظام وحدات لامركزي. تستورد الوحدات مباشرة عبر عناوين URL، مثل هذا:

JavaScript

 

في البداية، كنت مثل، “انتظر، ماذا؟” لكن بعد ذلك أدركت مدى روعة ذلك. لا مزيد من مجلدات node_modules الضخمة! لا مزيد من القلق بشأن عدم تطابق إصدارات الحزم! فقط استيرادات نظيفة ومباشرة. ومع ذلك، سأعترف بذلك: أفتقد راحة npm وتنوع الحزم التي يقدمها. العادات القديمة تصعب التخلص منها.

مقارنة سريعة

إليك مقارنة سريعة لإظهار كيف تختلف Deno و Node.js في الصياغة والأسلوب:

قراءة ملف

Node.js:

JavaScript

 

Deno:

JavaScript

 

عمل طلب HTTP

Node.js (باستخدام axios):

JavaScript

 

Deno (Fetch مدمج):

JavaScript

 

إذن، ما الذي ينبغي أن تختاره؟

دعنا نأخذ الوقت لتحليل المزيد. لذا، افترض أنك غارق في العمل على مشاريع Node.js، فكر في أولوياتك؛ لا حاجة لتغيير السفن إذا كان كل شيء يعمل بشكل جيد. Node.js ناضجة الآن ولديها نظام بيئي واسع، ويمكنها إنجاز جميع المهام. ومع ذلك، إذا كنت ترغب في البدء من جديد أو بناء شيء يركز على جوانب الأمان، فإن Deno تستحق الاعتبار. إنها مثل ابن عم Node الأكثر برودة وحداثة الذي يستمع إلى فرق الإندي قبل أن تصبح مشهورة.

بالنسبة لي؟ سأستمر على الأرجح في اللعب مع كلاهما. تشعر Node.js وكأنها منزلي في هذه المرحلة، لكن Deno لديها جاذبية اللعبة الجديدة اللامعة. وما هو أكثر من ذلك، أنني جذبت فعليًا إلى مفهوم كتابة كود يضمن مستقبلًا أكثر أمانًا.

بعد كل هذا الفوضى في ذهني، أحتاج الآن لتنظيف شاشتي حيث أنها محتلة حاليًا بنسبة تقريبية 90٪ بصور لنوافذ الأخطاء ومقاطع شفرة عشوائية. حالة كلاسيكية، أليس كذلك؟

دورك!

هل جربت Deno بعد، أم أنك تفضل البقاء على Node.js؟ شاركنا أفكارك أدناه – أنا دائمًا مستعد لنقاش تقني جيد (نقاط إضافية إذا تضمنت ميمز).

Source:
https://dzone.com/articles/deno-vs-nodejs-the-showdown-nobody-asked-for