يقدم المؤلف Node.js Secure JavaScript Platform Deno 1.0

بعد عامين من التطوير المقدمة أول إصدار رئيسي Deno 1.0 تحديث، منصة للتنفيذ المستقل للتطبيقات في JavaScript وTypeScript، والتي يمكن استخدامها لإنشاء معالجات تعمل على الخادم. تم تطوير المنصة بواسطة ريان دال (ريان دال)، منشئ Node.js. مثل Node.js، يستخدم Deno محرك JavaScript V8، والذي يُستخدم أيضًا في المتصفحات المستندة إلى Chromium. وفي الوقت نفسه، فإن Deno ليس شوكة لـ Node.js، ولكنه مشروع جديد تم إنشاؤه من الصفر. رمز المشروع وزعت من خلال بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. الجمعيات معد لأنظمة Linux و Windows و macOS.

يرتبط رقم الإصدار المهم بتثبيت واجهات برمجة التطبيقات في مساحة اسم Deno، المسؤولة عن تفاعل التطبيقات مع نظام التشغيل. واجهات البرامج التي لديها حتى الآن غير مستقر، تكون مخفية افتراضيًا ولا تتوفر إلا عند التشغيل في الوضع "--غير المستقر". ومع ظهور إصدارات جديدة، ستصبح واجهات برمجة التطبيقات هذه مستقرة تدريجيًا. تعد واجهة برمجة التطبيقات (API) في مساحة الاسم العالمية، والتي تتضمن وظائف شائعة مثل setTimeout() وfetch()، قريبة قدر الإمكان من واجهة برمجة التطبيقات (API) لمتصفحات الويب التقليدية ويتم تطويرها وفقًا لمعايير الويب للمتصفحات. واجهات برمجة التطبيقات التي توفرها Rust، والتي يتم استخدامها مباشرة في كود النظام الأساسي، بالإضافة إلى واجهة تطوير المكونات الإضافية لوقت تشغيل Deno، لم يتم استقرارها بعد وتستمر في التطوير.

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

رئيسي ملامح دينو:

  • ركز على الأمان في التكوين الافتراضي. يتم حظر الوصول إلى الملفات والشبكات والوصول المتغير للبيئة افتراضيًا ويجب تمكينه بشكل صريح. تعمل التطبيقات في بيئات آلية تحديد الوصول افتراضيًا ولا يمكنها الوصول إلى إمكانات النظام بدون أذونات صريحة ؛
  • دعم مدمج لـ TypeScript خارج JavaScript. يتم استخدام برنامج التحويل البرمجي القياسي لـ TypeScript للتحقق من الأنواع وإنشاء JavaScript، مما يؤدي إلى تحقيق أداء أفضل مقارنة بتحليل JavaScript في V8. في المستقبل، نخطط لإعداد تطبيقنا الخاص لنظام التحقق من نوع TypeScript، والذي سيؤدي إلى تحسين أداء معالجة TypeScript بأمر من حيث الحجم؛
  • يأتي وقت التشغيل في شكل ملف واحد قابل للتنفيذ قائم بذاته ("deno"). يكفي تشغيل التطبيقات باستخدام Deno تحميل يوجد لمنصته ملف واحد قابل للتنفيذ، يبلغ حجمه حوالي 20 ميجابايت، ولا يحتوي على تبعيات خارجية ولا يتطلب أي تثبيت خاص على النظام. علاوة على ذلك، فإن deno ليس تطبيقًا متجانسًا، ولكنه عبارة عن مجموعة من حزم الصناديق في Rust (deno_core, Rusty_v8)، والتي يمكن استخدامها بشكل منفصل؛
  • عند بدء تشغيل البرنامج ، وكذلك لوحدات التحميل ، يمكن استخدام العنونة عبر URL. على سبيل المثال ، لتشغيل برنامج welcome.js ، يمكنك استخدام الأمر "deno https://deno.land/std/examples/welcome.js". يتم تنزيل التعليمات البرمجية من الموارد الخارجية وتخزينها مؤقتًا على النظام المحلي ، ولكن لا يتم تحديثها تلقائيًا أبدًا (يتطلب التحديث تشغيل التطبيق بشكل صريح بعلامة "--Reload") ؛
  • معالجة فعالة في تطبيقات طلبات الشبكة عبر HTTP ، تم تصميم النظام الأساسي لإنشاء تطبيقات شبكة عالية الأداء ؛
  • القدرة على إنشاء تطبيقات ويب عالمية يمكن تشغيلها في كل من Deno ومتصفح الويب العادي ؛
  • توفر مجموعة قياسية من الوحدات، والذي لا يتطلب استخدامه الارتباط بالتبعيات الخارجية. خضعت الوحدات من المجموعة القياسية إلى اختبارات تدقيق وتوافق إضافية؛
  • بالإضافة إلى وقت التشغيل، تعمل منصة Deno أيضًا كمدير للحزم وتسمح لك بالوصول إلى الوحدات عن طريق عنوان URL داخل التعليمات البرمجية. على سبيل المثال، لتحميل وحدة نمطية، يمكنك التحديد في الكود "استيراد * كسجل من "https://deno.land/std/log/mod.ts". يتم تخزين الملفات التي تم تنزيلها من خوادم خارجية عبر عنوان URL مؤقتًا. يتم تحديد الارتباط بإصدارات الوحدة عن طريق تحديد أرقام الإصدارات داخل عنوان URL، على سبيل المثال، "https://unpkg.com/"[البريد الإلكتروني محمي]/dist/liltest.js "؛
  • تتضمن الحزمة نظامًا متكاملًا لفحص التبعية (أمر "deno info") وأداة مساعدة لتنسيق الكود (deno fmt) ؛
  • يمكن دمج جميع البرامج النصية للتطبيق في ملف JavaScript واحد.

الاختلافات عن Node.js:

  • لا يستخدم Deno مدير الحزم npm
    وغير مرتبطة بالمستودعات، ويتم التعامل مع الوحدات عبر عنوان URL أو عن طريق مسار ملف، ويمكن وضع الوحدات نفسها على أي موقع ويب؛
  • لا يستخدم Deno "package.json" لتعريف الوحدات؛
  • اختلاف واجهة برمجة التطبيقات (API)، جميع الإجراءات غير المتزامنة في Deno تُرجع وعدًا؛
  • يتطلب Deno تعريفًا واضحًا لجميع الأذونات اللازمة للملفات والشبكة ومتغيرات البيئة؛
  • جميع الأخطاء التي لم يتم توفيرها مع المعالجات تؤدي إلى إنهاء التطبيق؛
  • يستخدم Deno نظام وحدة ECMAScript ولا يدعم require();
  • خادم Deno المدمج مكتوب بلغة TypeScript ويعمل فوق مقابس TCP الأصلية، بينما خادم Node.js HTTP مكتوب بلغة C ويوفر روابط لـ JavaScript. ركز مطورو Deno على تحسين طبقة مقبس TCP بأكملها وتوفير واجهة أكثر عمومية. يوفر Deno HTTP Server إنتاجية أقل ولكنه يضمن زمن وصول منخفض يمكن التنبؤ به. على سبيل المثال، في الاختبار، تمكن تطبيق بسيط يعتمد على خادم Deno HTTP من معالجة 25 ألف طلب في الثانية مع زمن وصول أقصى يبلغ 1.3 مللي ثانية. في Node.js، قام تطبيق مماثل بمعالجة 34 ألف طلب في الثانية، لكن زمن الاستجابة تراوح بين 2 و300 مللي ثانية.
  • Deno غير متوافق مع حزم Node.js (NPM)، ولكن يتم تطويره بشكل منفصل البينية من أجل التوافق مع مكتبة Node.js القياسية، أثناء تطورها، سيكون المزيد والمزيد من التطبيقات المكتوبة لـ Node.js قادرة على التشغيل في Deno.
  • المصدر: opennet.ru

إضافة تعليق