Alexey Grachev: Go Frontend

Kyiv Go Meetup maj 2018:

Alexey Grachev: Go Frontend

Svinec: - Pozdravljeni vsi skupaj! Hvala, ker ste tukaj! Danes imamo dva uradna govorca - Lyosha in Vanya. Še dva bosta, če bova imela dovolj časa. Prvi govornik je Alexey Grachev, povedal nam bo o GopherJS.

Alexey Grachev (v nadaljevanju – AG): – Sem razvijalec Go in pišem spletne storitve v Go. Včasih se moraš ukvarjati s sprednjim delom, včasih moraš vanj vstopiti ročno. Želim govoriti o svojih izkušnjah in raziskavah o Go na frontendu.

Legenda je naslednja: najprej se bomo pogovarjali o tem, zakaj želimo zagnati Go na sprednjem delu, nato pa o tem, kako je to mogoče storiti. Obstajata dva načina - Web Assembly in GopherJS. Poglejmo, kakšen je status teh rešitev in kaj je mogoče storiti.

Kaj je narobe s sprednjim delom?

Ali se vsi strinjajo, da je s frontendom vse v redu?

Alexey Grachev: Go Frontend

Ali ni dovolj testov? Počasna gradnja? Ekosistem? Globa.

Kar zadeva frontend, mi je všeč citat, ki ga je eden od razvijalcev frontenda rekel v svoji knjigi:

Alexey Grachev: Go Frontend

Javascript nima sistema tipov. Zdaj bom poimenoval težave, s katerimi sem se srečal pri svojem delu, in pojasnil, kako jih rešujem.

Sistem tipov na splošno težko imenujemo sistem tipov v Javasriptu - obstajajo vrstice, ki označujejo tip predmeta, vendar to dejansko nima nobene zveze s tipi. Ta problem je rešen s programoma TypeScript (dodatek za Javasript) in Flow (preverjevalec statičnega tipa v Javascriptu). Pravzaprav je frontend že dosegel točko reševanja problema sistema slabih tipov v Javascriptu.

Alexey Grachev: Go Frontend

V brskalniku ni standardne knjižnice kot take - v brskalnikih je nekaj vgrajenih predmetov in "čarobnih" funkcij. Toda v Javascriptu ni standardne knjižnice kot take. Ta problem je enkrat že rešil jQuery (vsi so uporabljali jQuery z vsemi prototipi, pomočniki, funkcijami, ki so bile potrebne za delovanje). Zdaj vsi uporabljajo Lodash:

Alexey Grachev: Go Frontend

Povratni klic hudiča. Mislim, da so vsi videli kodo Javascript pred približno 5 leti in izgledala je kot "rezanci" neverjetne zapletenosti povratnih klicev. Zdaj je ta problem rešen (z izdajo ES-15 ali ES-16), obljube so dodane v Javascript in vsi lahko nekaj časa lažje dihajo.

Alexey Grachev: Go Frontend

Dokler ni prišel pekel Promice ... Ne vem, kako front-end industrija upravlja, ampak vedno se zapeljejo v neko čudno džunglo. Uspelo nam je tudi narediti pekel obljub. Nato smo to težavo rešili z dodajanjem novega primitiva - async/await:

Alexey Grachev: Go Frontend

Težava z asinhronostjo je rešena. Async/await je dokaj priljubljen primitiv v različnih jezikih. Python in drugi imajo ta pristop - precej dober je. Problem rešen.

Kateri problem ni rešen? Eksponentno naraščajoča kompleksnost ogrodij, kompleksnost ekosistema in samih programov.

Alexey Grachev: Go Frontend

  • Sintaksa Javascripta je nekoliko čudna. Vsi poznamo težave z dodajanjem polja in objekta ter druge šale.
  • Javascript je večparadigmaten. To je še posebej pereč sistem zdaj, ko je ekosistem zelo velik:
    • vsi pišejo v različnih slogih - nekateri pišejo strukturno, nekateri pišejo funkcionalno, različni razvijalci pišejo na različne načine;
    • iz različnih paketov, različnih paradigem, ko uporabljate različne pakete;
    • s funkcionalnim programiranjem v Javasript je veliko "zabave" - ​​pojavila se je knjižnica rambda in zdaj nihče ne more brati programov, napisanih v tej knjižnici.

  • Vse to močno vpliva na ekosistem, ki se je neverjetno povečal. Paketi so med seboj nezdružljivi: nekateri temeljijo na obljubah, nekateri na async/await, nekateri na povratnih klicih. Tudi pišejo v različnih paradigmah!
  • Zaradi tega je projekt težko vzdrževati. Težko je najti napako, če ne znate prebrati kode.

Kaj je spletna montaža?

Pogumni fantje iz fundacije Mozilla in številnih drugih podjetij so se domislili takega, kot je Web Assembly. Kaj je to?

Alexey Grachev: Go Frontend

  • To je virtualni stroj, vgrajen v brskalnik, ki podpira binarno obliko.
  • Binarni programi pridejo tja in se izvajajo skoraj izvirno, kar pomeni, da brskalniku ni treba vsakič razčleniti vseh "rezancev" kode javascript.
  • Vsi brskalniki imajo prijavljeno podporo.
  • Ker je to bajtna koda, lahko napišete prevajalnik za kateri koli jezik.
  • Štirje glavni brskalniki so že dobavljeni s podporo za Web Assembly.
  • Kmalu pričakujemo domačo podporo v Go. Ta nova arhitektura je že bila dodana: GOARCH=wasm GOOS=js (kmalu). Zaenkrat, kolikor razumem, ni funkcionalen, vendar obstaja izjava, da bo zagotovo v Go.

Kaj storiti zdaj? GopherJS

Čeprav nimamo podpore za spletno montažo, obstaja transpiler, kot je GopherJS.

Alexey Grachev: Go Frontend

  • Koda Go je prevedena v »čisti« Javascript.
  • Deluje v vseh brskalnikih - ni novih funkcij, ki bi jih podpirali samo sodobni brskalniki (to je Vanilla JS, ki deluje na čemer koli).
  • Obstaja podpora za skoraj vse, kar ima Go, vključno z rutinami in kanali ... vse, kar imamo radi in tako zelo poznamo.
  • Podprta je skoraj celotna standardna knjižnica, razen tistih paketov, ki jih nima smisla podpirati v brskalniku: syscall, net interakcije (obstaja net/http odjemalec, ni pa strežnika, odjemalec pa je emuliran prek XMLHttpRequest). Na splošno je na voljo celotna standardna knjižnica - tukaj je v brskalniku, tukaj je Gojev stdlib, ki ga obožujemo.
  • Celoten ekosistem paketov v Go, vse rešitve tretjih oseb (predloge itd.) je mogoče prevesti z uporabo GopherJS in izvajati v brskalniku.

GopherJS je zelo enostavno dobiti - to je navaden paket Go. Gremo dobiti in imamo ukaz GopherJS za izdelavo aplikacije:

Alexey Grachev: Go Frontend

To je tako majhen pozdravljen svet...

Alexey Grachev: Go Frontend

... Običajni program Go, običajni paket standardne knjižnice fmt in Binding Js za doseganje API-ja brskalnika. Println bo sčasoma pretvorjen v dnevnik konzole in brskalnik bo napisal "Hello gophers"! Tako preprosto je: izdelamo GopherJS – zaženemo ga v brskalniku – vse deluje!

Kaj imate v tem trenutku? Vezi

Alexey Grachev: Go Frontend

Obstajajo vezave za vsa priljubljena ogrodja js:

  • JQuery;
  • Angular.js;
  • D3.js za risanje in delo z velikimi podatki;
  • React.js;
  • VueJS;
  • obstaja celo podpora za Electron (se pravi, da že lahko pišemo namizne aplikacije na Electron);
  • in kar je najbolj smešno, je WebGL (lahko naredimo polne grafične aplikacije, vključno z igrami s 3D grafiko, glasbo in vsemi dobrotami);
  • in številne druge vezave na vsa priljubljena ogrodja in knjižnice javascript.

Okvirni

  1. Obstaja že razvito spletno ogrodje posebej za GopherJS – Vecty. To je popoln analog React.js, vendar razvit samo v Go, s posebnostmi GopherJS.
  2. Obstajajo torbe za igre (presenečenje!). Našel sem dva najbolj priljubljena:
    • Engo;
    • Ebiten.

Pokazal vam bom nekaj primerov, kako izgleda in kaj že lahko pišete v Go:

Alexey Grachev: Go Frontend

Ali pa ta možnost (nisem našel 3D streljačine, a morda obstaja):

Alexey Grachev: Go Frontend

Kaj ponujam?

Zdaj je front-end industrija v takšnem stanju, da bodo tja prihiteli vsi jeziki, ki so prej jokali od Javascripta. Zdaj bo vse sestavljeno v »Spletne sklope«. Kaj potrebujemo, da tam zavzamemo svoje pravo mesto kot Gophers?

Alexey Grachev: Go Frontend

Go tradicionalno domneva, da je sistemski programski jezik, knjižnic za delo z uporabniškim vmesnikom pa praktično ni. Nekaj ​​je, a je napol zapuščeno, napol nefunkcionalno.

In zdaj je dobra priložnost, da v Go naredite knjižnice uporabniškega vmesnika, ki bodo delovale na GopherJS! Končno lahko napišete svoj okvir! To je čas, ko lahko napišete okvir, ki bo eden prvih in ga bodo zgodaj sprejeli, pa boste zvezda (če bo dober okvir).

Veliko različnih paketov, ki so že v ekosistemu Go, lahko prilagodite posebnostim brskalnika (na primer Template engine). Delovali bodo že, naredite lahko priročne vezave, da boste vsebino zlahka upodabljali neposredno v brskalniku. Poleg tega lahko ustvarite na primer storitev, ki lahko upodablja isto stvar na strežniku in na sprednjem delu z uporabo iste kode – vse, kar je všeč razvijalcem sprednjega dela (samo zdaj v Go).

Lahko napišete igro! Samo za zabavo…

To je vse, kar sem hotel povedati.

Alexey Grachev: Go Frontend

vprašanja

Vprašanje (v nadaljevanju Q): – Ali pišem v Go ali Js?

AG: – Pišeš rutine, kanale, strukture, vgrajevanje – vse v Go ... Naročiš se na dogodek, tam preneseš funkcijo.

V: – Torej pišem v »golem« Js?

AG: – Ne, pišete kot v Go in se povezujete z API-jem brskalnika (API se ni spremenil). Lahko napišete svoje lastne vezave, tako da se sporočila pošljejo kanalu - ni težko.

V: – Kaj pa mobilni telefon?

AG: – Vsekakor sem videl: obstajajo vezave za popravek Cordova, ki ga izvaja Js. V React Native - ne vem; mogoče obstaja, mogoče ne (ni me posebej zanimalo). Igralni pogon N-go podpira obe mobilni aplikaciji – tako iOS kot Android.

V: – Vprašanje o spletni montaži. Zavzema se vedno več prostora, kljub stiskanju in “zipanju” ... Ali ne bomo na ta način še bolj ubijali front-end sveta?

AG: – Spletna montaža je dvojiški format in binarni privzeto ne more biti v končni izdaji več kot besedilo ... Pritegne vas izvajalno okolje, vendar je to enako, kot če bi povlekli standardno knjižnico Javascript, ko je ni, zato uporabite nekaj Lodasha. Ne vem, koliko Lodash vzame.

V: – Očitno manj kot trajanje ...

AG: – V »čistem« Javascriptu?

V: - Da. Pred pošiljanjem ga stisnemo ...

AG: – Ampak to je besedilo ... Na splošno se megabajt zdi veliko, toda to je vse (imate celoten čas izvajanja). Nato napišete svojo lastno poslovno logiko, ki bo vašo binarnost povečala za 1%. Zaenkrat ne vidim, da bi to ubijalo frontend. Poleg tega bo Web Assembly deloval hitreje kot Javascript iz očitnega razloga – ni ga treba razčleniti.

V: – To je še vedno sporna točka ... Še ni nobene referenčne izvedbe »Vasme« (Spletna montaža), da bi lahko nedvoumno presodili. Konceptualno, da: vsi razumemo, da bi morala biti binarnost hitrejša, vendar je trenutna izvedba istega V8 zelo učinkovita.

AG: - Da.

V: – Kompilacija tam deluje res zelo kul in ni dejstvo, da bo velika prednost.

AG: – Web Assembly izdelujejo tudi veliki fantje.

V: – Zdi se mi, da je Web Assembly še vedno težko soditi. Pogovori tečejo že vrsto let, vendar je malo resničnih dosežkov, ki jih je čutiti.

AG: - Mogoče. Bomo videli.

V: – Nimamo težav na zaledju ... Mogoče bi morali te težave pustiti na sprednjem delu? Zakaj iti tja?

AG: – Obdržati moramo osebje delavcev na prvi liniji.

Nekaj ​​oglasov 🙂

Hvala, ker ste ostali z nami. So vam všeč naši članki? Želite videti več zanimivih vsebin? Podprite nas tako, da oddate naročilo ali priporočite prijateljem, oblak VPS za razvijalce od 4.99 $, edinstven analog začetnih strežnikov, ki smo ga izumili za vas: Vsa resnica o VPS (KVM) E5-2697 v3 (6 jeder) 10 GB DDR4 480 GB SSD 1 Gbps od 19 USD ali kako deliti strežnik? (na voljo z RAID1 in RAID10, do 24 jeder in do 40 GB DDR4).

Dell R730xd dvakrat cenejši v podatkovnem centru Equinix Tier IV v Amsterdamu? Samo tukaj 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 GHz 14C 64 GB DDR4 4 x 960 GB SSD 1 Gbps 100 TV od 199 $ na Nizozemskem! Dell R420 - 2x E5-2430 2.2 Ghz 6C 128 GB DDR3 2x960 GB SSD 1 Gbps 100 TB - od 99 $! Preberite o Kako zgraditi infrastrukturo Corp. razreda z uporabo strežnikov Dell R730xd E5-2650 v4 v vrednosti 9000 evrov za drobiž?

Vir: www.habr.com

Dodaj komentar