Aleksejs Gračevs: Go Frontend

Kyiv Go Meetup 2018. gada maijs:

Aleksejs Gračevs: Go Frontend

Vadošais: - Sveiki visiem! Paldies, ka esat šeit! Šodien mums ir divi oficiālie runātāji - Lyosha un Vanya. Būs vēl divi, ja mums pietiks laika. Pirmais runātājs ir Aleksejs Gračevs, viņš mums pastāstīs par GopherJS.

Aleksejs Gračevs (turpmāk – AG): – Esmu Go izstrādātājs un rakstu tīmekļa pakalpojumus programmā Go. Dažreiz jums ir jātiek galā ar frontend, dažreiz jums ir jāiekļūst tajā manuāli. Es vēlos runāt par savu pieredzi un pētījumiem Go on frontend.

Leģenda ir šāda: vispirms mēs runāsim par to, kāpēc mēs vēlamies palaist Go priekšgalā, pēc tam mēs runāsim par to, kā to var izdarīt. Ir divi veidi – Web Assembly un GopherJS. Apskatīsim, kāds ir šo risinājumu statuss un ko var darīt.

Kas vainas priekšgalam?

Vai visi piekrīt, ka ar frontendu viss ir kārtībā?

Aleksejs Gračevs: Go Frontend

Vai nav pietiekami daudz testu? Lēna uzbūve? Ekosistēma? Labi.

Attiecībā uz priekšgalu man patīk citāts, ko viens no priekšgala izstrādātājiem teica savā grāmatā:

Aleksejs Gračevs: Go Frontend

Javascript nav tipu sistēmas. Tagad nosaukšu problēmas, ar kurām saskāros darba gaitā, un paskaidrošu, kā tās tiek risinātas.

Tipu sistēmu kopumā Javasriptā diez vai var saukt par tipu sistēmu - ir rindas, kas norāda objekta veidu, bet patiesībā tam nav nekāda sakara ar tipiem. Šī problēma ir atrisināta programmā TypeScript (Javasript papildinājums) un Flow (Javascript statiskā tipa pārbaudītājs). Faktiski priekšgals jau ir sasniedzis punktu, lai atrisinātu Javascript slikta tipa sistēmas problēmu.

Aleksejs Gračevs: Go Frontend

Pārlūkprogrammā nav standarta bibliotēkas - pārlūkprogrammās ir daži iebūvēti objekti un “burvju” funkcijas. Bet Javascript nav standarta bibliotēkas kā tādas. Šo problēmu vienreiz jau atrisināja jQuery (visi izmantoja jQuery ar visiem prototipiem, palīgiem, funkcijām, kas bija nepieciešamas darbam). Tagad visi izmanto Lodash:

Aleksejs Gračevs: Go Frontend

Atzvanīšanas elle. Es domāju, ka visi redzēja Javascript kodu pirms aptuveni 5 gadiem, un tas izskatījās kā “nūdele” ar neticamu atzvanīšanas sarežģītību. Tagad šī problēma ir atrisināta (ar ES-15 vai ES-16 iznākšanu), Javascript ir pievienoti solījumi un visi uz brīdi var uzelpot.

Aleksejs Gračevs: Go Frontend

Līdz Promice elle ieradās... Es nezinu, kā priekšgala industrija tiek galā, bet viņi vienmēr iedzen sevi dīvainos džungļos. Mums izdevās arī solīt elli. Tad mēs atrisinājām šo problēmu, pievienojot jaunu primitīvu - async/await:

Aleksejs Gračevs: Go Frontend

Asinhronijas problēma ir atrisināta. Async/await ir diezgan populārs primitīvs dažādās valodās. Python un citiem ir šāda pieeja - tā ir diezgan laba. Problēma atrisināta.

Kāda problēma nav atrisināta? Eksponenciāli pieaugošā ietvaru sarežģītība, ekosistēmas un pašu programmu sarežģītība.

Aleksejs Gračevs: Go Frontend

  • Javascript sintakse ir nedaudz dīvaina. Mēs visi zinām problēmas ar masīva un objekta pievienošanu un citiem jokiem.
  • Javascript ir vairāku paradigmu. Šī sistēma ir īpaši aktuāla tagad, kad ekosistēma ir ļoti liela:
    • visi raksta dažādos stilos - daži raksta strukturāli, daži raksta funkcionāli, dažādi izstrādātāji raksta dažādos veidos;
    • no dažādām pakotnēm, dažādām paradigmām, kad izmantojat dažādas pakotnes;
    • Javasriptā ir daudz “jautrības” ar funkcionālo programmēšanu - parādījās rambda bibliotēka, un tagad neviens nevar lasīt šajā bibliotēkā rakstītās programmas.

  • Tam visam ir liela ietekme uz ekosistēmu, un tā ir neticami augusi. Paketes ir nesavietojamas viena ar otru: daži ir balstīti uz solījumiem, daži ir balstīti uz async/await, daži ir balstīti uz atzvaniem. Viņi arī raksta dažādās paradigmās!
  • Tas apgrūtina projekta uzturēšanu. Ir grūti atrast kļūdu, ja nevarat nolasīt kodu.

Kas ir tīmekļa montāža?

Drosmīgie puiši no Mozilla Foundation un vairākiem citiem uzņēmumiem nāca klajā ar tādu lietu kā Web Assembly. Kas tas ir?

Aleksejs Gračevs: Go Frontend

  • Šī ir pārlūkprogrammā iebūvēta virtuāla mašīna, kas atbalsta bināro formātu.
  • Binārās programmas nokļūst tur un tiek izpildītas gandrīz sākotnēji, tas ir, pārlūkprogrammai nav katru reizi jāparsē visas javascript koda “nūdeles”.
  • Visas pārlūkprogrammas ir paziņojušas par atbalstu.
  • Tā kā šis ir baitkods, jūs varat uzrakstīt kompilatoru jebkurai valodai.
  • Četras galvenās pārlūkprogrammas jau ir aprīkotas ar Web Assembly atbalstu.
  • Mēs drīzumā gaidām vietējo atbalstu pakalpojumā Go. Šī jaunā arhitektūra jau ir pievienota: GOARCH=wasm GOOS=js (drīz). Pagaidām, cik es saprotu, tas nav funkcionāls, bet ir paziņojums, ka tas noteikti būs Go.

Ko tagad darīt? GopherJS

Lai gan mēs neatbalstām Web Assembly, ir tāds transpilētājs kā GopherJS.

Aleksejs Gračevs: Go Frontend

  • Go kods tiek pārveidots par “tīru” Javascript.
  • Darbojas visās pārlūkprogrammās - nav jaunu funkciju, kuras atbalsta tikai mūsdienu pārlūkprogrammas (tas ir Vanilla JS, kas darbojas ar jebko).
  • Tiek atbalstīts gandrīz viss, ko piedāvā Go, tostarp gorutīnas un kanāli... viss, ko mēs tik ļoti mīlam un zinām.
  • Tiek atbalstīta gandrīz visa standarta bibliotēka, izņemot tās pakotnes, kuras nav jēgas atbalstīt pārlūkprogrammā: syscall, tīkla mijiedarbības (ir net/http klients, bet nav servera, un klients tiek emulēts, izmantojot XMLHttpRequest). Kopumā ir pieejama visa standarta bibliotēka - šeit tā ir pārlūkprogrammā, šeit ir Go stdlib, kas mums patīk.
  • Visu pakešu ekosistēmu pakalpojumā Go, visus trešo pušu risinājumus (veidnes utt.) var apkopot, izmantojot GopherJS, un palaist pārlūkprogrammā.

GopherJS ir ļoti viegli iegūt - tā ir tikai parasta Go pakotne. Mēs ejam, un mums ir komanda GopherJS, lai izveidotu lietojumprogrammu:

Aleksejs Gračevs: Go Frontend

Šī ir tik maza sveiks pasaule...

Aleksejs Gračevs: Go Frontend

... Parasta Go programma, parasta standarta bibliotēkas fmt pakotne un Binding Js, lai sasniegtu pārlūkprogrammas API. Println galu galā tiks pārveidots par konsoles žurnālu, un pārlūkprogramma ierakstīs "Sveiki gophers"! Tas ir tik vienkārši: mēs veidojam GopherJS — mēs to palaižam pārlūkprogrammā — viss darbojas!

Kas tev šobrīd ir? Iesējumi

Aleksejs Gračevs: Go Frontend

Ir saistoši visi populārie js ietvari:

  • JQuery;
  • Angular.js;
  • D3.js lielu datu attēlošanai un darbam ar tiem;
  • React.js;
  • VueJS;
  • ir pat atbalsts Electron (tas ir, mēs jau varam rakstīt darbvirsmas lietojumprogrammas uz Electron);
  • un pats smieklīgākais ir WebGL (mēs varam taisīt pilnas grafikas aplikācijas, arī spēles ar 3D grafiku, mūziku un visiem labumiem);
  • un daudzas citas saites visiem populārajiem JavaScript ietvariem un bibliotēkām.

Ietvars

  1. Jau ir izstrādāts tīmekļa ietvars, kas īpaši paredzēts GopherJS — Vecty. Šis ir pilnvērtīgs React.js analogs, taču izstrādāts tikai Go, ar GopherJS specifiku.
  2. Ir spēļu somas (pārsteigums!). Es atklāju divus populārākos:
    • Engo;
    • Ebiten.

Es jums parādīšu dažus piemērus, kā tas izskatās un ko jūs jau varat ierakstīt Go:

Aleksejs Gračevs: Go Frontend

Vai arī šī opcija (es nevarēju atrast 3D šāvēju, bet varbūt tā pastāv):

Aleksejs Gračevs: Go Frontend

Ko es piedāvāju?

Tagad priekšgala nozare ir tādā stāvoklī, ka visas valodas, kas iepriekš kliedza no Javascript, steigsies tur. Tagad viss tiks apkopots “Web Assemblies”. Kas mums ir vajadzīgs, lai ieņemtu savu likumīgo vietu kā goferi?

Aleksejs Gračevs: Go Frontend

Go tradicionāli ir pieņēmis, ka tā ir sistēmas programmēšanas valoda, un praktiski nav bibliotēku darbam ar lietotāja interfeisu. Kaut kas ir, bet tas ir pa pusei pamests, pa pusei nefunkcionāls.

Un tagad ir laba iespēja pakalpojumā Go izveidot lietotāja interfeisa bibliotēkas, kas darbosies ar GopherJS! Beidzot vari uzrakstīt savu ietvaru! Šis ir laiks, kad varat uzrakstīt ietvaru, un tas būs viens no pirmajiem un tiks agri pieņemts, un jūs būsiet zvaigzne (ja tas ir labs ietvars).

Pārlūka specifikai varat pielāgot daudz dažādu pakotņu, kas jau ir Go ekosistēmā (piemēram, Template engine). Tie jau darbosies, var uztaisīt ērtus iesējumus, lai ērti varētu atveidot saturu tieši pārlūkprogrammā. Turklāt jūs varat izveidot, piemēram, pakalpojumu, kas var atveidot vienu un to pašu serverī un priekšgalā, izmantojot vienu un to pašu kodu — visu, kas patīk priekšgala izstrādātājiem (tikai tagad Go).

Jūs varat uzrakstīt spēli! Prieka pēc…

Tas ir viss, ko es gribēju pateikt.

Aleksejs Gračevs: Go Frontend

jautājumi

Jautājums (turpmāk tekstā — Q): – Vai es rakstu Go vai Js?

AG: – Jūs rakstāt rutīnas, kanālus, struktūras, iegulšanu – visu Go... Jūs abonējat pasākumu, nododat tur kādu funkciju.

In: – Tātad es rakstu “plikā” Js?

AG: – Nē, jūs rakstāt it kā Go un izveidojat savienojumu ar pārlūkprogrammas API (API nav mainījies). Jūs varat uzrakstīt savus iesējumus, lai ziņojumi tiktu nosūtīti uz kanālu - tas nav grūti.

In: – Kā ar mobilo?

AG: – Es noteikti redzēju: ir stiprinājumi Kordovas ielāpam, ko Js vada. In React Native — es nezinu; varbūt ir, varbūt nē (man īpaši neinteresēja). N-go spēļu dzinējs atbalsta abas mobilās aplikācijas – gan iOS, gan Android.

In: – Jautājums par Web Assembly. Arvien vairāk vietas tiek aizņemts, neskatoties uz saspiešanu un “rāvējslēdzēju”... Vai tādā veidā front-end pasauli nenogalināsim vēl vairāk?

AG: – Web Assembly ir binārs formāts, un binārais pēc noklusējuma galīgajā laidienā nevar būt vairāk par tekstu... Jūs tiekat piesaistīts izpildlaikam, taču tas ir tas pats, kas izvilkt standarta Javascript bibliotēku, kad tās nav, tāpēc mēs izmantot kādu Lodash . Es nezinu, cik daudz Lodash paņem.

In: – Acīmredzot mazāk nekā izpildlaikā...

AG: – “Tīrā” Javascript?

In: - Jā. Mēs to saspiežam pirms nosūtīšanas...

AG: – Bet tas ir teksts... Kopumā megabaits šķiet daudz, bet tas arī viss (jums ir viss izpildlaiks). Tālāk jūs uzrakstiet savu biznesa loģiku, kas palielinās jūsu bināro vērtību par 1%. Pagaidām es neredzu šo priekšgala nogalināšanu. Turklāt Web Assembly darbosies ātrāk nekā Javascript acīmredzama iemesla dēļ - tas nav jāparsē.

In: – Tas joprojām ir strīdīgs punkts... Pagaidām nav “Vasmas” (tīmekļa asamblejas) atsauces realizācijas, lai varētu viennozīmīgi spriest. Konceptuāli jā: mēs visi saprotam, ka binārajam ir jābūt ātrākam, taču pašreizējā tā paša V8 ieviešana ir ļoti efektīva.

AG: - Jā.

In: – Kompilācija tur tiešām darbojas ļoti forši, un tas nav fakts, ka būs liela priekšrocība.

AG: – Web Assembly veido arī lieli puiši.

In: – Man šķiet, ka joprojām ir grūti spriest par Web Assembly. Sarunas ir bijušas jau daudzus gadus, bet reālu sasniegumu, kas jūtami, ir maz.

AG: - Var būt. Redzēsim.

In: – Mums nav problēmu ar aizmuguri... Varbūt mums vajadzētu atstāt šīs problēmas frontendā? Kāpēc iet uz turieni?

AG: – Mums ir jāsaglabā frontes strādnieku personāls.

Dažas reklāmas 🙂

Paldies, ka palikāt kopā ar mums. Vai jums patīk mūsu raksti? Vai vēlaties redzēt interesantāku saturu? Atbalsti mūs, pasūtot vai iesakot draugiem, mākoņa VPS izstrādātājiem no 4.99 USD, unikāls sākuma līmeņa serveru analogs, ko mēs jums izgudrojām: Visa patiesība par VPS (KVM) E5-2697 v3 (6 kodoli) 10GB DDR4 480GB SSD 1Gbps no 19$ vai kā koplietot serveri? (pieejams ar RAID1 un RAID10, līdz 24 kodoliem un līdz 40 GB DDR4).

Dell R730xd 2x lētāk Equinix Tier IV datu centrā Amsterdamā? Tikai šeit 2x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV no 199$ Nīderlandē! Dell R420 — 2x E5-2430 2.2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbps 100 TB — no 99 USD! Lasīt par Kā izveidot infrastruktūras uzņēmumu klase ar Dell R730xd E5-2650 v4 serveru izmantošanu 9000 eiro par santīmu?

Avots: www.habr.com

Pievieno komentāru