Alexey Grachev: Vai Frontend

Kyiv Go Meetup di maghju 2018:

Alexey Grachev: Vai Frontend

Moderatore: - Salute à tutti ! Grazie per esse quì! Oghje avemu dui parlanti ufficiali - Lyosha è Vanya. Ci sarà dui altri s'è avemu abbastanza tempu. U primu parlante hè Alexey Grachev, ci hà da parlà di GopherJS.

Alexey Grachev (in seguitu - AG): - Sò un sviluppatore Go, è scrivu servizii web in Go. Calchì volta vi tocca à trattà cù u frontend, à volte ci vole à entre in lu manually. Vogliu parlà di a mo spirienza è di ricerca in Go in u frontend.

A legenda hè questu: prima parlemu per quessa chì vulemu correre Vai nantu à u frontend, dopu parlemu di cumu si pò fà. Ci sò dui modi - Web Assembly è GopherJS. Videmu quale hè u statutu di sti suluzioni è ciò chì si pò fà.

Chì ci hè di male cù u frontend?

Tutti sò d'accordu chì tuttu hè bè cù u frontend?

Alexey Grachev: Vai Frontend

Ùn ci sò micca abbastanza teste? Custruzzione lenta? Ecosistema ? Va bè.

In quantu à u frontend, mi piace a citazione chì unu di i sviluppatori di frontend hà dettu in u so libru:

Alexey Grachev: Vai Frontend

Javascript ùn hà micca un sistema di tipu. Avà nome i prublemi chì aghju scontru in u cursu di u mo travagliu è spiegheraghju cumu si sò risolti.

U sistema di tipu in generale ùn pò micca esse chjamatu un sistema di tipu in Javasript - ci sò linii chì indicanu u tipu di l'ughjettu, ma in fattu questu ùn hà nunda di fà cù i tipi. Stu prublema hè risolta in TypeScript (un add-on à Javasript) è Flow (un verificatore static-type in Javascript). In verità, u frontend hà digià righjuntu u puntu di risolve u prublema di un sistema di tippu male in Javascript.

Alexey Grachev: Vai Frontend

Ùn ci hè micca una biblioteca standard in u navigatore cum'è tali - ci sò qualchi oggetti integrati è funzioni "magiche" in i navigatori. Ma in Javascript ùn ci hè micca una biblioteca standard cum'è tali. Stu prublema era digià risolta una volta da jQuery (tutti anu utilizatu jQuery cù tutti i prototipi, aiutanti, funzioni chì eranu necessarii per travaglià). Avà tutti usanu Lodash:

Alexey Grachev: Vai Frontend

Chjama l'infernu. Pensu chì tutti anu vistu u codice Javascript circa 5 anni fà, è pareva un "noodle" di una intricata intricatu di callbacks. Avà stu prublema hè stata risolta (cù a liberazione di ES-15 o ES-16), e prumesse sò state aghjunte à Javascript è ognunu pò respira più faciule per un tempu.

Alexey Grachev: Vai Frontend

Finu à chì l'infernu di Promice hè ghjuntu ... Ùn sò micca sapè cumu gestisce l'industria di u front-end, ma sempre si guidanu in una jungla strana. Avemu ancu riesciutu à fà l'infernu nantu à e prumesse. Allora risolvemu stu prublema aghjunghjendu un novu primitivu - async/wait:

Alexey Grachev: Vai Frontend

U prublema cù l'asincronia hè risolta. Async/wait hè un primitivu abbastanza populari in diverse lingue. Python è altri anu stu approcciu - hè abbastanza bè. Prublemu risoltu.

Chì prublema ùn hè micca risolta? A cumplessità in crescita esponenziale di i quadri, a cumplessità di l'ecosistema è i prugrammi stessi.

Alexey Grachev: Vai Frontend

  • A sintassi Javascript hè un pocu strana. Tutti sapemu i prublemi cù l'aghjunghje un array è un ughjettu è altri scherzi.
  • Javascript hè multi-paradigma. Questu hè un sistema particularmente pressante avà quandu l'ecosistema hè assai grande:
    • ognunu scrive in stili diffirenti - alcuni scrive strutturalmente, alcuni scrivenu funziunale, diversi sviluppatori scrivenu in modi diffirenti;
    • da diverse pacchetti, diversi paradigmi quandu utilizate diversi pacchetti;
    • Ci hè assai "divertimentu" cù a prugrammazione funziunale in Javasript - a biblioteca rambda hè apparsu è avà nimu pò leghje i prugrammi scritti in questa biblioteca.

  • Tuttu chistu face un grande impattu annantu à l'ecosistema, è hè crisciutu incredibbilmente. I pacchetti sò incompatibili cù l'altri: alcuni sò basati nantu à e prumesse, certi sò basati in async/wait, certi sò basati in callbacks. Scrivenu ancu in diversi paradigmi !
  • Questu rende u prughjettu difficiule di mantene. Hè difficiuli di truvà un bug si ùn pudete micca leghje u codice.

Cosa hè Web Assembly?

I coraggiosi di a Fundazione Mozilla è di parechje altre cumpagnie sò venuti cun una cosa cum'è Web Assembly. Chì ghjè stu?

Alexey Grachev: Vai Frontend

  • Questa hè una macchina virtuale integrata in u navigatore chì sustene u formatu binariu.
  • I prugrammi binari ghjunghjenu quì è sò eseguiti quasi nativamente, vale à dì chì u navigatore ùn hà micca bisognu di analizà tutti i "noodles" di codice javascript ogni volta.
  • Tutti i navigatori anu dichjaratu supportu.
  • Siccomu questu hè bytecode, pudete scrive un compilatore per ogni lingua.
  • Quattru navigatori principali sò digià spedite cù supportu Web Assembly.
  • Aspittemu un supportu nativu in Go prestu. Sta nova architettura hè digià aghjuntu: GOARCH=wasm GOOS=js (prestu). Finu a ora, cum'è l'aghju capitu, ùn hè micca funziunale, ma ci hè una dichjarazione chì serà sicuramente in Go.

Chì fà avà ? Gopher JS

Mentre ùn avemu micca supportu per Web Assembly, ci hè un transpiler cum'è GopherJS.

Alexey Grachev: Vai Frontend

  • U codice Go hè traspilatu in Javascript "puru".
  • Funziona in tutti i navigatori - ùn ci sò micca funziunalità novi chì sò supportati solu da i navigatori muderni (questu hè Vanilla JS, chì funziona nantu à qualcosa).
  • Ci hè un supportu per quasi tuttu ciò chì Go hà, cumprese goroutines è canali ... tuttu ciò chì amemu è sapemu tantu.
  • Quasi tutta a libreria standard hè supportata, eccettu per quelli pacchetti chì ùn hà micca sensu di supportà in u navigatore: syscall, interazzioni netti (ci hè un cliente net/http, ma senza servitore, è u cliente hè emulatu via XMLHttpRequest). In generale, tutta a biblioteca standard hè dispunibule - quì hè in u navigatore, quì hè u stdlib di Go, chì ci piace.
  • L'ecosistema tutale di u pacchettu in Go, tutte e soluzioni di terzu (template, etc.) ponu esse compilate cù GopherJS è eseguite in u navigatore.

GopherJS hè assai faciule d'acquistà - hè solu un pacchettu Go regulare. Andemu per piglià, è avemu un cumandamentu GopherJS per custruisce l'applicazione:

Alexey Grachev: Vai Frontend

Questu hè un bellu mondu cusì chjucu ...

Alexey Grachev: Vai Frontend

...Un prugramma Go regulare, un pacchettu fmt di libreria standard regulare è Binding Js per ghjunghje à l'API di u navigatore. Println serà eventualmente cunvertitu in u logu di a cunsola è u navigatore scriverà "Hello gophers"! Hè cusì simplice: facemu a creazione di GopherJS - lanciamu in u navigatore - tuttu funziona!

Chì avete in u mumentu ? Legami

Alexey Grachev: Vai Frontend

Ci sò ligami per tutti i framework js populari:

  • JQuery;
  • Angular.js;
  • D3.js per plotting è travaglià cù big data;
  • React.js;
  • VueJS;
  • ci hè ancu supportu per Electron (vale à dì, pudemu digià scrive l'applicazioni desktop nantu à Electron);
  • è a cosa più divertente hè WebGL (pudemu fà appiicazioni gràfiche cumplete, cumpresi ghjochi cù gràficu 3D, musica è tutti i boni);
  • è parechje altre associazioni à tutti i frameworks javascript è biblioteche populari.

Framework

  1. Ci hè un framework web digià sviluppatu apposta per GopherJS - Vecty. Questu hè un analogu cumpletu di React.js, ma solu sviluppatu in Go, cù e specifiche di GopherJS.
  2. Ci sò sacchetti di ghjocu (sorpresa!). Aghju trovu i dui più populari:
    • Engo;
    • Ebiten.

Vi mustraraghju un paru di esempi di ciò chì pare è ciò chì pudete digià scrive in Go:

Alexey Grachev: Vai Frontend

O questa opzione (ùn aghju micca pussutu truvà un shooter 3D, ma forse esiste):

Alexey Grachev: Vai Frontend

Chì offre ?

Avà l'industria front-end hè in tale statu chì tutte e lingue chì prima gridavanu da Javascript si precipiteranu quì. Avà tuttu serà cumpilatu in "Assemblee Web". Chì avemu bisognu di piglià u nostru postu chì ci hè ghjustu cum'è Gophers?

Alexey Grachev: Vai Frontend

Go hà tradiziunale assume chì hè una lingua di prugrammazione di u Sistema, è ùn ci sò praticamenti micca biblioteche per travaglià cù l'UI. Ci hè qualcosa, ma hè mezu abbandunatu, mità micca funziunale.

È avà hè una bona chance per fà biblioteche UI in Go chì correranu nantu à GopherJS! Pudete finalmente scrive u vostru propiu quadru! Questu hè u tempu quandu pudete scrive un quadru, è serà unu di i primi è uttene l'adopzione anticipata, è sarete una stella (se hè un bonu quadru).

Pudete adattà assai pacchetti diffirenti chì sò digià in l'ecosistema Go à e specifiche di u navigatore (per esempiu, Template engine). Anu digià travagliatu, pudete fà ligami convenienti in modu chì pudete facilmente rende u cuntenutu direttamente in u navigatore. In più, pudete fà, per esempiu, un serviziu chì pò rende a stessa cosa in u servitore è in u front-end, usendu u listessu codice - tuttu ciò chì i sviluppatori front-end piace (solu avà in Go).

Pudete scrive un ghjocu! Solu per piacè ...

Hè tuttu ciò chì vulia dì.

Alexey Grachev: Vai Frontend

I vostri dumanni

Quistione (in seguitu chjamata Q): – Scrivu in Go o Js ?

AG: - Scrivite rutini, canali, strutture, incrussioni - tuttu in Go... Avete sottumessu à un avvenimentu, passa una funzione quì.

IN: – Allora scrivu in Js “nudu” ?

AG: - No, scrivite cum'è in Go è cunnette cù l'API di u navigatore (l'API ùn hè micca cambiatu). Pudete scrive u vostru propiu ligami per chì i missaghji sò mandati à u canali - ùn hè micca difficiule.

IN: - E mobile ?

AG: - Aghju definitivamente vistu: ci sò ligami per u patch Cordova chì Js corre. In React Native - Ùn sò micca; forsi ci hè, forse micca (ùn era micca particularmente interessatu). U mutore di ghjocu N-go supporta e duie applicazioni mobili - sia iOS sia Android.

IN: - Quistione nantu à l'Assemblea Web. Sempre più spaziu hè occupatu, malgradu a cumpressione è u "zipping"... Ùn uccideremu micca u mondu front-end in questu modu ancu di più ?

AG: - Web Assembly hè un formatu binariu, è u binari per difettu ùn pò micca esse in a versione finale più di u testu ... Vi sò attirati à runtime, ma questu hè u listessu cum'è trascinendu a libreria Javascript standard quandu ùn hè micca quì, cusì avemu aduprà un pocu di Lodash. Ùn sò micca quantu piglia Lodash.

IN: - Ovviamente menu di runtime ...

AG: - In Javascript "puru"?

IN: - Iè. Cumpressemu prima di mandà lu...

AG: - Ma questu hè testu... In generale, un megabyte pare assai, ma questu hè tuttu (avete tuttu u runtime). In seguitu, scrivite a vostra propria logica cummerciale, chì aumenterà u vostru binariu da 1%. Finu à avà ùn vecu micca questu uccidendu u frontend. Inoltre, Web Assembly hà da travaglià più veloce di Javascript per a ragione ovvia - ùn hè micca bisognu di analizà.

IN: – Questu hè sempre un puntu cuntruversu... Ùn ci hè ancu nisuna implementazione di riferimentu di "Vasma" (Assemblea Web) per pudè ghjudicà senza ambiguità. Conceptually, sì: tutti capiscenu chì u binariu deve esse più veloce, ma l'implementazione attuale di u stessu V8 ​​hè assai efficace.

AG: - Iè.

IN: - A compilazione ci travaglia veramente assai cool è ùn hè micca un fattu chì ci sarà un grande vantaghju.

AG: - Web Assembly hè ancu fattu da i grandi.

IN: – Mi pari chì hè sempre difficiule à ghjudicà Web Assembly. Ci sò stati cunversazioni dapoi parechji anni, ma ci sò pochi rializazioni veri chì si ponu sente.

AG: - Forse. Videremu.

IN: – Ùn avemu micca prublemi in u backend... Forse duvemu lascià sti prublemi in u frontend ? Perchè andà ci?

AG: - Avemu da mantene un staffu di travagliadori in prima linea.

Certi annunzii 🙂

Grazie per stà cun noi. Ti piace i nostri articuli ? Vulete vede più cuntenutu interessante? Supportaci facendu un ordine o ricumandendu à l'amichi, cloud VPS per sviluppatori da $ 4.99, un analogu unicu di servitori di livellu d'entrata, chì hè statu inventatu da noi per voi: Tutta a verità nantu à VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps da $ 19 o cumu si sparte un servitore? (dispunibule cù RAID1 è RAID10, finu à 24 core è finu à 40GB DDR4).

Dell R730xd 2 volte più prezzu in u centru di dati Equinix Tier IV in Amsterdam? Solu quì 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV da $ 199 in l'Olanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - da $ 99! Leghje circa Cumu custruisce una infrastruttura corp. classa cù l'usu di i servitori Dell R730xd E5-2650 v4 valenu 9000 XNUMX euro per un centesimu?

Source: www.habr.com

Add a comment