أليكسي غراتشيف: Go Frontend

Kyiv Go Meetup May 2018:



Host: - أهلاً بالجميع! أشكركم على حضوركم هنا! لدينا اليوم متحدثان رسميان - ليشا وفانيا. سيكون هناك اثنان آخران إذا كان لدينا الوقت الكافي. المتحدث الأول هو أليكسي غراتشيف ، سيخبرنا عن GopherJS.

أليكسي غراتشيف (فيما يلي - AG): - أنا مطور Go ، وأكتب خدمات الويب على Go. في بعض الأحيان يجب عليك التعامل مع الواجهة الأمامية ، وأحيانًا يجب عليك الصعود هناك مع الأقلام. أريد أن أتحدث عن تجربتي وبحثي في ​​الواجهة الأمامية.

الأسطورة هي هذه: سنتحدث أولاً عن سبب رغبتنا في تشغيل Go في الواجهة الأمامية ، ثم سنتحدث عن كيفية القيام بذلك. هناك طريقتان - تجميع الويب و GopherJS. دعونا نرى في حالة هذه القرارات وما يمكن القيام به.

ما هو الخطأ في الواجهة الأمامية؟


هل يتفق الجميع على أن كل شيء على ما يرام مع الواجهة الأمامية؟



هل هناك اختبارات قليلة؟ التجمع البطيء؟ النظام البيئي؟ حسن.

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



لا يوجد نظام نوع في جافا سكريبت. الآن سأذكر المشاكل التي واجهتها خلال عملي وأشرح كيف يتم حلها.

من الصعب عمومًا تسمية نظام نوع بنظام نوع في Javasript - هناك خطوط تشير إلى نوع كائن ، ولكن في الواقع لا علاقة له بالأنواع. تم حل هذه المشكلة في TypeScript (وظيفة إضافية لـ Javasript) و Flow (أنواع المدقق الثابت في Javascript). في الواقع ، وصلت الواجهة الأمامية بالفعل إلى حل مشكلة نظام النوع السيئ في جافا سكريبت.



لا توجد مكتبة قياسية في المستعرض على هذا النحو - هناك بعض الكائنات المضمنة ووظائف "السحر" في المستعرضات. ولكن ليس لدي مكتبة قياسية في جافا سكريبت على هذا النحو. تم حل هذه المشكلة مرة واحدة بواسطة jQuery (استخدم الجميع jQuery مع جميع النماذج الأولية والمساعدين والوظائف اللازمة للعمل). الآن يستخدم الجميع Lodash: Callback



hell. أعتقد أن الجميع رأوا كود جافا سكريبت قبل حوالي 5 سنوات ، وبدا وكأنه "شعرية" من التعقيدات المذهلة لردود الفعل. الآن تم حل هذه المشكلة (مع إصدار ES-15 أو ES-16) ، أضافوا وعودًا إلى جافا سكريبت وبدأ الجميع في التنفس أسهل لفترة من الوقت.



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



يتم حل المشكلة مع التزامن. Async / ينتظر هو بدائي بشعبية إلى حد ما في لغات مختلفة. في "Python" وفي أخرى هناك مثل هذا النهج - إنه جيد بما فيه الكفاية. تم حل المشكلة.

ما المشكلة التي لم تحل؟ تعقيد الأطر التي تنمو بشكل كبير ، وتعقيد النظام البيئي والبرامج نفسها.



  • بناء جملة Javasript غريب بعض الشيء. نعلم جميعًا مشاكل إضافة صفيف وكائن ونكات أخرى.
  • جافا سكريبت متعدد النماذج. الآن أصبح نظامًا ملحًا بشكل خاص عندما يكون النظام البيئي كبيرًا جدًا:

    • الكل يكتب بأشكال مختلفة - شخص ما يكتب بشكل هيكلي ، شخص ما يكتب وظيفيا ، مطورين مختلفين يكتبون بشكل مختلف ؛
    • من حزم مختلفة ، نماذج مختلفة عند استخدام حزم مختلفة ؛
    • هناك الكثير من المرح مع البرمجة الوظيفية في Javasript - ظهرت مكتبة رامدا والآن لا يستطيع أحد قراءة البرامج المكتوبة في هذه المكتبة.

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

ما هو Web Assemly؟


الرجال الشجعان من مؤسسة موزيلا والعديد من الشركات الأخرى توصلوا إلى شيء مثل Web Assembly. ما هذا؟



  • هذا جهاز افتراضي مدمج في المستعرض يدعم التنسيق الثنائي.
  • تصل البرامج الثنائية إلى هناك ، ويتم تنفيذها بشكل أصلي تقريبًا ، أي أن المتصفح لا يحتاج إلى تحليل جميع "المعكرونة" لرمز جافا سكريبت في كل مرة.
  • أعلنت جميع المتصفحات دعمها.
  • نظرًا لأن هذا هو رمز ثانوي ، يمكنك كتابة مترجم لأي لغة.
  • تأتي أربعة متصفحات رئيسية مزودة بالفعل بدعم تجميع الويب.
  • سرعان ما ننتظر الدعم الأصلي في Go. تم بالفعل إضافة هذه البنية الجديدة: GOARCH = wasm GOOS = js (قريبًا). حتى الآن ، كما أفهمها ، لا تعمل ، ولكن هناك بيان بأنه سيكون بالتأكيد في Go.

ماذا تفعل الآن؟ جوفرجس


بينما ليس لدينا دعم تجميع الويب ، هناك ناقل مثل GopherJS.



  • انتقل كود ينتقل إلى جافا سكريبت النقي.
  • – , ( Vanilla JS, ).
  • , Go, … – , .
  • , , : syscall, net- ( net/http-, , XMLHttpRequest). – , stdlib Go, .
  • Go, ( .) GopherJS .

من السهل جدًا الحصول على GopherJS - هذه حزمة Go عادية. ننطلق ، ولدينا فريق GopherJS لبناء التطبيق:



إليك عالم صغير مرحبًا ...



برنامج Go عادي ، حزمة fmt عادية من المكتبة القياسية و Binding Js للوصول إلى واجهة برمجة تطبيقات المتصفح. سيتم تحويل Println في النهاية إلى سجل وحدة التحكم وسيكتب المتصفح "Hello gophers"! الأمر بهذه البساطة: نحن نقوم ببناء GopherJS - تشغيله في متصفح - كل شيء يعمل!

ماذا يوجد حاليا؟ الارتباطات




هناك روابط لجميع أطر عمل js الشائعة:

  • مسج
  • Angular.js ؛
  • D3.js للرسم البياني والعمل مع البيانات الضخمة ؛
  • React.js ؛
  • VueJS ؛
  • هناك حتى دعم Electron (أي أنه يمكننا الآن كتابة تطبيقات سطح المكتب على Electron) ؛
  • وأطرف شيء هو WebGL (يمكننا إنشاء تطبيقات رسومية كاملة ، بما في ذلك الألعاب ذات الرسومات ثلاثية الأبعاد والموسيقى وجميع الأشياء الجيدة) ؛
  • والكثير من المجلدات الأخرى لجميع أطر ومكتبات جافا سكريبت الشائعة.

إطار العمل


  1. يوجد بالفعل إطار ويب تم تطويره خصيصًا لـ GopherJS - Vecty. هذا هو تناظرية كاملة من React.js ، ولكن تم تطويره فقط على Go ، مع تفاصيل GopherJS.
  2. هناك أكياس لعبة (فجأة!). لقد وجدت اثنين من الأكثر شعبية:

    • إنغو
    • إبيتين.

سأوضح بضعة أمثلة لكيفية ظهور هذا وما يمكنك كتابته على Go now:



أو مثل هذا الخيار (لم أجد مطلقًا ثلاثي الأبعاد ، ولكن ربما هو):



ماذا أقترح؟


الآن أصبحت صناعة الواجهة الأمامية في مثل هذه الحالة التي ستندفع فيها جميع اللغات التي صرخت من جافا سكريبت قبل ذلك. سيتم الآن تجميع كل شخص في تجميعات الويب. ماذا نحتاج أن نأخذ مكانًا جديرًا هناك كـ "غوفر"؟



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

وهنا فرصة جيدة لإنشاء مكتبات واجهة المستخدم على Go التي ستعمل على GopherJS! يمكنك أخيرا كتابة إطار العمل الخاص بك! لقد حان الوقت الذي يمكنك فيه كتابة إطار عمل ، وسيكون واحدًا من أول من يحصل على تكيف مبكر ، وستكون نجمًا (إذا كان إطارًا جيدًا).

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

يمكنك كتابة لعبة! للمتعة فقط ...

لدي.



الأسئلة


سؤال (فيما يلي - س): - هل أكتب في Go أو في Js؟

أي جي: - تكتب الروتينات والقنوات والهياكل والتضمين في Go - هذا كل شيء ... أنت تشترك في حدث ، وتمرر وظيفة هناك.

سؤال: أي أنني أكتب على شبيبة "عارية"؟

AG: - لا ، تكتب كما لو على Go وتتصل بواجهة برمجة تطبيقات المتصفح (لم تتغير API في نفس الوقت). يمكنك كتابة روابطك حتى تصل الرسائل إلى القناة - الأمر سهل.

س: - وماذا عن الجوال؟

أ غ: - لقد رأيت بالتأكيد: هناك ملفات من أجل رقعة Cordova التي تطلقها Js. في React Native ، لا أعرف ؛ ربما يوجد ، ربما لا (غير مهتم حقًا). يدعم محرك ألعاب N-go أيضًا تطبيقات الجوال - كل من iOs و Android.

في:- سؤال حول تجميع الويب. المزيد والمزيد من الأماكن مشغولة ، على الرغم من ضيق "ضغط" ... هل يمكننا قتل العالم الأمامي بهذه الطريقة أكثر؟

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

س: - أقل من وقت التشغيل بشكل صريح ...

AG: - على جافا سكريبت "النقي"؟

سؤال: - نعم. نعصرها قبل إرسالها ...

AG:- لكن هذا هو النص ... بشكل عام ، ميغابايت كثيرة ، ولكن هذا كل شيء (لديك كل وقت التشغيل). بعد ذلك ، تكتب منطق عملك ، مما سيزيد ثنائيك بنسبة 1 ٪. حتى أرى هذا يقتل الواجهة الأمامية. علاوة على ذلك ، سيتم تشغيل تجميع الويب بشكل أسرع من جافا سكريبت للسبب الواضح - لا يحتاج إلى تحليل.

س: - حتى الآن ، لحظة مثيرة للجدل ... لا يوجد حتى الآن تطبيق مرجعي لـ "Vasma" (جمعية الويب) ، بحيث يمكنك الحكم بوضوح. من الناحية النظرية - نعم: نفهم جميعًا أن ثنائي يجب أن يكون أسرع ، ولكن التنفيذ الحالي لنفس V8 فعال للغاية.

AG: - نعم.

س: - يعمل التجميع بشكل رائع هناك وليس حقيقة أنه ستكون هناك ميزة كبيرة.

أ.ج .: - تقوم جمعية الويب أيضًا بعمل أشخاص رائعين.

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

AG: - ربما. سنرى.

س: - ليس لدينا مشاكل في الواجهة الخلفية ... ربما تترك هذه المشاكل في الواجهة الأمامية؟ لماذا يصعد هناك؟

أ.ج: - علينا إبقاء طاقم الخطوط الأمامية.


القليل من الدعاية :)


أشكركم على البقاء معنا. هل تحب مقالاتنا؟ هل تريد رؤية مواد أكثر إثارة للاهتمام؟ ادعمنا عن طريق تقديم طلب أو التوصية لأصدقائك VPS القائم على السحابة للمطورين من $ 4.99 ، وهو نظير فريد من نوعه لخوادم مستوى الدخول التي اخترعناها لك: الحقيقة الكاملة عن VPS (KVM) E5-2697 v3 (6 نوى) 10GB DDR4 480GB SSD 1Gbps من $ 19 أو كيفية تقسيم الخادم؟ (تتوفر الخيارات مع RAID1 و RAID10 ، حتى 24 مركزًا و 40 جيجابايت DDR4).

Dell R730xd أرخص مرتين في مركز بيانات Equinix Tier IV في أمستردام؟ فقط لدينا 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV من 199 دولارًا في هولندا!Dell R420 - 2x E5-2430 2.2 جيجا هرتز 6C 128 جيجا بايت DDR3 2x960GB SSD 1Gbps 100TB - من 99 دولار! اقرأ عن كيفية بناء مبنى البنية التحتية الفئة c باستخدام خوادم Dell R730xd E5-2650 v4 بتكلفة 9000 يورو مقابل سنت واحد؟

All Articles