تعلم Deno وتجاوز Node.js
نشرت: 2023-04-20على الرغم من أن Node.js لا يزال هو وقت تشغيل JavaScript من جانب الخادم الأكثر استخدامًا بهامش ضخم ، إلا أن أوقات التشغيل البديلة مثل Deno و Bun قد جذبت الانتباه أثناء محاولتها تحسين مفهوم Node.js.
Deno ، وهو الأكثر شيوعًا بين فترتي التشغيل الأحدث ، يعالج بعض مشكلات الأمان المتأصلة في Node.js ويوفر دعمًا أكثر شمولاً لتقنيات مثل TypeScript و WebAssembly.
في هذه المقالة ، ستستكشف أساسيات Deno ، وتتعلم كيفية مقارنتها بـ Node.js و Bun ، وتتبع عرضًا عمليًا يستخدم Deno لإنشاء خادم ويب HTTP بسيط.
ما هو دينو؟
نظرًا لأن المطورين أصبحوا على دراية بـ JavaScript ، فقد رأوا إمكاناتها للبرمجة على الأجهزة المحلية. لذلك ، أنشأوا أوقات تشغيل من جانب الخادم - بيئات تمكن من تنفيذ تعليمات JavaScript البرمجية على الأجهزة دون استخدام متصفح.
طور Ryan Dahl Node.js لهذا الغرض ، ثم أنشأ لاحقًا Deno لمعالجة بعض المشكلات التي واجهها مع تصميم Node.js الأصلي. تتضمن بعض العيوب البارزة اعتماده على مدير حزم مركزي مثل npm ، وعدم وجود مكتبة قياسية ، وإعدادات أمان افتراضية متراخية.
تتضمن بعض المزايا الرئيسية لدينو ما يلي:
- S ecurity افتراضيًا - يجب على المستخدم إعطاء إذن صريح للكود للوصول إلى الشبكة أو نظام الملفات أو البيئة.
- دعم مضمن لـ TypeScript و WebAssembly - يعد تشغيل برامج TypeScript و WebAssembly في Deno بنفس سهولة تشغيل برامج JavaScript. يقوم وقت التشغيل بتجميع اللغات تمامًا كما يفعل مع JavaScript.
- مدير حزم مركزي - بدلاً من الاعتماد على مستودع حزم مثل npm أو مدير حزم Bun ، يمكن لـ Deno استيراد الكود مباشرةً من عناوين URL. تعني هذه الإمكانية أنه يمكنك تحميل التبعيات من أي مكان تستضيفه ، بما في ذلك مستودع GitHub أو الخادم أو CDN. تقدم Deno أيضًا خدمة استضافة نصوص لتسهيل الوصول إليها.
- الامتثال لمعايير الويب - يهدف Deno إلى اتباع نفس واجهات برمجة التطبيقات كما تفعل المتصفحات ، مما يعني أن الشفرة المكتوبة للمتصفحات يمكن ترجمتها بسهولة إلى وقت التشغيل.
تبنت الشركات الكبيرة واللاعبون الرئيسيون في الصناعة مثل Slack و Netlify و Supabase Deno ، لكن اعتمادها بين مطوري الويب كان أقل انتشارًا. وفقًا لاستطلاع Stack Overflow لعام 2022 ، فإن 1.47٪ فقط من المطورين المحترفين الذين أجابوا على الاستطلاع كانوا يستخدمون Deno ، بينما أفاد 46.31٪ باستخدام Node.js.
ماذا تفعل دينو؟
مثل أي وقت تشغيل JavaScript ، يتيح Deno للمطورين تشغيل JavaScript على جانب الخادم. نتيجة لذلك ، يمكنك استخدام Deno لإنجاز مجموعة متنوعة من مهام البرمجة.
يتفوق Deno في معظم المهام مثل تطوير تطبيقات الخادم التي تستجيب لطلبات المستخدم المستندة إلى الويب. على سبيل المثال ، إذا كنت تنشئ متجرًا لبيع الكتب عبر الإنترنت ، فيمكنك استخدام Deno لإنشاء تطبيق يأخذ المعلومات من قاعدة بيانات PostgreSQL ، ويبني الصفحة التي يريد المستخدم عرضها ، ويرسلها إلى المتصفح لعرضها.
يمكنك أيضًا استخدام Deno لمهام البرمجة ذات المستوى الأدنى مثل إنشاء أداة سطر أوامر لإدارة مهام المهام عبر الجهاز. بمعنى آخر ، يمكنك استخدام Deno لتحقيق نفس الأهداف التي ستحققها باستخدام لغات مثل Python أو Ruby.
دينو مقابل عقدة
تهدف Deno إلى أن تكون تحسينًا على Node.js ، وهي تفي بهذا الوعد في العديد من المجالات الرئيسية. يعمل Deno على تحسين الأمان من خلال تمكين تكوينات الوصول الدقيقة لوحدات التعليمات البرمجية المختلفة. كما أنه يركز على الامتثال لواجهة برمجة التطبيقات (API) المعيارية للويب ، والتي تمكن المطورين من استخدام نفس الكود على جانبي المتصفح والخادم.
بالنسبة للفرق التي تعمل على مشاريع JavaScript من جانب الخادم ، أصبح Deno بديلاً قابلاً للتطبيق لـ Node. وعلى الرغم من أن وظائفهم المماثلة قد أقنعت بعض المطورين بأن Deno يمكن أن يحل محل Node.js ، فإن هذا الاحتمال غير مرجح لعدة أسباب رئيسية.
Node.js هو أكثر وقت تشغيل JavaScript شيوعًا وقد جمع نظامًا بيئيًا واسعًا من الحزم المكتوبة مسبقًا ومجتمع مستخدم كبير ونشط. تساعد هذه الموارد التي لا تقدر بثمن على بقاء Node.js وقت تشغيل جذاب للغاية.
في المقابل ، يعد Deno جديدًا: تم إصدار الإصدار 1.0 في مايو 2020 ، لذلك كان لدى عدد قليل نسبيًا من المطورين الوقت للعب معه. تعلم أداة جديدة يطيل الجداول الزمنية للتطوير. بالإضافة إلى ذلك ، ليس من الواضح ما إذا كان Deno سيحقق فوائد كبيرة للعديد من المشاريع البسيطة.
ولكن إذا كنت تبني تطبيقًا في منطقة يكون فيها الأمان ضروريًا ، مثل التمويل ، فقد تجعل إمكانات Deno الأمنية التبديل جديرًا بالاهتمام.
دينو مقابل بون
أصدر مهندس Stripe السابق جاريد سومنر Bun لأول مرة في يوليو من عام 2022 لاختبار بيتا. يعتبر Bun وقت تشغيل تجريبيًا أكثر من Deno ، وعلى عكس Deno ، تم تصميمه ليكون له توافق مع الإصدارات السابقة مع Node.js.
تفتخر Bun أيضًا بأداء سريع مذهل ، متجاوزًا Node.js و Deno. تعمل الميزات الرئيسية على تمكين هذه الإمكانات:
- محرك أفضل - بدلاً من محرك V8 JavaScript ومحرك Web Assembly من Google ، يستخدم Bun JavaScriptCore الأسرع والأكثر كفاءة كمحرك JavaScript الأساسي.
- المزيد من التحكم في التعليمات البرمجية - تتم كتابة Bun بلغة Zig ، وهي لغة منخفضة المستوى توفر تحكمًا أكبر من JavaScript في تنفيذ التعليمات البرمجية.
- كفاءة مضبوطة بدقة - أعطى الفريق الذي يعمل على Bun تحديد أولويات التنميط وقياس الأداء والتحسين أثناء التطوير لضمان كفاءة الكود.
يعد Bun جديدًا جدًا ولا يوجد سوى القليل نسبيًا من دعم المجتمع للمساعدة في استكشاف الأخطاء وإصلاحها. ومع ذلك ، يمكن أن يكون بون ممتعًا للتجربة. قد تجد الفرق التي تتطلب تعزيزًا للأداء بشكل خاص أن Bun مفيدة لمشاريعها ، لكن تطوير الويب يعطي الأولوية في كثير من الأحيان لعوامل أخرى غير الأداء.
الشروع في العمل مع Deno
الآن بعد أن تعلمت القليل عن Deno وكيفية مقارنته بأوقات تشغيل JavaScript الشائعة الأخرى ، فقد حان الوقت لمعرفة كيفية عمله. في هذا القسم ، ستتعلم كيفية إنشاء خادم بسيط في Deno يستجيب لطلبات HTTP بعبارة "مرحبًا من الخادم!"
تثبيت دينو
يمكنك تثبيت Deno على جهاز كملف ثنائي قابل للتنفيذ باستخدام إرشادات التثبيت هذه من الوثائق الرسمية. على نظام macOS ، على سبيل المثال ، يمكنك تثبيت Deno باستخدام الأمر brew install deno
.
هناك طريقة أخرى لبدء العمل مع Deno وهي تثبيته كحزمة npm ، مثل هذا:
قم بإنشاء مجلد لمشروعك (ربما deno_example ) وقم بتشغيل الأمر npm init
داخله. (يمكنك قبول جميع الخيارات الافتراضية المقترحة من قبل init
لأنها تنشئ ملف package.json أساسي.)
بعد تهيئة التطبيق الخاص بك ، قم بتشغيل npm install deno-bin
لتثبيت حزمة Deno الثنائية. يمكنك الآن تحديث ملف package.json لتمكين بدء تشغيل التطبيق باستخدام npm start
. أضف السطر الغامق أدناه إلى خاصية الكائن "scripts" في ملف package.json الافتراضي:
"scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },
تمكّن إضافة البرنامج النصي Deno من تشغيل وحدة app.ts بامتيازات الشبكة ( --allow-net
). تذكر ، عند العمل مع Deno ، تحتاج إلى السماح صراحة بالوصول إلى شبكة أو نظام ملفات.
أنت الآن جاهز لإنشاء وحدة app.ts ، المسؤولة عن الاستماع على المنفذ وخدمة طلبات المستخدم.
إنشاء وحدة App.ts
يعد إنشاء خادم أساسي في Deno أمرًا بسيطًا للغاية. أولاً ، قم بإنشاء ملف app.ts والصقه في الكود التالي:
import { serve } from "https://deno.land/[email protected]/http/server.ts"; serve((_req) => new Response("Hello from the server!"), { port: 8000 });
يستخدم الكود وظيفة serve
من server.ts Deno library
المخزنة على موقع Deno.land الرسمي. يوفر هذا الرمز أيضًا معالج وظيفة serve
للطلبات الواردة. تستجيب وظيفة المعالج لكل طلب بعبارة "مرحبًا من الخادم!"
تأخذ وظيفة serve
أيضًا معلمات اختيارية ، مثل رقم المنفذ الذي تريد العمل عليه. هنا ، يستخدم مثال الكود هذه المعلمات للعمل على المنفذ 8000.
بعد ذلك ، ابدأ الخادم عن طريق تشغيل npm start
. يجب أن يبدأ هذا الخادم الذي يستمع إلى localhost:8000
ويستجيب للطلبات بتحية.
إذا كنت ترغب في توسيع الخادم إلى واجهة برمجة تطبيقات كاملة النضج ، فربما تحتاج إلى إضافة اتصال قاعدة البيانات. من السهل القيام بذلك نظرًا لأن مجتمع Deno قد أنشأ برامج تشغيل تدعم قواعد البيانات الشائعة مثل MariaDB / MySQL و PostgreSQL و MongoDB والمزيد.
ملخص
تتراوح أوقات التشغيل من عام ويمكن الاعتماد عليه إلى وقت تجريبي للغاية. يعتمد اختيار الخيار المناسب لمشروعك على مشروعك وكيف تريد أن يساعدك وقت التشغيل في تحقيق أهدافك.
يعمل Node.js بشكل جيد مع معظم المشاريع. لديها نظام بيئي كبير ومجتمع كبير يمكنه المساعدة في مجموعة واسعة من سيناريوهات استكشاف الأخطاء وإصلاحها.
يتمتع Deno بميزة الأمان الإضافي وتجربة مطور أفضل. في الوقت نفسه ، هو الأنسب للفرق ذات الخبرة بحيث تفوق فوائده الوقت وتكاليف العمالة لتعلم وقت تشغيل غير مألوف.
أخيرًا ، بينما يعتبر Bun تجريبيًا للغاية بالنسبة لمعظم المشاريع الاحترافية ، إلا أنه وقت تشغيل فريد وممتع لالتقاط مشروع شخصي أو توسيعه.
بشكل عام ، يوفر Deno التوازن بين فوائد Node.js والإمكانيات التجريبية لـ Bun. في حين أن Node.js هو خيار صالح للخدمة لمعظم المشاريع ، فقد يكون Deno في طليعة كيفية تطور تطوير الويب في المستقبل.
في هذه الأثناء ، تدرب على شرائح Deno الخاصة بك من خلال الاشتراك في طبقة هواية استضافة التطبيقات من Kinsta - الترميز الآن والتوسع لاحقًا.