ما هو دينو وهل سيحل محل Node.js؟



يوم جيد. أقدم لكم ترجمة المقال "دينو ضد. Node.js - فيما يلي أهم الاختلافات " بقلم لويس بيتريك.

هل دينو هو Node.js الجديد؟ أو مجرد بديل جيد؟ في هذه المقالة سأحاول الإجابة على هذه الأسئلة.

تاريخ دينو


Deno و Node.js هي أعمال شخص واحد - Ryan Dahl.

يعمل دال على Node.js منذ عام 2009 ، ولكن بعد بضع سنوات ترك الفريق. في عام 2018 ، قدم عرضًا تقديميًا ، "10 أشياء نأسف لها حول Node.js." في هذا الحديث ، قدم داهل Deno - "محرك" جديد لـ JavaScript و TypeScript.

حقيقة ممتعة: "Deno" عبارة عن رسم توضيحي لـ "Node".

هل يجب أن يخشى المطورون من أن Deno سيحل محل Node.js في المستقبل القريب؟

دال نفسه يعتقد لا.



رابط الفيديو.

كما يلاحظ دال في خطابه ، لا يزال دينو أدنى من Node.js في الاكتمال (الاستقرار).

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

Deno و Node.js: جهاز داخلي


Node.js مكتوب بلغة C ++ ويستخدم V8 لتنفيذ كود JS. تم تصميم V8 خصيصًا لـ Google Chrome لتشغيل كود JS في المتصفح في أسرع وقت ممكن. حاليًا ، تحولت جميع المتصفحات تقريبًا ، بما في ذلك Microsoft Edge ، إلى V8.

يعتمد Deno أيضًا على V8 ، ولكن بدلاً من C ++ ، يستخدم Rust ، وهي لغة هدفها ليس فقط الأداء الجيد ليس أقل من C ++ ، ولكن أيضًا الأمان: التخلص من أخطاء الوصول إلى الذاكرة أو تجاوزات المخزن المؤقت.

الأمان هو أحد العوائق الرئيسية لـ Node.js ، لأنه بعد تشغيل التطبيق ، يمكنه الوصول إلى نظام الملفات أو الشبكة.

يحاول Deno إصلاح ذلك عن طريق طلب إذن من المستخدم للوصول.

مثال جيد هو كود TS التالي من موقع Deno الرسمي:

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

const s = serve({ port: 8000 })

for await (const req of s) {
	req.respond({ body: 'Hello World\n'})
}

كما ترى ، هذا خادم ويب بسيط للغاية يبدأ على هذا النحو:

deno run app.ts

ومع ذلك ، نظرًا لعدم منح إذن Deno للوصول إلى الشبكة ، نحصل على الرسالة التالية:



لتوفير الوصول ، نحتاج إلى القيام بما يلي:

deno run --allow-net app.ts

الآن خادمنا يعمل. لكن التطبيق لن يتمكن من الوصول إلى نظام الملفات حتى نسمح بذلك.

وداعا NPM ، مرحبا استيراد ES6


مشكلة أمان أخرى لتطبيقاتنا هي NPM: لا يؤدي استخدام NPM فقط إلى إنشاء مجلد "node_modules" ضخم ، ولكن أيضًا الحزم المثبتة التي تجعل عمل التطبيق يمكن أن تحتوي نظريًا على تعليمات برمجية ضارة.

لا يستخدم Deno NPM ، بدلاً من ذلك ، يتم استيراد المكتبات عبر URL ، كما هو موضح في المثال.

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

يتم تحميل المكتبة عند التشغيل لأول مرة



وتخزينها مؤقتًا: يشبه هذا كيفية نسخ الرمز لخادم الويب وتخزينه بشكل منفصل على الخادم أو الكمبيوتر لإعادة استخدامه. لا تحتاج المكتبات إلى إعادة التحميل.

كائن نافذة خارج المستعرض


Window عبارة عن كائن عام في المتصفح يحتوي على بعض وظائف JS المهمة جدًا.

إحدى هذه الميزات هي الجلب. لا يمكن استخدام Fecth في Node.js - هناك مكتبات خاصة لهذا ، ولكن في Deno يمكن ذلك.

هذا يرجع إلى حقيقة أن Deno لديه حق الوصول إلى Window ، على النحو التالي من الوثائق .

يمكن تشغيل الكود التالي في كل من المتصفح ودينو:

fetch('https://jsonplaceholder.typicode.com/todos/1')
	.then(response => response.json)
	.then(data => console.log(data))

دعم TypeScript خارج منطقة الجزاء


إن استخدام TypeScript ، بالطبع ، مسألة ذوق. البعض يحب ذلك ، والبعض الآخر لا. مع ذلك ، يدعم Deno TypeScript خارج الصندوق ، وبالطبع ، يدعم أيضًا JavaScript.

يمكنك التحقق من ذلك عن طريق كتابة التعليمات البرمجية وحفظ الملف بتنسيق .ts أو .js وتشغيله باستخدام deno run. في رأيي ، هذه ليست ميزة كبيرة ، حيث يمكن بسهولة إضافة دعم TypeScript إلى Node.js.

شكرآ لك على أهتمامك.

All Articles