Alexey Grachev: Go Frontend

Kyiv Go Meetup maí 2018:

Alexey Grachev: Go Frontend

Fremstur: - Hæ allir! Þakka þér fyrir að vera hér! Í dag höfum við tvo opinbera fyrirlesara - Lyosha og Vanya. Það verða tveir í viðbót ef við höfum nægan tíma. Fyrsti ræðumaður er Alexey Grachev, hann mun segja okkur frá GopherJS.

Alexey Grachev (hér eftir – AG): – Ég er Go verktaki og skrifa vefþjónustur í Go. Stundum þarftu að takast á við framenda, stundum þarftu að komast inn í það handvirkt. Mig langar að tala um reynslu mína og rannsóknir á Go á framendanum.

Goðsögnin er þessi: fyrst munum við tala um hvers vegna við viljum keyra Go á framendanum, síðan munum við tala um hvernig þetta er hægt að gera. Það eru tvær leiðir - Web Assembly og GopherJS. Við skulum sjá hver staðan er á þessum lausnum og hvað er hægt að gera.

Hvað er að framendanum?

Eru allir sammála um að allt sé í lagi með framendann?

Alexey Grachev: Go Frontend

Eru ekki næg próf? Hæg bygging? Vistkerfi? Fínt.

Varðandi framenda, þá líkar mér við tilvitnunina sem einn af framenda verktaki sagði í bók sinni:

Alexey Grachev: Go Frontend

Javascript er ekki með tegundakerfi. Nú mun ég nefna vandamálin sem ég lenti í í starfi mínu og útskýra hvernig þau eru leyst.

Gerðarkerfið almennt er varla hægt að kalla tegundakerfi í Javasript - það eru línur sem gefa til kynna tegund hlutarins, en í raun hefur þetta ekkert með gerðir að gera. Þetta vandamál er leyst í TypeScript (viðbót við Javasript) og Flow (stöðva-gerð afgreiðslumaður í Javascript). Reyndar hefur framhliðin þegar náð því marki að leysa vandamálið með slæmu tegundarkerfi í Javascript.

Alexey Grachev: Go Frontend

Það er ekkert venjulegt bókasafn í vafranum sem slíkum - það eru nokkrir innbyggðir hlutir og „töfra“aðgerðir í vöfrum. En í Javascript er ekkert venjulegt bókasafn sem slíkt. Þetta vandamál var þegar leyst einu sinni af jQuery (allir notuðu jQuery með öllum frumgerðum, hjálparum, aðgerðum sem þurfti til að virka). Nú nota allir Lodash:

Alexey Grachev: Go Frontend

Hringingarhelvíti. Ég held að allir hafi séð Javascript kóða fyrir um það bil 5 árum síðan, og hann leit út eins og „núðla“ af ótrúlegum flóknum hringingum. Nú hefur þetta vandamál verið leyst (með útgáfu ES-15 eða ES-16), loforðum hefur verið bætt við Javascript og allir geta andað léttar um stund.

Alexey Grachev: Go Frontend

Þangað til Promice helvíti kom... Ég veit ekki hvernig framhliðariðnaðurinn stjórnar, en þeir keyra sig alltaf inn í einhvern undarlegan frumskóga. Okkur tókst líka að gera helvítis loforð. Síðan leystum við þetta vandamál með því að bæta við nýju frumstæðu - ósamstillt/bíður:

Alexey Grachev: Go Frontend

Vandamálið með ósamstillingu er leyst. Async/await er nokkuð vinsælt frumefni á ýmsum tungumálum. Python og aðrir hafa þessa nálgun - hún er nokkuð góð. Vandamál leyst.

Hvaða vandamál er ekki leyst? Stöðugt vaxandi flókið ramma, flókið vistkerfi og forritin sjálf.

Alexey Grachev: Go Frontend

  • Javascript setningafræði er svolítið skrítið. Við þekkjum öll vandamálin við að bæta við fylki og hlut og öðrum brandara.
  • Javascript er margþætt. Þetta er sérstaklega brýnt kerfi núna þegar vistkerfið er mjög stórt:
    • allir skrifa í mismunandi stílum - sumir skrifa skipulagslega, sumir skrifa virkni, mismunandi forritarar skrifa öðruvísi;
    • úr mismunandi pakka, mismunandi hugmyndafræði þegar þú notar mismunandi pakka;
    • það er mikið “skemmtilegt” við virka forritun í Javasript - rambda bókasafnið birtist og nú getur enginn lesið forrit sem eru skrifuð í þessu safni.

  • Allt þetta hefur mikil áhrif á vistkerfið og það hefur vaxið ótrúlega. Pakkarnir eru ósamrýmanlegir hver öðrum: sumir eru byggðir á loforðum, sumir eru byggðir á ósamstillingu/bíður, sumir byggjast á svarhringingum. Þeir skrifa líka í mismunandi hugmyndafræði!
  • Þetta gerir verkefninu erfitt að viðhalda. Það er erfitt að finna villu ef þú getur ekki lesið kóðann.

Hvað er vefsamsetning?

Hugrökku strákarnir frá Mozilla Foundation og fjölda annarra fyrirtækja komu með eitthvað sem heitir Web Assembly. Hvað er þetta?

Alexey Grachev: Go Frontend

  • Þetta er sýndarvél innbyggð í vafranum sem styður tvöfalda sniðið.
  • Tvöfaldur forrit komast þangað og eru keyrð nánast innfæddur, það er að vafrinn þarf ekki að flokka allar „núðlur“ af javascript kóða í hvert skipti.
  • Allir vafrar hafa lýst yfir stuðningi.
  • Þar sem þetta er bætikóði geturðu skrifað þýðanda fyrir hvaða tungumál sem er.
  • Fjórir helstu vafrar eru nú þegar sendir með stuðningi við vefsamsetningu.
  • Við eigum von á innfæddum stuðningi í Go fljótlega. Þessum nýja arkitektúr hefur þegar verið bætt við: GOARCH=wasm GOOS=js (bráðum). Svo langt sem ég skil það er það ekki virkt, en það er yfirlýsing um að það verði örugglega í Go.

Hvað á að gera núna? GopherJS

Þó að við höfum ekki stuðning fyrir vefsamsetningu, þá er til transpiler eins og GopherJS.

Alexey Grachev: Go Frontend

  • Go kóða er umbreytt í „hreint“ Javascript.
  • Keyrir í öllum vöfrum - það eru engir nýir eiginleikar sem eru aðeins studdir af nútíma vöfrum (þetta er Vanilla JS, sem keyrir á hvað sem er).
  • Það er stuðningur við næstum allt sem Go hefur, þar á meðal goroutines og rásir... allt sem við elskum og þekkjum svo mikið.
  • Næstum allt staðlaða bókasafnið er stutt, fyrir utan þá pakka sem það þýðir ekkert að styðja í vafranum: syscall, net interactions (það er net/http viðskiptavinur, en enginn þjónn, og biðlarinn er herma eftir XMLHttpRequest). Almennt séð er allt staðlað bókasafn tiltækt - hér er það í vafranum, hér er stdlib frá Go, sem við elskum.
  • Allt pakkavistkerfið í Go, allar þriðja aðila lausnir (sniðmát osfrv.) er hægt að setja saman með GopherJS og keyra í vafranum.

GopherJS er mjög auðvelt að fá - þetta er bara venjulegur Go pakki. Við förum að sækja og við höfum GopherJS skipun til að byggja forritið:

Alexey Grachev: Go Frontend

Þetta er svo lítill halló heimur...

Alexey Grachev: Go Frontend

...Venjulegt Go forrit, venjulegur fmt pakki fyrir bókasafn og Binding Js til að ná í API vafra. Println verður að lokum breytt í console log og vafrinn mun skrifa „Halló gophers“! Svo einfalt er það: við smíðum GopherJS - við ræsum það í vafranum - allt virkar!

Hvað ertu með í augnablikinu? Bindingum

Alexey Grachev: Go Frontend

Það eru bindingar fyrir alla vinsæla js ramma:

  • JQuery;
  • Angular.js;
  • D3.js til að plotta og vinna með stór gögn;
  • React.js;
  • VueJS;
  • það er jafnvel stuðningur fyrir Electron (það er, við getum nú þegar skrifað skrifborðsforrit á Electron);
  • og það fyndnasta er WebGL (við getum búið til forrit í fullri mynd, þar á meðal leiki með þrívíddargrafík, tónlist og allt gott);
  • og margar aðrar bindingar við alla vinsæla javascript ramma og bókasöfn.

Framework

  1. Það er veframmi þegar þróaður sérstaklega fyrir GopherJS - Vecty. Þetta er fullgild hliðstæða React.js, en aðeins þróuð í Go, með sérstöðu GopherJS.
  2. Það eru leiktöskur (óvart!). Mér fannst tveir vinsælustu:
    • Engó;
    • Ebiten.

Ég skal sýna þér nokkur dæmi um hvernig það lítur út og hvað þú getur nú þegar skrifað í Go:

Alexey Grachev: Go Frontend

Eða þessi valkostur (ég fann ekki 3D skotleik, en kannski er hann til):

Alexey Grachev: Go Frontend

Hvað er ég að bjóða?

Nú er framhliðariðnaðurinn í því ástandi að öll tungumálin sem áður hrópuðu úr Javascript munu þjóta þangað. Nú verður allt sett saman í „vefsamsetningar“. Hvað þurfum við til að taka okkar réttmæta sess þar sem Gophers?

Alexey Grachev: Go Frontend

Go hefur jafnan gengið út frá því að það sé kerfisforritunarmál og það eru nánast engin bókasöfn til að vinna með HÍ. Það er eitthvað, en það er hálf yfirgefið, hálf óvirkt.

Og nú er gott tækifæri til að búa til HÍ bókasöfn í Go sem munu keyra á GopherJS! Þú getur loksins skrifað þinn eigin ramma! Þetta er tíminn þegar þú getur skrifað ramma, og það verður einn af þeim fyrstu og fá snemma samþykkt, og þú verður stjarna (ef það er góður rammi).

Þú getur aðlagað marga mismunandi pakka sem eru þegar í Go vistkerfinu að sérkennum vafrans (til dæmis sniðmát vél). Þeir munu nú þegar virka, þú getur búið til þægilegar bindingar þannig að þú getur auðveldlega skilað efnið beint í vafranum. Auk þess geturðu til dæmis búið til þjónustu sem getur framkvæmt það sama á þjóninum og á framendanum, með því að nota sama kóða - allt sem framhliðarframleiðendum líkar við (aðeins núna í Go).

Þú getur skrifað leik! Bara til gamans…

Það var allt sem ég vildi segja.

Alexey Grachev: Go Frontend

spurningar

Spurning (hér eftir nefnd Q): – Skrifa ég í Go eða Js?

AG: – Þú skrifar venjur, rásir, mannvirki, innfellingu – allt í Go... Þú gerist áskrifandi að viðburði, sendir aðgerð þangað.

IN: – Svo ég skrifa í „nöktum“ Js?

AG: – Nei, þú skrifar eins og í Go og tengist við API vafra (API hefur ekki breyst). Þú getur skrifað þínar eigin bindingar þannig að skilaboð séu send á rásina - það er ekki erfitt.

IN: — Hvað með farsíma?

AG: – Ég sá örugglega: það eru bindingar fyrir Cordova plásturinn sem Js rekur. In React Native - ég veit það ekki; kannski er það, kannski ekki (ég hafði ekki sérstakan áhuga). N-go leikjavélin styður bæði farsímaforrit - bæði iOS og Android.

IN: – Spurning um vefsamsetningu. Sífellt meira pláss er tekið, þrátt fyrir samþjöppun og „zipping“... Ætlum við ekki að drepa framendaheiminn á þennan hátt enn meira?

AG: – Web Assembly er tvíundarsnið og tvíundir geta sjálfgefið ekki verið í lokaútgáfu meira en texti... Þú ert dreginn að keyrslutíma, en þetta er það sama og að draga út venjulegt Javascript bókasafn þegar það er ekki til staðar, svo við notaðu Lodash. Ég veit ekki hversu mikið Lodash tekur.

IN: – Augljóslega minna en keyrslutími...

AG: – Í „hreinu“ Javascript?

IN: - Já. Við þjöppum því saman áður en við sendum það...

AG: – En þetta er texti... Almennt séð virðist megabæt vera mikið, en það er allt (þú hefur allan keyrslutímann). Næst skrifar þú þína eigin viðskiptarökfræði, sem mun auka tvöfaldann þinn um 1%. Enn sem komið er sé ég ekki að þetta drepi framendann. Þar að auki mun Web Assembly virka hraðar en Javascript af augljósri ástæðu - það þarf ekki að flokka það.

IN: – Þetta er enn umdeilt atriði... Það er ekki enn til nein tilvísunarútfærsla á „Vasma“ (vefþing) svo að hægt sé að dæma ótvírætt. Hugmyndalega, já: við skiljum öll að tvöfaldur ætti að vera hraðari, en núverandi útfærsla á sama V8 er mjög skilvirk.

AG: - Já.

IN: – Samantekt þarna virkar mjög flott og það er ekki staðreynd að það verði mikill kostur.

AG: – Vefsamsetning er líka gerð af stórum krökkum.

IN: – Mér sýnist að enn sé erfitt að dæma um vefsamsetningu. Það hafa verið samræður í mörg ár núna, en það eru fáir alvöru afrek sem hægt er að finna fyrir.

AG: - Kannski. Við munum sjá.

IN: – Við höfum ekki vandamál á bakendanum... Kannski ættum við að skilja þessi vandamál eftir á framendanum? Af hverju að fara þangað?

AG: - Við verðum að halda á starfsfólki í fremstu víglínu.

Nokkrar auglýsingar 🙂

Þakka þér fyrir að vera hjá okkur. Líkar þér við greinarnar okkar? Viltu sjá meira áhugavert efni? Styðjið okkur með því að leggja inn pöntun eða mæla með því við vini, cloud VPS fyrir forritara frá $4.99, einstök hliðstæða upphafsþjóna, sem var fundið upp af okkur fyrir þig: Allur sannleikurinn um VPS (KVM) E5-2697 v3 (6 kjarna) 10GB DDR4 480GB SSD 1Gbps frá $19 eða hvernig á að deila netþjóni? (fáanlegt með RAID1 og RAID10, allt að 24 kjarna og allt að 40GB DDR4).

Dell R730xd 2x ódýrari í Equinix Tier IV gagnaveri í Amsterdam? Aðeins hér 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 sjónvarp frá $199 í Hollandi! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - frá $99! Lestu um Hvernig á að byggja upp infrastructure Corp. flokki með notkun Dell R730xd E5-2650 v4 netþjóna að verðmæti 9000 evrur fyrir eyri?

Heimild: www.habr.com

Bæta við athugasemd