الیکسي ګراچیف: مخ ته لاړ شه

د ۲۰۱۸ کال د می په میاشت کې د کییف د لیدنې کتنې:

الیکسي ګراچیف: مخ ته لاړ شه

مخکښ: - سلام و ټولو ته! مننه چې دلته یاست! نن ورځ موږ دوه رسمي ویناوال لرو - لیوشا او وانیا. که موږ کافي وخت ولرو دوه نور به وي. لومړی سپیکر الیکسي ګریچوف دی، هغه به موږ ته د GopherJS په اړه ووایي.

الیکسي ګراچیف (له دې وروسته - AG): - زه د Go جوړونکی یم، او زه په Go کې ویب خدمتونه لیکم. ځینې ​​​​وختونه تاسو باید د مخکښې سره معامله وکړئ، ځینې وختونه تاسو باید په لاسي ډول دې ته ورشئ. زه غواړم زما د تجربې او څیړنې په اړه وغږیږم په مخکینۍ برخه کې.

افسانه دا ده: لومړی به موږ په دې اړه وغږیږو چې ولې موږ غواړو په مخکینۍ برخه کې لاړ شو، بیا به موږ په دې اړه وغږیږو چې دا څنګه ترسره کیدی شي. دوه لارې شتون لري - ویب مجلس او GopherJS. راځئ وګورو چې د دې حلونو وضعیت څه دی او څه کیدی شي.

په مخکینۍ برخه کې څه ستونزه ده؟

ایا هرڅوک موافق دي چې هرڅه د مخکښې سره سم دي؟

الیکسي ګراچیف: مخ ته لاړ شه

ایا کافي ازموینې شتون نلري؟ ورو جوړونه؟ ایکوسیستم؟ ښه.

د فرنټ اینډ په اړه، زه هغه اقتباس خوښوم چې د فرنټ اینډ پراختیا کونکي په خپل کتاب کې ویلي:

الیکسي ګراچیف: مخ ته لاړ شه

جاواسکریپټ یو ډول سیسټم نلري. اوس به زه د هغو ستونزو نومونه واخلم چې د خپل کار په جریان کې ورسره مخ شوي یم او تشریح کوم چې څنګه حل کیږي.

په عموم کې د ټایپ سیسټم په سختۍ سره په جاواسریپټ کې د ډول سیسټم بلل کیدی شي - داسې کرښې شتون لري چې د څیز ډول په ګوته کوي ، مګر په حقیقت کې دا د ډولونو سره هیڅ تړاو نلري. دا ستونزه په ټایپ سکریپټ (جاواسکریپټ کې اضافه کول) او فلو (په جاواسکریپټ کې د جامد ډول چیکر) کې حل کیږي. په حقیقت کې، فرنټ اینډ لا دمخه په جاواسکریپټ کې د خراب ډول سیسټم ستونزې حل کولو نقطې ته رسیدلی.

الیکسي ګراچیف: مخ ته لاړ شه

په براوزر کې هیڅ معیاري کتابتون شتون نلري - په براوزرونو کې ځینې جوړ شوي توکي او "جادو" افعال شتون لري. مګر په جاواسکریپټ کې داسې معیاري کتابتون شتون نلري. دا ستونزه لا دمخه یو ځل د jQuery لخوا حل شوې وه (هرڅوک د ټولو پروټوټایپونو، مرستندویانو، دندو سره چې کار کولو ته اړتیا درلوده jQuery کارول). اوس هرڅوک لوداش کاروي:

الیکسي ګراچیف: مخ ته لاړ شه

د دوزخ غږ. زه فکر کوم چې هرڅوک شاوخوا 5 کاله دمخه د جاواسکریپټ کوډ لیدلی و ، او دا د کال بیکونو د نه منلو وړ پیچلتیا د "نوډل" په څیر ښکاري. اوس دا ستونزه حل شوې ده (د ES-15 یا ES-16 خوشې کولو سره) ، جاواسکریپټ کې ژمنې اضافه شوي او هرڅوک کولی شي د یو څه مودې لپاره اسانه ساه واخلي.

الیکسي ګراچیف: مخ ته لاړ شه

ترهغې پورې چې پرومیس دوزخ راورسیږي ... زه نه پوهیږم چې د مخکښې پای صنعت څنګه اداره کوي ، مګر دوی تل ځانونه یو عجیب ځنګل ته وړي. په وعدو مو هم دوزخ جوړ کړ. بیا موږ دا ستونزه د نوي لومړني اضافه کولو سره حل کړه - async/await:

الیکسي ګراچیف: مخ ته لاړ شه

د اسینکرونی سره ستونزه حل کیږي. Async/await په مختلفو ژبو کې خورا مشهور ابتدايي بڼه ده. پایتون او نور دا طریقه لري - دا خورا ښه دی. ستونزه حل شوه.

کومه ستونزه نه حل کیږي؟ په چټکۍ سره د چوکاټونو پیچلتیا، د ایکوسیستم پیچلتیا او پخپله پروګرامونه.

الیکسي ګراچیف: مخ ته لاړ شه

  • جاوا سکرپٹ ترکیب یو څه عجیب دی. موږ ټول د صف او یو څیز او نورو ټوکو اضافه کولو سره ستونزې پوهیږو.
  • جاواسکریپټ څو اړخیزه ده. دا اوس په ځانګړي ډول فشار لرونکی سیسټم دی کله چې ایکوسیستم خورا لوی دی:
    • هرڅوک په بیلابیلو سټایلونو کې لیکي - ځینې یې ساختماني لیکي، ځینې یې په فعاله توګه لیکي، مختلف پراختیا کونکي په مختلف ډول لیکي؛
    • د مختلفو کڅوړو څخه، مختلف تمثیلونه کله چې تاسو مختلف کڅوړې کاروئ؛
    • په جاواسریپټ کې د فعال برنامو سره ډیری "تفریح" شتون لري - د رامبډا کتابتون څرګند شو او اوس هیڅ څوک نشي کولی پدې کتابتون کې لیکل شوي برنامې ولولي.

  • دا ټول په ایکوسیستم باندې لوی اغیزه کوي، او دا په حیرانتیا سره وده کړې. کڅوړې له یو بل سره مطابقت نلري: ځینې یې د ژمنو پراساس دي، ځینې یې د async/انتظار پر بنسټ دي، ځینې یې د کال بیک پر بنسټ دي. دوی هم په مختلفو تمثیلونو لیکي!
  • دا د پروژې ساتل ستونزمن کوي. د بګ موندل ګران دي که تاسو کوډ نشئ لوستلی.

ویب مجلس څه شی دی؟

د موزیلا فاؤنڈیشن او یو شمیر نورو شرکتونو زړور هلکان د ویب اسمبلۍ په څیر د داسې شی سره راغلل. دا څه شی دی؟

الیکسي ګراچیف: مخ ته لاړ شه

  • دا یو مجازی ماشین دی چې په براوزر کې جوړ شوی چې د بائنری فارمیټ ملاتړ کوي.
  • بائنری پروګرامونه هلته رسیږي او تقریبا په اصلي توګه اجرا کیږي، دا دی، براوزر اړتیا نلري هر ځل د جاواسکریپټ کوډ ټول "نوډلز" تجزیه کړي.
  • ټولو براوزرونو ملاتړ اعلان کړ.
  • څرنګه چې دا بایټکوډ دی، تاسو کولی شئ د هرې ژبې لپاره کمپیلر ولیکئ.
  • څلور لوی براوزرونه دمخه د ویب اسمبلۍ ملاتړ سره لیږل کیږي.
  • موږ ژر تر ژره په Go کې د اصلي ملاتړ تمه کوو. دا نوی جوړښت لا دمخه اضافه شوی دی: GOARCH=wasm GOOS=js (ډیر ژر). تر دې دمه ، لکه څنګه چې زه پدې پوهیږم ، دا فعال ندی ، مګر یو بیان شتون لري چې دا به خامخا په Go کې وي.

اوس څه وکړو؟ GopherJS

پداسې حال کې چې موږ د ویب اسمبلۍ لپاره ملاتړ نلرو، د GopherJS په څیر یو ټرانسپیلر شتون لري.

الیکسي ګراچیف: مخ ته لاړ شه

  • د ګو کوډ په "خالص" جاواسکریپټ کې لیږدول شوی.
  • په ټولو براوزرونو کې چلیږي - هیڅ نوې ځانګړتیاوې شتون نلري چې یوازې د عصري براوزرونو لخوا ملاتړ کیږي (دا وینیلا JS دی، کوم چې په هر څه چلیږي).
  • د نږدې هرڅه لپاره ملاتړ شتون لري چې Go لري ، پشمول د ګوروټینونو او چینلونو په شمول ... هرڅه چې موږ یې خوښوو او ډیر پوهیږو.
  • نږدې ټول معیاري کتابتون ملاتړ کیږي، پرته له دې کڅوړو څخه چې دا په براوزر کې د ملاتړ لپاره هیڅ معنی نلري: syscall، خالص تعامل (دلته یو net/http مراجعه ده، مګر هیڅ سرور نشته، او پیرودونکي د XMLHttpRequest له لارې جذب شوي). په عموم کې، ټول معیاري کتابتون شتون لري - دلته دا په براوزر کې دی، دلته د Go's stdlib دی، کوم چې موږ یې خوښوو.
  • په Go کې د کڅوړې ټول اکوسیستم، د دریمې ډلې ټول حلونه (ټیمپلینګ، او نور) د GopherJS په کارولو سره تالیف کیدی شي او په براوزر کې پرمخ ځي.

GopherJS ترلاسه کول خورا اسانه دي - دا یوازې د ګو منظم کڅوړه ده. موږ ترلاسه کوو، او موږ د غوښتنلیک جوړولو لپاره د GopherJS کمانډ لرو:

الیکسي ګراچیف: مخ ته لاړ شه

دا دومره کوچنۍ هیلو نړۍ ده ...

الیکسي ګراچیف: مخ ته لاړ شه

... یو منظم Go پروګرام، یو منظم معیاري کتابتون fmt کڅوړه او د براوزر API ته د رسیدو لپاره پابند Js. Println به په نهایت کې کنسول لاګ ته واړول شي او براوزر به "هیلو ګوفرز" ولیکي! دا خورا ساده دی: موږ د GopherJS جوړونه کوو - موږ یې په براوزر کې پیل کوو - هرڅه کار کوي!

تاسو دا مهال څه لرئ؟ پابندۍ

الیکسي ګراچیف: مخ ته لاړ شه

د ټولو مشهور js چوکاټونو لپاره بندیزونه شتون لري:

  • JQuery;
  • Angular.js;
  • D3.js د لوی ډیټا سره د پلان کولو او کار کولو لپاره؛
  • React.js;
  • VueJS;
  • د الیکترون لپاره حتی ملاتړ شتون لري (دا دا دی چې موږ دمخه کولی شو په الیکترون کې د ډیسټاپ غوښتنلیکونه ولیکئ)؛
  • او ترټولو خوندور شی WebGL دی (موږ کولی شو بشپړ ګرافیک اپلیکیشنونه جوړ کړو، په شمول د 3D ګرافیک، میوزیک او ټولو سامانونو سره لوبې)؛
  • او د ټولو مشهور جاواسکریپټ چوکاټونو او کتابتونونو لپاره ډیری نور پابندۍ.

چوکاټ

  1. دلته یو ویب چوکاټ شتون لري چې دمخه په ځانګړي ډول د GopherJS - Vecty لپاره رامینځته شوی. دا د React.js بشپړ انلاګ دی، مګر یوازې په Go کې پراختیا شوی، د GopherJS ځانګړتیاو سره.
  2. د لوبې کڅوړې شتون لري (حیرانتیا!). ما دوه خورا مشهور وموندل:
    • انګو;
    • ایبیټین

زه به تاسو ته یو څو مثالونه وښیم چې دا څه ښکاري او هغه څه چې تاسو دمخه په Go کې لیکلی شئ:

الیکسي ګراچیف: مخ ته لاړ شه

یا دا اختیار (زه د 3D شوټر نشم موندلی، مګر شاید دا شتون ولري):

الیکسي ګراچیف: مخ ته لاړ شه

زه څه وړاندیز کوم؟

اوس د مخکښې پای صنعت په داسې حالت کې دی چې ټولې ژبې چې پخوا د جاواسکریپټ څخه غږیدلې به هلته راښکته شي. اوس به هرڅه په "ویب مجلسونو" کې تنظیم شي. موږ څه ته اړتیا لرو چې هلته د ګوفرانو په توګه خپل مناسب ځای واخلو؟

الیکسي ګراچیف: مخ ته لاړ شه

Go په دودیز ډول داسې انګیرل کیږي چې دا د سیسټم پروګرام کولو ژبه ده، او په عملي توګه د UI سره کار کولو لپاره هیڅ کتابتون شتون نلري. یو څه شتون لري، مګر دا نیم پریښودل شوی، نیم غیر فعال دی.

او اوس په Go کې د UI کتابتونونو جوړولو لپاره ښه چانس دی چې په GopherJS کې به پرمخ ځي! تاسو کولی شئ په پای کې خپل چوکاټ ولیکئ! دا هغه وخت دی چې تاسو کولی شئ یو چوکاټ ولیکئ، او دا به لومړی وي او ژر تر ژره تصویب شي، او تاسو به یو ستوری شئ (که دا یو ښه چوکاټ وي).

تاسو کولی شئ ډیری مختلف کڅوړې تنظیم کړئ چې دمخه د Go ایکوسیستم کې دي د براوزر ځانګړتیاو سره (د مثال په توګه ، د ټیمپلیټ انجن). دوی به دمخه کار وکړي ، تاسو کولی شئ مناسب پابندۍ رامینځته کړئ نو تاسو کولی شئ په اسانۍ سره مینځپانګه مستقیم په براوزر کې وړاندې کړئ. برسیره پردې، تاسو کولی شئ، د بیلګې په توګه، یو خدمت چې کولی شي ورته شی په سرور او مخکینۍ پای کې وړاندې کړي، د ورته کوډ په کارولو سره - هرڅه چې د مخکښې پای پراختیا کونکي خوښوي (یوازې اوس په کې).

تاسو کولی شئ یوه لوبه ولیکئ! یوازې د تفریح ​​لپاره…

دا ټول ما غوښتل ووایم.

الیکسي ګراچیف: مخ ته لاړ شه

پوښتنې

پوښتنه (له دې وروسته د Q په نوم یادیږي): - ایا زه په Go یا Js کې لیکم؟

AG: - تاسو معمولونه، چینلونه، جوړښتونه، ایمبیډینګ - هرڅه په Go کې لیکئ ... تاسو یوې پیښې ته ګډون وکړئ، هلته یو فنکشن تېر کړئ.

په: - نو زه په "ننګر" Js کې لیکم؟

AG: - نه، تاسو داسې ولیکئ لکه په Go کې او د براوزر API سره وصل شئ (API نه دی بدل شوی). تاسو کولی شئ خپل بندیزونه ولیکئ ترڅو پیغامونه چینل ته واستول شي - دا ستونزمن ندي.

په: - د موبایل په اړه څه؟

AG: - ما حتما ولیدل: د کورډووا پیچ لپاره بندیزونه شتون لري چې Js چلوي. په اصلي عکس العمل کې - زه نه پوهیږم؛ شاید هلته وي، شاید نه وي (زه په ځانګړې توګه لیوالتیا نه وم). د N-go لوبې انجن دواړه د ګرځنده غوښتنلیکونو ملاتړ کوي - دواړه iOS او Android.

په: - د ویب مجلس په اړه پوښتنه. د فشار او "زپ کولو" سره سره ، ډیر او ډیر ځای نیول کیږي ... ایا موږ به په دې توګه د لومړۍ پای نړۍ نوره هم ونه وژنو؟

AG: - د ویب اسمبلۍ بائنری بڼه ده، او د ډیفالټ لخوا بائنری د متن څخه ډیر په وروستي ریلیز کې نشي کیدی ... تاسو د چلولو وخت ته راښکته شوي یاست، مګر دا د معیاري جاواسکریپټ کتابتون د ایستلو په څیر دی کله چې شتون نلري، نو موږ یو څه لوداش وکاروئ. زه نه پوهیږم چې لوداش څومره اخلي.

په: - په ښکاره ډول د وخت څخه لږ ...

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 په امستردام کې د Equinix Tier IV ډیټا مرکز کې 2 ځله ارزانه؟ یوازې دلته 2x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 تلویزیون له $199 څخه په هالنډ کې! ډیل R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - له $ 99 څخه! په اړه ولولئ د زیربنا شرکت جوړولو څرنګوالی د ډیل R730xd E5-2650 v4 سرورونو کارولو سره ټولګي د یوې پیسي لپاره د 9000 یورو ارزښت لري؟

سرچینه: www.habr.com

Add a comment