Neutralinojs - ما أنت؟ أو طريقة UNIX حيث لم تنتظر

في الآونة الأخيرة ، تعثرت بطريق الخطأ على ملاحظة إعلانية بسيطة "Neutralinojs - بديل للإلكترون الذي يستهلك ذاكرة أقل" ، والتي تخبرنا أن هناك شيء رائع مثل Neutralinojs. المذكرة ، كما ينبغي أن تكون ، قصيرة جدًا ولا تحتوي على أي معلومات مفيدة ، باستثناء شعار الإعلان "أفضل من <شيء شائع>!"


فهمًا تقريبًا لكيفية عمل Electron و NW.js وعدم العثور على أي إشارة إلى مبدأ تشغيل هذا "الوحش المعجزة" الجديد والرائع في المقالة ، بدأت البحث.


في الواقع ، أقدم لكم نتائج بحثي الصغير!



بما أنني أعتبر أي تقنية جديدة أداة ممكنة ، فقد طرحت على الفور العديد من الأسئلة:


  • لماذا يأكل عدة مرات ذاكرة أقل؟
  • ما الكعك الأخرى أنها لا تعطي؟
  • لماذا يجب علي استخدام هذه المعجزة؟

لماذا لا نأكل الذاكرة؟


من خلال البحث عن الكود المصدري وصورتين إعلاميتين إلى حد ما عن الهندسة المعمارية ، أدركت أن هذا المشروع يعمل على وجه التحديد على طريقة UNIX ، التي يحبها جميع Linuxoids. فلسفة المشروع بسيطة: لماذا توصل إلى دراجة جديدة إذا كنت تستطيع استخدام واحدة جاهزة؟


ما هي سلبيات الإلكترون:


  • سحب كروم
  • تحمل Node.js
  • احمل طبقة معك حتى يعمل الاثنان السابقان معًا

بدلاً من ذلك ، يتم كل شيء مثل هذا:


  • نحن لا نقوم بسحب Chrome
  • نحن لا نقوم بسحب Node.js
  • نقوم بسحب طبقة فقط بين بعض المتصفح وبعض أنظمة التشغيل

دعونا نرى كيف يتم تنفيذ هذا بالضبط.


العمارة



يتكون المشروع بأكمله من جزأين: الخادم والعميل.


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


بالنسبة لكل نظام تشغيل ، تم توصيف خادم C ++ الخاص به وتعديله باستخدام ملف. تحت نظام Mac ، لم يجدوا شيئًا ما حتى الآن ، لذلك لا يوجد دعم.


يمكن أن يكون هناك 3 أنواع من العملاء :


  • cloud - يمكن لأي برنامج يعرف المنفذ الذي يعمل عليه الخادم تنفيذ الأوامر
  • browser - يبدأ الخادم نفسه عملية مستعرض النظام القياسي بعنوان URL المطلوب. هنا يتطلب الخادم بالفعل رمزًا مميزًا ، يتم إدراجه في صفحات HTML المقدمة.
  • window - يبدأ الخادم في عملية تقديم خاصة تعرض ببساطة WebView النظام. هنا تحتاج أيضا إلى رمز

تجدر الإشارة إلى أن الخادم يمكن أن يعمل في وقت واحد مع نوع واحد فقط من العملاء ، ويجب عليك تحديد نوع العميل في التكوين باستخدام حقل mode .


كما ترون ، لا شيء أكثر من ذلك. يتكون التطبيق على هذا "الإطار" نفسه من أكواد المصدر ، التي يستلمها العميل على أنها ثابتة ، والخادم نفسه ، الذي يمكنه ضبط المتصفح أو WebView على عنوان URL الضروري. هذا ما يعني DRY صحيح!


أي نوع من الكعك؟


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


في الواقع من الايجابيات ، هذا كل شيء ، الآن دعنا ننتقل إلى السلبيات.


أريد أن أبدي تحفظًا على الفور بأن المشروع صغير جدًا ، ويعيش أكثر من 5 أشهر بقليل ، ولكنه يحمل بالفعل بفخر الإصدار 1.1.0 ، لذلك أعتقد أن لدي الحق في تقييم المنتج على أنه جاهز وتقديمه بنفس المتطلبات مثل منافسيه.

القروح NW.js


هنا لدينا على الفور مروحة من المشاكل التي هاجرت بلطف من NW.js.


الشيء الأول والأكثر شهرة بالنسبة للمستخدم هو تسليم التطبيق. حتى يتمكن العميل من إطلاق برنامجنا على جهاز الكمبيوتر الخاص به ، فإنه يحتاج إلى أمرين neutralino.exe : neutralino.exe app/ المجلد. داخل المجلد ، يتم تخزين جميع الإعدادات (مثل وضع تشغيل الخادم وعنوان النافذة) index.html بالفعل ، والذي يتم تقديمه للعميل. أسهل طريقة هي منح المستخدم أرشيف مضغوط وإخبار البرنامج الذي سيختبئ به ، لكن المستخدمين سيجدون ما يجب عليهم فعله بطريقة مختلفة عن التعليمات وما يجب كسره.


لحل هذه المشكلة ، أنشأت NW بانيًا كان قادرًا على حزم كل شيء في إكس ، جنبًا إلى جنب مع ICO والمحفوظات. كانت محفوظات SFX حلاً أقل وضوحًا ، لكن مكافحة الفيروسات تنظر إليها بشكل كبير ، لذلك ليس خيارًا جيدًا أيضًا. يخطط المطورون أنفسهم لصنع باكر خاص بهم ، ولكن حتى الآن لا توجد سوى شائعات حول هذا الموضوع.


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


نوع من المتصفح


ما زال أسوأ من NW.js أو Electron. إذا علمنا في الإصدار الأخير بالتأكيد إصدار المتصفح الذي سيعرضه تطبيقنا ، فعندئذٍ ، من حيث المبدأ ، لا يمكننا أن نتأكد من أن نظام التشغيل سوف يزودنا بعرض ويب يمكنه العمل مع JS. وهذا يعني أننا نعود إلى أصفار محطمة ونكون أذكياء بكل الطرق الممكنة للوصول إلى IE 8 ، والتي ستكون WebView القياسية على Windows.


هذا يحد من تطبيقنا من حيث عرض وتشغيل نوع من ملفات الوسائط ، وهذه هي الوظيفة الرئيسية للتطبيقات التي تم تطويرها وفقًا لمبدأ "الويب لسطح المكتب".


API


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


الشخص الوحيد الذي يمكنه التواصل مع النظام هو خادم Neutralino ، ثم يجب علينا التواصل معه بطريقة أو بأخرى. قناة اتصال أحادية الاتجاه - HTTP. في الواقع ، كل ما يُسمح لنا باستخدامه في JS هو مجرد التفاف حول خادم REST API.


يمكن تقسيم واجهة برمجة التطبيقات (API) بأكملها إلى 3 أجزاء: العمل مع التخزين ، والعمل الأساسي للغاية مع خدمة FS (قراءة وحذف وإنشاء فقط - بدون زخرفة) واستدعاء نوافذ وأوامر النظام.


الآن ، دعنا ننتقل إلى تصميم واجهة برمجة التطبيقات التي يمكن الوصول إليها من JS.


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


على حساب النتائج: بالنسبة لمعظم الأوامر ، على سبيل المثال ، العمل مع نظام التشغيل ، يتم نقل كائن يحتوي على حقل stdout ، داخل السلسلة ، إلى رد الاتصال. كما فهمت بالفعل ، ستفشل قراءة الملفات الكبيرة والمزيد من معالجتها في كائن يشبه المخزن المؤقت. نوافذ النظام لها نتيجة في تنسيق مختلف ، يتم استخدام كائن مع حقل file هناك. يبقى السؤال "لماذا ، من حيث المبدأ ، الكائنات مع حقل واحد" دون إجابة.


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


حسنًا ، دعنا نتحدث قليلاً عن التكامل مع نظام التشغيل. أذكر أن Electron وحتى NW ​​عرضتا الفرصة لإنشاء قائمة السياق الخاصة بهم ، والسماح لإخفاء النافذة وحتى إنشاء أيقونة في الدرج. هذا ليس فقط هناك. وبالنظر إلى بنية الحل ، فإنها لن تفعل ذلك. متصفح فقط و REST API فقط ، المتشددين فقط.


ما يمكنني استخدامها ل؟


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


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


الخاتمة


الإطار هو في الواقع الخام للغاية. قد يكون الحد الأدنى هو النقطة القوية ، ولكن بمجرد أن تكون الميزات المطلوبة تتجاوز نطاق واجهة برمجة التطبيقات ، سيتعين عليك التبديل إلى إما Electron أو NW.js.


آمل حقًا ألا تكون v1.1.0 هي الأخيرة ، وأن يقوم المطورون بإعادة العديد من العيوب في تصميم واجهة برمجة التطبيقات الخاصة بهم وتوفير خيارات أكثر مرونة لتخصيص التطبيق وتصرفاته. آمل أيضًا أن يظلوا يجدون خادمًا ثابتًا على الإيجابيات التي يمكن تفرعها واستخدامها على جهاز Mac.


حسنًا ، المراجع ، لجعلها أكثر وضوحًا:



محدث:


Source: https://habr.com/ru/post/ar438402/


All Articles