Alexey Grachev: Go Frontend

Kyiv Go Meetup مئي 2018:

Alexey Grachev: Go Frontend

اڳواڻي: - هيلو سڀ! هتي ٿيڻ لاء توهان جي مهرباني! اڄ اسان وٽ ٻه سرڪاري ڳالهائيندڙ آهن - ليوشا ۽ وانيا. اتي ٻه وڌيڪ هوندا جيڪڏهن اسان وٽ ڪافي وقت آهي. پهريون اسپيڪر Alexey Grachev آهي، هو اسان کي گوفر جي ايس بابت ٻڌائيندو.

Alexey Grachev (هتان کان پوء - AG): - مان هڪ Go ڊولپر آهيان، ۽ مان Go ۾ ويب خدمتون لکندو آهيان. ڪڏهن ڪڏهن توهان کي فرنٽ اينڊ سان معاملو ڪرڻو پوندو، ڪڏهن ڪڏهن توهان کي دستي طور تي حاصل ڪرڻو پوندو. مان پنهنجي تجربي ۽ تحقيق بابت ڳالهائڻ چاهيان ٿو Go on the frontend.

ڏند ڪٿا هي آهي: پهرين اسان انهي بابت ڳالهائينداسين ڇو اسان هلڻ چاهيون ٿا Go on the frontend، پوءِ اسين ڳالهائينداسين ته اهو ڪيئن ٿي سگهي ٿو. اتي ٻه طريقا آهن - ويب اسيمبلي ۽ گوفر جي ايس. اچو ته ڏسون ته انهن حلن جي ڪهڙي حيثيت آهي ۽ ڇا ڪري سگهجي ٿو.

فرنٽ اينڊ سان ڇا غلط آهي؟

ڇا هرڪو متفق آهي ته سڀ ڪجهه ٺيڪ آهي فرنٽ اينڊ سان؟

Alexey Grachev: Go Frontend

ڇا ڪافي ٽيسٽ نه آھن؟ سست تعمير؟ ماحولياتي نظام؟ ٺيڪ.

فرنٽ اينڊ جي حوالي سان، مون کي اهو اقتباس پسند آهي ته فرنٽ اينڊ ڊولپر مان هڪ پنهنجي ڪتاب ۾ چيو آهي:

Alexey Grachev: Go Frontend

جاوا اسڪرپٽ ۾ هڪ قسم جو نظام ناهي. ھاڻي مان انھن مسئلن جو نالو ڏيندس جيڪي مون پنھنجي ڪم دوران پيش آيا ۽ بيان ڪندس ته اھي ڪيئن حل ٿين.

عام طور تي ٽائپ سسٽم کي Javasript ۾ شايد ئي ٽائپ سسٽم سڏيو وڃي ٿو - اتي لائينون آهن جيڪي ظاهر ڪن ٿيون اعتراض جي قسم، پر حقيقت ۾ هن جو قسم سان ڪو به تعلق ناهي. اهو مسئلو حل ڪيو ويو آهي ٽائپ اسڪرپٽ (جاوا اسڪرپٽ ۾ هڪ اضافو) ۽ فلو (جاوا اسڪرپٽ ۾ هڪ جامد قسم چيڪ ڪندڙ). دراصل، فرنٽ اينڊ اڳ ۾ ئي جاوا اسڪرپٽ ۾ خراب قسم جي سسٽم جو مسئلو حل ڪرڻ جي نقطي تي پهچي چڪو آهي.

Alexey Grachev: Go Frontend

برائوزر ۾ ڪا به معياري لائبريري نه آهي جيئن ته - برائوزرن ۾ ڪجهه تعمير ٿيل شيون ۽ "جادو" افعال آهن. پر جاوا اسڪرپٽ ۾ اهڙي معياري لائبريري ناهي. اهو مسئلو اڳ ۾ ئي هڪ ڀيرو jQuery ذريعي حل ڪيو ويو هو (هر ڪو jQuery استعمال ڪيو سڀني پروٽوٽائپس، مددگار، افعال سان جيڪو ڪم ڪرڻ جي ضرورت هئي). هاڻي هرڪو استعمال ڪري ٿو Lodash:

Alexey Grachev: Go Frontend

ڪال بيڪ جهنم. مان سمجهان ٿو ته هرڪو جاوا اسڪرپٽ ڪوڊ اٽڪل 5 سال اڳ ڏٺو، ۽ اهو ڏسڻ ۾ آيو "نوڊل" ڪال بڪ جي ناقابل اعتماد پيچيدگي جي. هاڻي اهو مسئلو حل ڪيو ويو آهي (ES-15 يا ES-16 جي ڇڏڻ سان)، جاوا اسڪرپٽ ۾ واعدو شامل ڪيو ويو آهي ۽ هرڪو ڪجهه دير تائين آسانيء سان سانس ڪري سگهي ٿو.

Alexey Grachev: Go Frontend

جيستائين پروميس جهنم پهچي ويو ... مون کي خبر ناهي ته فرنٽ اينڊ انڊسٽري ڪيئن منظم ڪري ٿي، پر اهي هميشه پاڻ کي ڪجهه عجيب جنگل ۾ هلائيندا آهن. اسان به واعدن تي جهنم جو انتظام ڪيو. پوءِ اسان ھي مسئلو حل ڪيو ھڪڙو نئون پرائميٽ شامل ڪندي - async/await:

Alexey Grachev: Go Frontend

asynchrony جو مسئلو حل ٿي ويو آهي. Async/await مختلف ٻولين ۾ ڪافي مقبول پرائميو آھي. Python ۽ ٻين وٽ اهو طريقو آهي - اهو تمام سٺو آهي. مسئلو حل ٿي ويو.

ڪهڙو مسئلو حل نٿو ٿئي؟ فريم ورڪ جي تيزيءَ سان وڌندڙ پيچيدگي، ماحولياتي نظام جي پيچيدگي ۽ پروگرام پاڻ ۾.

Alexey Grachev: Go Frontend

  • جاوا اسڪرپٽ نحو ٿورو عجيب آهي. اسان سڀني کي ڄاڻون ٿا مسئلا شامل ڪرڻ سان هڪ صف ۽ هڪ اعتراض ۽ ٻيون مذاق.
  • جاوا اسڪرپٽ ملٽي پاراڊم آهي. اهو هڪ خاص طور تي دٻاء وارو نظام آهي هاڻي جڏهن ماحولياتي نظام تمام وڏو آهي:
    • هرڪو لکي ٿو مختلف اندازن ۾ - ڪي لکن ٿا ساخت سان، ڪي لکن ٿا فنڪشنل، مختلف ڊولپر مختلف طريقن سان لکن ٿا؛
    • مختلف پيڪيجز مان، مختلف نمونا جڏهن توهان مختلف پيڪيجز استعمال ڪندا آهيو؛
    • Javasript ۾ فنڪشنل پروگرامنگ سان گڏ تمام گهڻو ”مذاق“ آهي - rambda لائبريري ظاهر ٿيو ۽ هاڻي ڪو به هن لائبريري ۾ لکيل پروگرامن کي پڙهي نٿو سگهي.

  • اهو سڀ ڪجهه ماحولياتي نظام تي وڏو اثر وجهي ٿو، ۽ اهو ناقابل يقين حد تائين وڌي چڪو آهي. پيڪيجز هڪ ٻئي سان ناانصافي آهن: ڪجهه واعدن تي ٻڌل آهن، ڪجهه async/انتظار تي ٻڌل آهن، ڪجهه ڪال بڪ تي ٻڌل آهن. اهي به مختلف پيراگراف ۾ لکن ٿا!
  • اهو منصوبو برقرار رکڻ ڏکيو بڻائي ٿو. جيڪڏهن توهان ڪوڊ نه پڙهي سگهو ته بگ ڳولڻ ڏکيو آهي.

ويب اسيمبلي ڇا آهي؟

موزيلا فائونڊيشن جا بهادر ماڻهو ۽ ٻيون ڪيتريون ئي ڪمپنيون هڪ اهڙي شيءِ کڻي آيا آهن جيئن ويب اسيمبلي. هي ڇا آهي؟

Alexey Grachev: Go Frontend

  • هي هڪ ورچوئل مشين آهي جيڪا برائوزر ۾ ٺهيل آهي جيڪا بائنري فارميٽ کي سپورٽ ڪري ٿي.
  • بائنري پروگرام اتي پهچندا آهن ۽ لڳ ڀڳ مقامي طور تي عمل ڪيا ويندا آهن، اهو آهي، برائوزر کي هر وقت جاوا اسڪرپٽ ڪوڊ جي سڀني ”نوڊلز“ کي پارس ڪرڻ جي ضرورت ناهي.
  • سڀني برائوزرن جي حمايت جو اعلان ڪيو آهي.
  • جيئن ته هي بائيٽ ڪوڊ آهي، توهان ڪنهن به ٻولي لاءِ ڪمپلر لکي سگهو ٿا.
  • چار وڏا برائوزر اڳ ۾ ئي ويب اسيمبلي جي مدد سان ٻيڙيون.
  • اسان کي جلد ئي Go ۾ مقامي حمايت جي اميد آهي. هي نئون فن تعمير اڳ ۾ ئي شامل ڪيو ويو آهي: GOARCH=wasm GOOS=js (جلد). ايترو پري، جيئن مان سمجهان ٿو، اهو فنڪشنل نه آهي، پر هڪ بيان آهي ته اهو ضرور گو ۾ هوندو.

هاڻي ڇا ڪجي؟ گوفر جي ايس

جڏهن ته اسان وٽ ويب اسيمبلي جي حمايت نه آهي، اتي هڪ ٽرانسپيلر آهي گوفر جي ايس.

Alexey Grachev: Go Frontend

  • وڃ ڪوڊ "خالص" جاوا اسڪرپٽ ۾ منتقل ڪيو ويو آهي.
  • سڀني برائوزرن ۾ ھلندو آھي - ڪي به نيون خاصيتون نه آھن جيڪي صرف جديد برائوزرن جي مدد سان ھجن (ھي آھي Vanilla JS، جيڪو ڪنھن به شيءِ تي ھلندو آھي).
  • اتي لڳ ڀڳ هر شيءِ لاءِ سپورٽ آهي جيڪا Go وٽ آهي، بشمول گوروٽينز ۽ چينلز... هر شيءِ جنهن کي اسان پسند ڪريون ٿا ۽ تمام گهڻو ڄاڻون ٿا.
  • لڳ ڀڳ پوري معياري لائبريري سپورٽ ڪئي وئي آهي، سواءِ انهن پيڪيجز جي جن کي برائوزر ۾ سپورٽ ڪرڻ جو ڪو به احساس نه آهي: syscall، net interactions (اتي هڪ net/http ڪلائنٽ آهي، پر سرور ناهي، ۽ ڪلائنٽ کي XMLHttpRequest ذريعي نقل ڪيو ويو آهي). عام طور تي، پوري معياري لائبريري موجود آهي - هتي اهو برائوزر ۾ آهي، هتي Go's stdlib آهي، جيڪو اسان کي پسند آهي.
  • Go ۾ سڄو پيڪيج ايڪو سسٽم، سڀ ٽئين پارٽي حل (ٽيمپليٽنگ، وغيره) GopherJS استعمال ڪندي مرتب ڪري سگھجي ٿو ۽ برائوزر ۾ هلائي سگھجي ٿو.

GopherJS حاصل ڪرڻ تمام آسان آهي - اهو صرف هڪ باقاعده Go پيڪيج آهي. اسان وڃون ٿا حاصل ڪريو، ۽ اسان وٽ آھي GopherJS ڪمانڊ ايپليڪيشن ٺاهڻ لاءِ:

Alexey Grachev: Go Frontend

هي هڪ ننڍڙي هيلو دنيا آهي ...

Alexey Grachev: Go Frontend

... هڪ باقاعده Go پروگرام، هڪ باقاعده معياري لائبريري fmt پيڪيج ۽ Binding Js برائوزر API تائين پهچڻ لاءِ. Println آخرڪار ڪنسول لاگ ۾ تبديل ٿي ويندو ۽ برائوزر لکندو "هيلو گوفرز"! اهو سادو آهي: اسان گوفر جي ايس ٺاهيندا آهيون - اسان ان کي برائوزر ۾ لانچ ڪندا آهيون - سڀ ڪجهه ڪم ڪري ٿو!

توهان وٽ هن وقت ڇا آهي؟ پابنديون

Alexey Grachev: Go Frontend

تمام مشهور js فريم ورڪ لاء پابند آهن:

  • JQuery؛
  • Angular.js;
  • D3.js پلاٽ ڪرڻ ۽ وڏي ڊيٽا سان ڪم ڪرڻ لاءِ؛
  • React.js;
  • VueJS؛
  • اليڪٽران لاءِ به سپورٽ آهي (جيڪو اسان اڳ ۾ ئي اليڪٽران تي ڊيسڪ ٽاپ ايپليڪيشنون لکي سگهون ٿا)؛
  • ۽ سڀ کان مزيدار شيءِ آهي WebGL (اسان مڪمل گرافڪ ايپليڪيشنون ٺاهي سگهون ٿا، جن ۾ 3D گرافڪس، ميوزڪ ۽ سڀ شيون شامل آهن)؛
  • ۽ تمام مشهور جاوا اسڪرپٽ فريم ورڪ ۽ لائبريرين جا ٻيا ڪيترائي پابند.

فريم ورڪ

  1. اتي ھڪڙو ويب فريم ورڪ آھي جيڪو اڳ ۾ ئي خاص طور تي GopherJS - Vecty لاءِ تيار ڪيو ويو آھي. هي React.js جو هڪ مڪمل اينالاگ آهي، پر صرف Go ۾ ترقي ڪئي وئي آهي، GopherJS جي خاصيتن سان.
  2. اتي رانديون بيگز آهن (عجب!). مون کي ٻه مشهور مليا:
    • اينگو؛
    • ايبٽن.

مان توهان کي ڪجهه مثال ڏيکاريندس ته اهو ڇا ٿو لڳي ۽ توهان اڳ ۾ ئي Go ۾ لکي سگهو ٿا:

Alexey Grachev: Go Frontend

يا هي اختيار (مان هڪ 3D شوٽر نه ڳولي سگهيو، پر شايد اهو موجود آهي):

Alexey Grachev: Go Frontend

مان ڇا پيش ڪري رهيو آهيان؟

هاڻ فرنٽ-اينڊ انڊسٽري اهڙي حالت ۾ آهي ته اهي سڀئي ٻوليون جيڪي اڳي جاوا اسڪرپٽ مان روئينديون هيون اتي رش ٿينديون. ھاڻي سڀڪنھن شيء کي "ويب اسيمبلي" ۾ مرتب ڪيو ويندو. اسان کي ڪهڙي ضرورت آهي ته اسان جي صحيح جڳهه اتي گوفرن وانگر؟

Alexey Grachev: Go Frontend

گو روايتي طور تي فرض ڪيو آهي ته اها هڪ سسٽم پروگرامنگ ٻولي آهي، ۽ عملي طور تي UI سان ڪم ڪرڻ لاءِ ڪا به لائبريريون نه آهن. ڪجھ به آهي، پر اهو اڌ ڇڏيل آهي، اڌ غير فعال آهي.

۽ ھاڻي ھڪڙو سٺو موقعو آھي Go ۾ UI لائبريريون ٺاهڻ جو جيڪو GopherJS تي ھلندو! توهان آخرڪار پنهنجو فريم ورڪ لکي سگهو ٿا! هي اهو وقت آهي جڏهن توهان هڪ فريم ورڪ لکي سگهو ٿا، ۽ اهو هڪ پهريون هوندو ۽ جلدي اپنائڻ حاصل ڪيو، ۽ توهان هڪ اسٽار ٿيندؤ (جيڪڏهن اهو سٺو فريم ورڪ آهي).

توھان ڪيترن ئي مختلف پيڪيجز کي ترتيب ڏئي سگھو ٿا جيڪي اڳ ۾ ئي Go ecosystem ۾ آھن برائوزر جي خصوصيتن سان (مثال طور، ٽيمپليٽ انجڻ). اهي اڳ ۾ ئي ڪم ڪندا، توهان آساني سان پابند ڪري سگهو ٿا ته جيئن توهان آساني سان مواد کي سڌو سنئون برائوزر ۾ رينجر ڪري سگهو ٿا. ان سان گڏ، توهان ڪري سگهو ٿا، مثال طور، هڪ خدمت جيڪا ساڳي شيءِ سرور ۽ فرنٽ-اينڊ تي، ساڳيا ڪوڊ استعمال ڪندي مهيا ڪري سگهي ٿي - هر شيءِ جيڪا فرنٽ-اينڊ ڊولپر پسند ڪن ٿا (صرف هاڻي گو ۾).

توهان هڪ راند لکي سگهو ٿا! صرف تفريح لاءِ…

اهو سڀ ڪجهه چوڻ چاهيان ٿو.

Alexey Grachev: Go Frontend

توهان جا سوال

سوال (هتان کان پوء Q جي طور تي حوالو ڏنو ويو آهي): - ڇا مان Go يا Js ۾ لکندس؟

AG: - توھان لکندا آھيو معمولات، چينلز، ڍانچي، ايمبيڊنگ - سڀ ڪجھ Go ۾... توھان ھڪڙي ايونٽ جي رڪنيت حاصل ڪريو، اتي ھڪڙو فنڪشن پاس ڪريو.

۾: - پوءِ مان ”ننگا“ جي ايس ۾ لکان ٿو؟

AG: - نه، توهان لکندا آهيو ڄڻ ته Go ۾ ۽ برائوزر API سان ڳنڍيو (API تبديل نه ڪيو ويو آهي). توھان لکي سگھوٿا پنھنجا پنھنجا پابنديون ته جيئن پيغام چينل ڏانھن موڪليا وڃن - اھو ڏکيو نه آھي.

۾: - موبائل بابت ڇا؟

AG: - مون ضرور ڏٺو: ڪورڊووا پيچ لاءِ پابنديون آهن جيڪي Js هلن ٿيون. اصلي رد عمل ۾ - مون کي خبر ناهي؛ ٿي سگهي ٿو اتي آهي، شايد نه (مون کي خاص دلچسپي نه هئي). N-go گيم انجڻ ٻنهي موبائل ايپليڪيشنن کي سپورٽ ڪري ٿو - ٻئي iOS ۽ Android.

۾: - ويب اسيمبلي بابت سوال. دٻاءُ ۽ ”زپنگ“ جي باوجود وڌيڪ ۽ وڌيڪ جاءِ ورتي پئي وڃي... ڇا اسان اڳين دنيا کي اهڙيءَ طرح اڃا به وڌيڪ نه مارينداسين؟

AG: - ويب اسمبلي هڪ بائنري فارميٽ آهي، ۽ بائنري ڊفالٽ طور تي ٽيڪسٽ کان وڌيڪ فائنل رليز ۾ نه ٿي سگهي ٿي... توهان رن ٽائم ڏانهن ٺاهيا آهيو، پر اهو ساڳيو آهي جيئن معياري جاوا اسڪرپٽ لائبريري کي ڇڪي ٻاهر ڪڍڻ جڏهن اهو موجود ناهي، تنهنڪري اسان ڪجھ Lodash استعمال ڪريو. مون کي خبر ناهي ته لوداش ڪيترو وٺندو آهي.

۾: - ظاهر آهي رن ٽائم کان گهٽ...

AG: - "خالص" جاوا اسڪرپٽ ۾؟

۾: - ها. اسان ان کي موڪلڻ کان پهريان ان کي دٻايو ...

AG: - پر هي متن آهي... عام طور تي، هڪ ميگا بائيٽ تمام گهڻو لڳي ٿو، پر اهو سڀ ڪجهه آهي (توهان وٽ سڄو رن ٽائم آهي). اڳيون، توهان پنهنجو ڪاروبار منطق لکو، جيڪو توهان جي بائنري کي 1٪ وڌائيندو. هينئر تائين مون کي اهو ڏسڻ ۾ نه ٿو اچي ته هن محاذ کي قتل ڪيو وڃي. ان کان علاوه، ويب اسيمبلي جاوا اسڪرپٽ کان وڌيڪ تيزيء سان ڪم ڪندي واضح سبب لاء - ان کي پارس ڪرڻ جي ضرورت ناهي.

۾: - اهو اڃا تائين هڪ تڪراري نقطو آهي ... اڃا تائين "واسما" (ويب اسيمبلي) جو ڪو به حوالو لاڳو نه ڪيو ويو آهي ته جيئن ڪو به غير واضح طور تي فيصلو ڪري سگهي. تصوراتي طور تي، ها: اسان سڀ سمجهون ٿا ته بائنري تيز هجڻ گهرجي، پر ساڳئي V8 جو موجوده عمل تمام ڪارائتو آهي.

AG: - ها.

۾: - تاليف اتي واقعي تمام ٿڌو ڪم ڪري ٿو ۽ اها حقيقت ناهي ته اتي وڏو فائدو ٿيندو.

AG: - ويب اسيمبلي پڻ وڏن ماڻهن پاران ٺاهي وئي آهي.

۾: - اهو مون کي لڳي ٿو ته اهو اڃا تائين ڏکيو آهي ويب اسيمبلي جو فيصلو ڪرڻ. ڪافي سالن کان ڳالهه ٻولهه ٿي رهي آهي، پر ڪي ٿورا آهن حقيقي ڪاميابيون جيڪي محسوس ڪري سگهجن ٿيون.

AG: - ٿي سگهي ٿو. ڏسنداسين.

۾: - اسان کي پسمنظر تي مسئلا نه آهن ... ٿي سگهي ٿو اسان کي انهن مسئلن کي فرنٽ اينڊ تي ڇڏڻ گهرجي؟ اتي ڇو وڃو؟

AG: - اسان کي فرنٽ لائن ڪارڪنن جو اسٽاف رکڻو پوندو.

ڪجھ اشتهار 🙂

اسان سان گڏ رهڻ لاء توهان جي مهرباني. ڇا توهان اسان جا مضمون پسند ڪندا آهيو؟ وڌيڪ دلچسپ مواد ڏسڻ چاهيو ٿا؟ آرڊر ڏيڻ يا دوستن کي سفارش ڪندي اسان جي مدد ڪريو، ڪلائوڊ VPS ڊولپرز لاءِ $4.99 کان, داخلا-سطح سرورز جو هڪ منفرد اينالاگ، جيڪو اسان توهان لاءِ ايجاد ڪيو هو: VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps جي باري ۾ سڄي حقيقت $19 کان يا سرور ڪيئن شيئر ڪجي؟ (RAID1 ۽ RAID10 سان دستياب آهي، 24 ڪور تائين ۽ 40GB DDR4 تائين).

ڊيل R730xd 2x سستا Equinix Tier IV ڊيٽا سينٽر ۾ Amsterdam ۾؟ صرف هتي 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV $199 کان هالينڊ ۾! ڊيل R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - $99 کان! جي باري ۾ پڙهو انفراسٽرڪچر ڪارپوريشن ڪيئن ٺاهيو. ڪلاس ڊيل R730xd E5-2650 v4 سرورز جي استعمال سان 9000 يورو جي قيمت هڪ پني لاءِ؟

جو ذريعو: www.habr.com

تبصرو شامل ڪريو