Alexey Grachev: Alu i luma

Kyiv Go Meetup Me 2018:

Alexey Grachev: Alu i luma

Taʻitaʻi: - Talofa uma! Faafetai mo lou i ai iinei! O aso nei e lua a matou failauga aloaia - Lyosha ma Vanya. E toe lua isi pe a lava le taimi. O le failauga muamua o Alexey Grachev, o le a ia taʻu mai e uiga ia GopherJS.

Alexey Grachev (o mulimuli ane - AG): - O aʻu o le Go developer, ma ou te tusia auaunaga i luga ole laiga ile Go. O nisi taimi e tatau ona e feagai ma le pito i luma, o nisi taimi e te alu i totonu ma le lima. Ou te fia talanoa e uiga i loʻu poto masani ma suʻesuʻega ile Go on the frontend.

O le tala lenei: muamua o le a tatou talanoa e uiga i le mafuaaga tatou te mananao e tamoe Alu i le pito i luma, ona tatou talanoa lea pe faapefea ona fai lenei mea. E lua auala - Web Assembly ma GopherJS. Sei o tatou va'ai po'o le a le tulaga o nei fofo ma mea e mafai ona fai.

O le a le mea o tupu i le pito i luma?

E ioe tagata uma e lelei mea uma ile pito i luma?

Alexey Grachev: Alu i luma

E le lava ea su'ega? Fausia lemu? Ecosystem? Lelei.

E tusa ai ma le pito i luma, ou te fiafia i le upusii na fai mai ai se tasi o le au atinaʻe pito i luma i lana tusi:

Alexey Grachev: Alu i luma

Javascript e leai se ituaiga faiga. O lea la o le a ou taʻua faafitauli na ou feagai i le faagasologa o laʻu galuega ma faamatala pe faapefea ona foia.

Ole ituaiga faiga lautele e le mafai ona taʻua o se ituaiga faiga i Javasript - o loʻo i ai laina e faʻaalia ai le ituaiga o mea, ae o le mea moni e leai se mea e fai i ituaiga. O lenei faʻafitauli e foia i le TypeScript (o se faʻaopoopoga i le Javasript) ma le Flow (o se siaki-ituaiga siaki i Javascript). O le mea moni, o le pito i luma ua uma ona oʻo i le tulaga o le foia o le faʻafitauli o se faiga leaga ituaiga i Javascript.

Alexey Grachev: Alu i luma

E leai se faletusi masani i totonu o le browser e pei o lea - o loʻo i ai ni mea faʻapipiʻi ma "magic" galuega i totonu o suʻesuʻega. Ae i le Javascript e leai se faletusi masani e pei o lea. O lenei faʻafitauli ua uma ona foia e le jQuery (tagata uma na faʻaaogaina le jQuery ma faʻataʻitaʻiga uma, fesoasoani, galuega e manaʻomia e galue ai). O lea ua faʻaaogaina e tagata uma Lodash:

Alexey Grachev: Alu i luma

Callback seoli. Ou te manatu na vaʻaia e tagata uma le Javascript code e uiga i le 5 tausaga talu ai, ma e foliga mai o se "noodle" o se faʻalavelave mataʻutia o toe foʻi. O lenei ua foia lenei faafitauli (faatasi ai ma le tatalaina o le ES-15 poʻo le ES-16), folafolaga ua faʻaopoopoina i le Javascript ma e mafai e tagata uma ona manava faigofie mo sina taimi.

Alexey Grachev: Alu i luma

Seia oʻo mai le Promice hell ... Ou te le iloa pe faʻafefea ona faʻatautaia le pisinisi pito i luma, ae latou te tulia i latou lava i se vaomatua ese. Na mafai foʻi ona matou faia seoli i folafolaga. Ona matou foia lea o lenei faʻafitauli e ala i le faʻaopoopoina o se mea fou muamua - async/wait:

Alexey Grachev: Alu i luma

Ua foia le faafitauli i le asynchrony. Async/wait ose lauiloa lauiloa i gagana eseese. Python ma isi o loʻo i ai lenei auala - e lelei tele. Ua foia faafitauli.

O le a le faafitauli e le o foia? O le fa'ateleina o le lavelave o auivi, o le lavelave o le si'osi'omaga ma polokalame lava ia.

Alexey Grachev: Alu i luma

  • Javascript syntax e fai si ese. Matou te iloa uma faʻafitauli i le faʻaopoopoina o se laina ma se mea ma isi tausuaga.
  • Javascript e tele-paradigm. O se faiga fa'apitoa lea i le taimi nei pe a matua tele le si'osi'omaga:
    • e tusitusi tagata uma i sitaili eseese - o nisi e tusitusi faʻatulagaina, o nisi e tusitusi faʻatino, eseʻese atinaʻe e tusitusi ese;
    • mai afifi eseese, paradigms eseese pe a e faʻaogaina afifi eseese;
    • o loʻo i ai le tele o le "fiafia" faʻatasi ai ma polokalame faʻatino i Javasript - o le rambda library na faʻaalia ma o lea e leai se tasi e mafai ona faitau polokalame o loʻo tusia i lenei faletusi.

  • O nei mea uma e faia ai se aafiaga tele i le siosiomaga faʻanatura, ma ua matua faʻatupulaia. O afifi e le fetaui le tasi ma le isi: o nisi e faʻavae i luga o folafolaga, o nisi e faʻavae i luga o le async / faʻatali, o nisi e faʻavae i tua. Latou te tusitusi foʻi i faʻataʻitaʻiga eseese!
  • O le mea lea e faigata ai ona tausia le poloketi. E faigata ona su'e se pusa pe a le mafai ona e faitauina le code.

O le a le Web Assembly?

O tagata totoa mai le Mozilla Foundation ma le tele o isi kamupani na o mai ma se mea e pei o le Web Assembly. O le a lea?

Alexey Grachev: Alu i luma

  • Ole masini fa'apolopolo lea ua fausia ile su'esu'ega e lagolagoina le fa'avasegaina binary.
  • O polokalame binary e oʻo i ai ma e toetoe lava a faʻatinoina, o lona uiga, e le manaʻomia e le browser ona faʻasalalau uma "noodles" o le javascript code i taimi uma.
  • O su'esu'ega uma ua fa'ailoa le lagolago.
  • Talu ai o le bytecode lenei, e mafai ona e tusia se faʻapipiʻi mo soʻo se gagana.
  • E fa su'esu'ega tetele ua uma ona va'aia ma le Web Assembly lagolago.
  • O lo'o matou fa'amoemoe le lagolago a le atunu'u i Go i se taimi lata mai. O lenei fausaga fou ua uma ona faaopoopo: GOARCH=wasm GOOS=js (e lata). E oʻo mai i le taimi nei, e pei ona ou malamalama i ai, e le o aoga, ae o loʻo i ai se faʻamatalaga o le a mautinoa lava ile Go.

O le a le mea e fai nei? GopherJS

E ui e leai se matou lagolago mo le Web Assembly, o loʻo i ai se transpiler pei o GopherJS.

Alexey Grachev: Alu i luma

  • Alu code ua transpiled i "mama" Javascript.
  • E tamo'e i su'esu'ega uma - e leai ni mea fou e na'o tagata su'esu'e fa'aonaponei e lagolagoina (o le Vanilla JS lea, lea e fa'aoga i so'o se mea).
  • E i ai le lagolago mo toetoe lava o mea uma e maua e Go, e aofia ai goroutine ma auala ... mea uma tatou te fiafia i ai ma iloa tele.
  • Toeitiiti lava o le faletusi masani atoa e lagolagoina, sei vagana ai na afifi e leai se uiga e lagolagoina i le browser: syscall, fesoʻotaʻiga upega (o loʻo i ai se upega / http client, ae leai se 'auʻaunaga, ma o le kalani e faʻataʻitaʻia e ala i XMLHttpRequest). I se tulaga lautele, o loʻo avanoa le faletusi masani - o loʻo i totonu o le suʻega, o le Go's stdlib, matou te fiafia i ai.
  • O le faʻalapotopotoga faʻanatura atoa i Go, o fofo uma a isi vaega (faʻataʻitaʻiga, ma isi) e mafai ona tuʻufaʻatasia e faʻaaoga ai le GopherJS ma taʻavale i totonu o le browser.

GopherJS e matua faigofie lava ona maua - ua na'o se afifi Go masani. Matou te o e maua, ma o loʻo i ai le matou GopherJS poloaiga e fausia le talosaga:

Alexey Grachev: Alu i luma

O se tama'i talofa lenei lalolagi...

Alexey Grachev: Alu i luma

...O se polokalame masani Go, o se pusa masani masani fmt faletusi ma Binding Js e o'o atu i le browser API. Println o le a iu lava ina liua i le faʻamafanafana log ma o le browser o le a tusia "Talofa gophers"! E faigofie lava: matou te faia le GopherJS fau - matou te tatalaina i totonu o le suʻega - e aoga mea uma!

O le a lau mea i le taimi nei? Nonoa

Alexey Grachev: Alu i luma

O loʻo i ai faʻamauga mo faʻasalalauga taʻutaʻua uma o le js:

  • JQuery;
  • Angular.js;
  • D3.js mo le taupulepule ma le galue i faʻamatalaga tetele;
  • React.js;
  • VueJS;
  • o loʻo i ai foʻi le lagolago mo Electron (o lona uiga, ua mafai ona matou tusia tusi talosaga i luga o le Electron);
  • ma o le mea e sili ona malie o le WebGL (e mafai ona tatou faia faʻataʻitaʻiga atoa, e aofia ai taʻaloga ma ata 3D, musika ma mea lelei uma);
  • ma le tele o isi fa'amauga i fa'ava'a ma faletusi ta'uta'ua javascript.

faavaa

  1. O loʻo i ai se faʻasalalauga i luga ole laiga ua uma ona atiaʻe faʻapitoa mo GopherJS - Vecty. O se faʻataʻitaʻiga atoa lea o React.js, ae naʻo le atinaʻeina i Go, faʻatasi ai ma faʻamatalaga patino a GopherJS.
  2. E iai ato ta'aloga (fa'ate'ia!). Na ou mauaina le lua sili ona lauiloa:
    • Engo;
    • Ebiten.

O le a ou faʻaali atu ia te oe ni faʻataʻitaʻiga o foliga ma mea e mafai ona e tusia i le Go:

Alexey Grachev: Alu i luma

Po'o lenei filifiliga (E le'i mafai ona ou mauaina se fanafana 3D, ae atonu o lo'o i ai):

Alexey Grachev: Alu i luma

O le a le mea ou te ofoina atu?

O le taimi nei o le pisinisi pito i luma o loʻo i ai i se tulaga o gagana uma na tagi muamua mai Javascript o le a faanatinati atu iina. O le taimi nei o mea uma o le a tuʻufaʻatasia i "Web Assemblies". O le ā e manaʻomia e fai ai lo tatou tulaga saʻo i inā o ni Gophers?

Alexey Grachev: Alu i luma

E masani ona manatu Go o se gagana polokalame polokalame, ma e toetoe lava leai ni faletusi e galulue ai ma le UI. E i ai se mea, ae o le afa tu'ulafoa'i, afa le aoga.

Ma o se avanoa lelei lenei e fai ai faletusi UI i Go lea o le a tamoʻe ile GopherJS! E mafai mulimuli ane ona e tusia lau lava auivi! O le taimi lea e mafai ai ona e tusia se auivi, ma o le a avea ma se tasi o le muamua ma maua vave le vaetamaina, ma o le a avea oe ma se fetu (pe afai o se auivi lelei).

E mafai ona e fetuutuuna'i le tele o afifi eseese ua uma ona i totonu o le Go ecosystem i mea patino o le browser (mo se faataitaiga, Template engine). O le a latou galulue, e mafai ona e faia ni fusifusiga faigofie ina ia faigofie ona e tuʻuina saʻo mea i totonu o le browser. Ma le isi, e mafai ona e faia, mo se faʻataʻitaʻiga, se auaunaga e mafai ona tuʻuina atu le mea lava e tasi i luga o le 'auʻaunaga ma luga o le pito i luma, faʻaaoga le code tutusa - mea uma e fiafia i ai le au atinaʻe pito i luma (naʻo le taimi nei i Go).

E mafai ona e tusia se taaloga! Na'o le fiafia…

Na pau lava le mea sa ou manao e fai atu ai.

Alexey Grachev: Alu i luma

Au fesili

Fesili (e ta'ua mulimuli ane o le Q): – Pe ou te tusitusi i le Go po o le Js?

AG: - E te tusia masani, auala, fausaga, faʻapipiʻi - mea uma i Go ... E te lesitala i se mea na tupu, pasi se galuega iina.

I: – O lea ou te tusi i le “lelavā” Js?

AG: - Leai, e te tusitusi e pei o le Alu ma faʻafesoʻotaʻi i le browser API (e leʻi suia le API). E mafai ona e tusia au lava fusia ina ia lafo atu feʻau i le alalaupapa - e le faigata.

I: – Ae faapefea le telefoni feaveai?

AG: - Na ou mautinoa lava: o loʻo i ai fusi mo le Cordova patch o loʻo tamoʻe e Js. I le React Native - Ou te le iloa; masalo e iai, atonu e leai (ou te leʻi fiafia tele). O le afi ta'aloga N-go e lagolagoina uma talosaga feavea'i - iOS ma le Android.

I: – Fesili e uiga i Web Assembly. O le tele ma le tele o avanoa o loʻo faʻaaogaina, e ui lava i le faʻamalosi ma le "zipping" ... Pe tatou te le fasiotia ea le pito i luma o le lalolagi i lenei auala e sili atu?

AG: - Web Assembly o se faʻatulagaga binary, ma le binary e ala i le faaletonu e le mafai ona i ai i le faʻasalalauga mulimuli e sili atu nai lo tusitusiga ... E tosoina oe i le taʻavale, ae e tutusa lava ma le tosoina o le faletusi Javascript masani pe a le o iai, o lea matou fa'aaoga nisi Lodash . Ou te le iloa po o le a le tele e ave e Lodash.

I: - E manino lava e itiiti ifo nai lo le taʻavale ...

AG: – I le “mama” Javascript?

I: - Ioe. Matou te fa'apipi'i a'o le'i tu'uina atu...

AG: - Ae o le tusitusiga lenei ... I se tulaga lautele, o le megabyte e foliga mai e tele, ae na o le pau lava (o loʻo ia te oe le taimi atoa). Le isi, e te tusia lau lava pisinisi faʻatatau, lea o le a faʻateleina lau binary e 1%. E o'o mai i le taimi nei ou te le'i va'ai i lenei fa'amamateina o le pito i luma. E le gata i lea, o le Web Assembly o le a galue vave nai lo Javascript mo le mafuaaga manino - e le manaʻomia ona faʻasalalau.

I: - O loʻo avea pea lenei mea ma finauga ... E leʻi iai lava se faʻataʻitaʻiga o le faʻatinoina o le "Vasma" (Web Assembly) ina ia mafai ai e se tasi ona faʻamasino ma le le faʻamaonia. Faʻamatalaga, ioe: matou te malamalama uma lava e tatau ona vave le binary, ae o le faʻatinoga o loʻo iai nei o le V8 tutusa e matua lelei lava.

AG: - Ioe.

I: - O le tuʻufaʻatasiga iina e aoga tele ma e le o se mea moni o le ai ai se avanoa tele.

AG: - Web Assembly e faia foi e tagata tetele.

I: - E foliga mai ia te aʻu e faigata lava ona faʻamasinoina le Web Assembly. Ua tele tausaga o faia talanoaga i le taimi nei, ae e itiiti ni mea moni na ausia e mafai ona lagonaina.

AG: - Masalo. O le a tatou vaai.

I: - E leai ni a matou faʻafitauli i le pito i tua ... Masalo e tatau ona tatou tuʻu nei faafitauli ile pito i luma? Aisea e alu ai iina?

AG: - E tatau ona matou tausia se aufaigaluega o tagata faigaluega pito i luma.

O nisi faʻasalalauga 🙂

Faafetai mo le nofo faatasi ma i matou. E te fiafia i a matou tala? E te mana'o e va'ai i mea e sili atu ona manaia? Lagolago i matou e ala i le tuʻuina atu o se faʻatonuga pe fautuaina i uo, cloud VPS mo tagata atiae mai le $4.99, o se faʻatusa tulaga ese o sapalai tulaga ulufale, lea na matou faia mo oe: O le mea moni atoa e uiga i VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai le $ 19 pe faʻafefea ona faʻasoa se server? (avanoa ma RAID1 ma RAID10, e oʻo atu i 24 cores ma oʻo atu i le 40GB DDR4).

Dell R730xd 2x taugofie i Equinix Tier IV nofoaga autu o faamatalaga i Amsterdam? Na'o iinei 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai le $199 i Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai le $99! Faitau e uiga i Fa'afefea ona fausia infrastructure corp. vasega faʻatasi ma le faʻaogaina o Dell R730xd E5-2650 v4 servers aoga 9000 euros mo se pene?

puna: www.habr.com

Faaopoopo i ai se faamatalaga