Alexey Grachev: Ewch Frontend

Kyiv Go Meetup Mai 2018:

Alexey Grachev: Ewch Frontend

Arwain: - Helo bawb! Diolch am fod yma! Heddiw mae gennym ddau siaradwr swyddogol - Lyosha a Vanya. Bydd dau arall os bydd gennym ddigon o amser. Y siaradwr cyntaf yw Alexey Grachev, bydd yn dweud wrthym am GopherJS.

Alexey Grachev (o hyn ymlaen - AG): - Rwy'n ddatblygwr Go, ac rwy'n ysgrifennu gwasanaethau gwe yn Go. Weithiau mae'n rhaid i chi ddelio â'r blaen, weithiau mae'n rhaid i chi fynd i mewn iddo â llaw. Rwyf am siarad am fy mhrofiad ac ymchwil i Go on the frontend.

Y chwedl yw hyn: yn gyntaf byddwn yn siarad am pam rydyn ni eisiau rhedeg Ewch ar y blaen, yna byddwn yn siarad am sut y gellir gwneud hyn. Mae dwy ffordd - Web Assembly a GopherJS. Gadewch i ni weld beth yw statws yr atebion hyn a beth y gellir ei wneud.

Beth sy'n bod ar y blaen?

Ydy pawb yn cytuno bod popeth yn iawn gyda'r blaen?

Alexey Grachev: Ewch Frontend

Onid oes digon o brofion? Adeiladu araf? Ecosystem? Iawn.

O ran y blaen, hoffwn y dyfyniad a ddywedodd un o ddatblygwyr y frontend yn ei lyfr:

Alexey Grachev: Ewch Frontend

Nid oes gan Javascript system fath. Nawr byddaf yn enwi'r problemau y deuthum ar eu traws yn ystod fy ngwaith ac yn egluro sut y cânt eu datrys.

Prin y gellir galw'r system fath yn gyffredinol yn system fath yn Javasript - mae llinellau sy'n nodi'r math o wrthrych, ond mewn gwirionedd nid oes a wnelo hyn ddim â mathau. Mae'r broblem hon yn cael ei datrys yn TypeScript (ychwanegiad i Javasript) a Flow (gwiriwr math statig yn Javascript). Mewn gwirionedd, mae'r frontend eisoes wedi cyrraedd y pwynt o ddatrys y broblem o system math gwael yn Javascript.

Alexey Grachev: Ewch Frontend

Nid oes llyfrgell safonol yn y porwr fel y cyfryw - mae rhai gwrthrychau adeiledig a swyddogaethau “hud” mewn porwyr. Ond yn Javascript nid oes llyfrgell safonol fel y cyfryw. Cafodd y broblem hon ei datrys unwaith yn barod gan jQuery (defnyddiodd pawb jQuery gyda'r holl brototeipiau, cynorthwywyr, swyddogaethau yr oedd eu hangen i weithio). Nawr mae pawb yn defnyddio Lodash:

Alexey Grachev: Ewch Frontend

Callback uffern. Rwy'n meddwl bod pawb wedi gweld cod Javascript tua 5 mlynedd yn ôl, ac roedd yn edrych fel “nwdls” o gymhlethdod anhygoel o alwadau yn ôl. Nawr bod y broblem hon wedi'i datrys (gyda rhyddhau ES-15 neu ES-16), mae addewidion wedi'u hychwanegu at Javascript a gall pawb anadlu'n haws am ychydig.

Alexey Grachev: Ewch Frontend

Hyd nes i uffern Promice gyrraedd... Dydw i ddim yn gwybod sut mae'r diwydiant pen blaen yn ymdopi, ond maen nhw bob amser yn gyrru eu hunain i ryw jyngl rhyfedd. Llwyddom hefyd i wneud uffern ar addewidion. Yna fe wnaethom ddatrys y broblem hon trwy ychwanegu cyntefig newydd - cysoni / aros:

Alexey Grachev: Ewch Frontend

Mae'r broblem gydag asynchrony yn cael ei datrys. Mae Async/await yn gyntefig eithaf poblogaidd mewn amrywiol ieithoedd. Mae gan Python ac eraill y dull hwn - mae'n eithaf da. Problem wedi'i datrys.

Pa broblem sydd heb ei datrys? Cymhlethdod cynyddol y fframweithiau, cymhlethdod yr ecosystem a'r rhaglenni eu hunain.

Alexey Grachev: Ewch Frontend

  • Mae cystrawen javascript braidd yn rhyfedd. Rydyn ni i gyd yn gwybod am y problemau gydag ychwanegu arae a gwrthrych a jôcs eraill.
  • Mae javascript yn aml-batrwm. Mae hon yn system arbennig o enbyd nawr pan fo’r ecosystem yn fawr iawn:
    • mae pawb yn ysgrifennu mewn gwahanol arddulliau - mae rhai yn ysgrifennu'n strwythurol, rhai'n ysgrifennu'n swyddogaethol, mae datblygwyr gwahanol yn ysgrifennu mewn gwahanol ffyrdd;
    • o wahanol becynnau, patrymau gwahanol pan fyddwch chi'n defnyddio gwahanol becynnau;
    • mae llawer o “hwyl” gyda rhaglennu swyddogaethol yn Javasript - ymddangosodd y llyfrgell rambda a nawr ni all unrhyw un ddarllen rhaglenni a ysgrifennwyd yn y llyfrgell hon.

  • Mae hyn i gyd yn cael effaith fawr ar yr ecosystem, ac mae wedi tyfu'n anhygoel. Mae'r pecynnau yn anghydnaws â'i gilydd: mae rhai yn seiliedig ar addewidion, mae rhai yn seiliedig ar async / aros, mae rhai yn seiliedig ar alwadau yn ôl. Maen nhw hefyd yn ysgrifennu mewn patrymau gwahanol!
  • Mae hyn yn gwneud y prosiect yn anodd ei gynnal. Mae'n anodd dod o hyd i nam os na allwch ddarllen y cod.

Beth yw Web Assembly?

Daeth y bois dewr o Sefydliad Mozilla a nifer o gwmnïau eraill i fyny gyda'r fath beth â Web Assembly. Beth yw hwn?

Alexey Grachev: Ewch Frontend

  • Mae hwn yn beiriant rhithwir sydd wedi'i ymgorffori yn y porwr sy'n cefnogi'r fformat deuaidd.
  • Mae rhaglenni deuaidd yn cyrraedd yno ac yn cael eu gweithredu bron yn frodorol, hynny yw, nid oes angen i'r porwr ddosrannu holl “nwdls” cod javascript bob tro.
  • Mae pob porwr wedi datgan cefnogaeth.
  • Gan mai bytecode yw hwn, gallwch ysgrifennu casglwr ar gyfer unrhyw iaith.
  • Mae pedwar porwr mawr eisoes yn llongio gyda chefnogaeth Web Assembly.
  • Rydym yn disgwyl cefnogaeth frodorol yn Go yn fuan. Mae'r bensaernïaeth newydd hon eisoes wedi'i hychwanegu: GOARCH=wasm GOOS=js (cyn bo hir). Hyd yn hyn, yn ôl a ddeallaf, nid yw'n swyddogaethol, ond mae datganiad y bydd yn bendant yn Go.

Beth i'w wneud nawr? GopherJS

Er nad oes gennym gefnogaeth i Web Assembly, mae yna drawsgludwr fel GopherJS.

Alexey Grachev: Ewch Frontend

  • Mae cod Go yn cael ei drawsbennu i Javascript “pur”.
  • Yn rhedeg ym mhob porwr - nid oes unrhyw nodweddion newydd a gefnogir gan borwyr modern yn unig (dyma Vanilla JS, sy'n rhedeg ar unrhyw beth).
  • Mae cefnogaeth i bron popeth sydd gan Go, gan gynnwys goroutines a sianeli... popeth rydyn ni'n ei garu ac yn ei wybod cymaint.
  • Cefnogir bron y llyfrgell safonol gyfan, ac eithrio'r pecynnau hynny nad yw'n gwneud unrhyw synnwyr i'w cefnogi yn y porwr: syscall, rhyngweithiadau net (mae cleient net/http, ond dim gweinydd, ac mae'r cleient yn cael ei efelychu trwy XMLHttpRequest). Yn gyffredinol, mae'r llyfrgell safonol gyfan ar gael - dyma hi yn y porwr, dyma stdlib Go, yr ydym yn ei garu.
  • Gellir llunio'r ecosystem pecyn cyfan yn Go, yr holl atebion trydydd parti (templedu, ac ati) gan ddefnyddio GopherJS a'u rhedeg yn y porwr.

Mae GopherJS yn hawdd iawn i'w gael - dim ond pecyn Go rheolaidd ydyw. Rydyn ni'n mynd i gael, ac mae gennym ni orchymyn GopherJS i adeiladu'r cais:

Alexey Grachev: Ewch Frontend

Mae hwn yn fyd mor fach helo...

Alexey Grachev: Ewch Frontend

...Rhaglen Go reolaidd, pecyn llyfrgell fmt safonol rheolaidd a Binding Js i gyrraedd API y porwr. Bydd Println yn cael ei drawsnewid yn log consol yn y pen draw a bydd y porwr yn ysgrifennu “Helo gophers”! Mae mor syml â hynny: rydyn ni'n adeiladu GopherJS - rydyn ni'n ei lansio yn y porwr - mae popeth yn gweithio!

Beth sydd gennych chi ar hyn o bryd? Rhwymiadau

Alexey Grachev: Ewch Frontend

Mae rhwymiadau ar gyfer pob fframwaith js poblogaidd:

  • JQuery;
  • Angular.js;
  • D3.js ar gyfer plotio a gweithio gyda data mawr;
  • Ymateb.js;
  • VueJS;
  • mae cefnogaeth hyd yn oed i Electron (hynny yw, gallwn eisoes ysgrifennu cymwysiadau bwrdd gwaith ar Electron);
  • a'r peth mwyaf doniol yw WebGL (gallwn wneud cymwysiadau graffig llawn, gan gynnwys gemau gyda graffeg 3D, cerddoriaeth a'r holl bethau da);
  • a llawer o rwymiadau eraill i'r holl fframweithiau a llyfrgelloedd javascript poblogaidd.

Fframwaith

  1. Mae fframwaith gwe eisoes wedi'i ddatblygu'n benodol ar gyfer GopherJS - Vecty. Mae hwn yn analog cyflawn o React.js, ond dim ond wedi'i ddatblygu yn Go, gyda manylion GopherJS.
  2. Mae bagiau gêm (syndod!). Cefais y ddau fwyaf poblogaidd:
    • Engo;
    • Ebiten.

Byddaf yn dangos cwpl o enghreifftiau i chi o sut mae'n edrych a beth allwch chi ei ysgrifennu eisoes yn Go:

Alexey Grachev: Ewch Frontend

Neu'r opsiwn hwn (ni allwn ddod o hyd i saethwr 3D, ond efallai ei fod yn bodoli):

Alexey Grachev: Ewch Frontend

Beth ydw i'n ei gynnig?

Nawr mae'r diwydiant pen blaen yn y fath gyflwr fel y bydd yr holl ieithoedd a lefai o'r blaen o Javascript yn rhuthro yno. Nawr bydd popeth yn cael ei gasglu i mewn i “Gynulliadau Gwe”. Beth sydd ei angen arnom i gymryd ein lle haeddiannol yno fel Gophers?

Alexey Grachev: Ewch Frontend

Yn draddodiadol mae Go wedi tybio ei bod yn iaith raglennu System, ac nid oes bron unrhyw lyfrgelloedd ar gyfer gweithio gyda'r UI. Mae rhywbeth, ond mae'n hanner wedi'i adael, hanner anweithredol.

Ac yn awr yn gyfle da i wneud llyfrgelloedd UI yn Go a fydd yn rhedeg ar GopherJS! Gallwch chi ysgrifennu eich fframwaith eich hun o'r diwedd! Dyma'r amser pan allwch chi ysgrifennu fframwaith, a bydd yn un o'r rhai cyntaf a chael ei fabwysiadu'n gynnar, a byddwch chi'n seren (os yw'n fframwaith da).

Gallwch chi addasu llawer o wahanol becynnau sydd eisoes yn yr ecosystem Go i fanylion y porwr (er enghraifft, injan Template). Byddant eisoes yn gweithio, gallwch chi wneud rhwymiadau cyfleus fel y gallwch chi rendro'r cynnwys yn uniongyrchol yn y porwr yn hawdd. Hefyd, gallwch chi wneud, er enghraifft, wasanaeth a all wneud yr un peth ar y gweinydd ac ar y pen blaen, gan ddefnyddio'r un cod - popeth y mae datblygwyr pen blaen yn ei hoffi (dim ond nawr yn Go).

Gallwch chi ysgrifennu gêm! Dim ond am hwyl...

Dyna'r cyfan roeddwn i eisiau ei ddweud.

Alexey Grachev: Ewch Frontend

cwestiynau

Cwestiwn (y cyfeirir ato o hyn ymlaen fel C): – Ydw i'n ysgrifennu yn Go neu Js?

AG: – Rydych chi'n ysgrifennu rheolweithiau, sianeli, strwythurau, ymgorffori - popeth yn Go... Rydych chi'n tanysgrifio i ddigwyddiad, yn pasio swyddogaeth yno.

AT: - Felly dwi'n ysgrifennu mewn “noeth” Js?

AG: - Na, rydych chi'n ysgrifennu fel pe bai yn Go ac yn cysylltu ag API y porwr (nid yw'r API wedi newid). Gallwch chi ysgrifennu eich rhwymiadau eich hun fel bod negeseuon yn cael eu hanfon i'r sianel - nid yw'n anodd.

AT: – Beth am ffôn symudol?

AG: – Gwelais yn bendant: mae rhwymiadau ar gyfer y darn Cordova y mae Js yn ei redeg. Yn React Native - wn i ddim; efallai bod yna, efallai ddim (doedd gen i ddim diddordeb arbennig). Mae'r peiriant gêm N-go yn cefnogi'r ddau raglen symudol - iOS ac Android.

AT: – Cwestiwn am Gydosod Gwe. Mae mwy a mwy o le yn cael ei gymryd, er gwaethaf y cywasgu a'r “sipio”... A fyddwn ni ddim yn lladd y byd pen blaen fel hyn hyd yn oed yn fwy?

AG: – Mae Web Assembly yn fformat deuaidd, ac ni all deuaidd yn ddiofyn fod yn y datganiad terfynol yn fwy na thestun... Fe'ch tynnir at amser rhedeg, ond mae hyn yr un peth â llusgo'r llyfrgell Javascript safonol pan nad yw yno, felly rydym ni defnyddio ychydig o Lodash. Wn i ddim faint mae Lodash yn ei gymryd.

AT: - Yn amlwg llai nag amser rhedeg...

AG: – Mewn Javascript “pur”?

AT: - Oes. Rydyn ni'n ei gywasgu cyn ei anfon ...

AG: – Ond testun yw hwn... Yn gyffredinol, mae megabeit yn ymddangos fel llawer, ond dyna i gyd (mae gennych chi'r amser rhedeg cyfan). Nesaf, byddwch yn ysgrifennu eich rhesymeg busnes eich hun, a fydd yn cynyddu eich deuaidd 1%. Hyd yn hyn dydw i ddim yn gweld hyn yn lladd y frontend. Ar ben hynny, bydd Web Assembly yn gweithio'n gyflymach na Javascript am y rheswm amlwg - nid oes angen ei dosrannu.

AT: – Mae hwn yn bwynt dadleuol o hyd... Nid oes unrhyw gyfeiriad at weithredu “Vasma” (Cynulliad Gwe) eto fel y gellir barnu yn ddiamwys. Yn gysyniadol, ie: rydym i gyd yn deall y dylai deuaidd fod yn gyflymach, ond mae gweithrediad presennol yr un V8 yn effeithlon iawn.

AG: - Ydw.

AT: – Mae casglu yno’n gweithio’n cŵl iawn ac nid yw’n ffaith y bydd mantais fawr.

AG: - Mae cydosod gwe hefyd yn cael ei wneud gan fechgyn mawr.

AT: – Ymddengys i mi ei bod yn dal yn anodd barnu Web Assembly. Mae sgyrsiau wedi bod ers blynyddoedd lawer bellach, ond ychydig o gyflawniadau gwirioneddol y gellir eu teimlo.

AG: - Efallai. Cawn weld.

AT: – Does gennym ni ddim problemau ar y backend... Efallai y dylem adael y problemau hyn ar y blaen? Pam mynd yno?

AG: - Mae'n rhaid i ni gadw staff o weithwyr rheng flaen.

Rhai hysbysebion 🙂

Diolch am aros gyda ni. Ydych chi'n hoffi ein herthyglau? Eisiau gweld cynnwys mwy diddorol? Cefnogwch ni trwy osod archeb neu argymell i ffrindiau, cwmwl VPS i ddatblygwyr o $4.99, analog unigryw o weinyddion lefel mynediad, a ddyfeisiwyd gennym ni ar eich cyfer chi: Y gwir i gyd am VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps o $ 19 neu sut i rannu gweinydd? (ar gael gyda RAID1 a RAID10, hyd at 24 craidd a hyd at 40GB DDR4).

Dell R730xd 2 gwaith yn rhatach yng nghanolfan ddata Equinix Haen IV yn Amsterdam? Dim ond yma 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV o $199 yn yr Iseldiroedd! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - o $99! Darllenwch am Sut i adeiladu seilwaith Corp. dosbarth gyda'r defnydd o weinyddion Dell R730xd E5-2650 v4 gwerth 9000 ewro am geiniog?

Ffynhonnell: hab.com

Ychwanegu sylw