Aleksejus Gračiovas: Eikite į priekį

„Kyiv Go Meetup“, 2018 m. gegužės mėn.:

Aleksejus Gračiovas: Eikite į priekį

Moderatorius: - Sveiki visi! Ačiū, kad esate čia! Šiandien turime du oficialius pranešėjus - Lyosha ir Vanya. Jei turėsime pakankamai laiko, bus dar du. Pirmasis pranešėjas yra Aleksejus Gračevas, jis mums papasakos apie GopherJS.

Aleksejus Gračiovas (toliau – AG): – Esu „Go“ kūrėjas ir „Go“ rašau žiniatinklio paslaugas. Kartais jūs turite susidoroti su frontend, kartais turite patekti į jį rankiniu būdu. Noriu papasakoti apie savo patirtį ir „Go on the frontend“ tyrimus.

Legenda yra tokia: pirmiausia kalbėsime apie tai, kodėl norime paleisti „Go“ priekinėje dalyje, tada kalbėsime apie tai, kaip tai padaryti. Yra du būdai – Web Assembly ir GopherJS. Pažiūrėkime, kokia yra šių sprendimų būsena ir ką galima padaryti.

Kas negerai su priekine dalimi?

Ar visi sutinka, kad su frontend viskas gerai?

Aleksejus Gračiovas: Eikite į priekį

Ar nepakanka testų? Lėtas pastatymas? Ekosistema? gerai.

Kalbant apie sąsają, man patinka citata, kurią vienas iš frontend kūrėjų pasakė savo knygoje:

Aleksejus Gračiovas: Eikite į priekį

Javascript neturi tipo sistemos. Dabar įvardinsiu problemas, su kuriomis susidūriau savo darbe, ir paaiškinsiu, kaip jos sprendžiamos.

Tipo sistemą apskritai vargu ar galima pavadinti Javasript tipo sistema – yra eilučių, nurodančių objekto tipą, bet iš tikrųjų tai neturi nieko bendra su tipais. Ši problema išspręsta naudojant „TypeScript“ (Javasript priedas) ir „Flow“ (statinio tipo tikrintuvas Javascript). Tiesą sakant, sąsaja jau pasiekė tašką, kad išspręstų blogo tipo sistemos problemą Javascript.

Aleksejus Gračiovas: Eikite į priekį

Naršyklėje nėra standartinės bibliotekos – naršyklėse yra įmontuotų objektų ir „stebuklingų“ funkcijų. Tačiau „Javascript“ nėra standartinės bibliotekos. Šią problemą vieną kartą jau išsprendė jQuery (visi naudojo jQuery su visais prototipais, pagalbininkais, funkcijomis, kurių reikėjo darbui). Dabar visi naudoja „Lodash“:

Aleksejus Gračiovas: Eikite į priekį

Atšaukimo pragaras. Manau, kad visi matė „Javascript“ kodą maždaug prieš 5 metus ir jis atrodė kaip „makaronas“ su neįtikėtinu atgalinių skambučių sudėtingumu. Dabar ši problema išspręsta (išleidus ES-15 ar ES-16), į Javascript įdėta pažadų ir visi gali kurį laiką lengviau atsikvėpti.

Aleksejus Gračiovas: Eikite į priekį

Kol atėjo Promice pragaras... Nežinau, kaip susitvarko front-end pramonė, bet jie visada įvaro save į kokias nors keistas džiungles. Mums taip pat pavyko ištesėti pažadus. Tada šią problemą išsprendėme pridėdami naują primityvą - async/await:

Aleksejus Gračiovas: Eikite į priekį

Asinchronijos problema išspręsta. Async/await yra gana populiarus primityvus įvairiomis kalbomis. „Python“ ir kiti taiko šį metodą - tai gana gerai. Problema išspręsta.

Kokia problema neišspręsta? Eksponentiškai didėjantis sistemų sudėtingumas, ekosistemos ir pačių programų sudėtingumas.

Aleksejus Gračiovas: Eikite į priekį

  • „Javascript“ sintaksė yra šiek tiek keista. Visi žinome masyvo ir objekto pridėjimo problemas ir kitus pokštus.
  • „Javascript“ yra kelių paradigmų. Tai ypač aktuali sistema dabar, kai ekosistema yra labai didelė:
    • visi rašo skirtingais stiliais – vieni rašo struktūriškai, kiti funkcionaliai, skirtingi kūrėjai rašo skirtingai;
    • iš skirtingų paketų, skirtingų paradigmų, kai naudojate skirtingus paketus;
    • su funkciniu programavimu Javasript yra labai smagu - atsirado rambda biblioteka ir dabar niekas negali skaityti šioje bibliotekoje parašytų programų.

  • Visa tai daro didelę įtaką ekosistemai, ir ji neįtikėtinai išaugo. Paketai yra nesuderinami vienas su kitu: kai kurie yra pagrįsti pažadais, kai kurie yra pagrįsti asinchronizavimu/laukti, kai kurie yra pagrįsti skambučiais. Jie taip pat rašo skirtingomis paradigmomis!
  • Dėl to projektą sunku išlaikyti. Sunku rasti klaidą, jei negalite perskaityti kodo.

Kas yra žiniatinklio surinkimas?

Drąsūs vaikinai iš „Mozilla Foundation“ ir daugelio kitų kompanijų sugalvojo tokį dalyką kaip „Web Assembly“. Kas čia?

Aleksejus Gračiovas: Eikite į priekį

  • Tai virtuali mašina, integruota į naršyklę, kuri palaiko dvejetainį formatą.
  • Dvejetainės programos patenka ten ir yra vykdomos beveik savaime, tai yra, naršyklei nereikia kiekvieną kartą analizuoti visų javascript kodo „makaronų“.
  • Visos naršyklės paskelbė palaikymą.
  • Kadangi tai yra baitinis kodas, galite parašyti bet kurios kalbos kompiliatorių.
  • Keturios pagrindinės naršyklės jau pristatomos su Web Assembly palaikymu.
  • Netrukus tikimės vietinio palaikymo „Go“. Ši nauja architektūra jau buvo pridėta: GOARCH=wasm GOOS=js (greitai). Kol kas, kaip suprantu, jis nefunkcionalus, bet yra pareiškimas, kad Go tikrai bus.

Ką daryti dabar? GopherJS

Nors mes nepalaikome Web Assembly, yra transpileris, pvz., GopherJS.

Aleksejus Gračiovas: Eikite į priekį

  • „Go“ kodas yra perkeltas į „gryną“ Javascript.
  • Veikia visose naršyklėse – nėra naujų funkcijų, kurias palaiko tik šiuolaikinės naršyklės (tai Vanilla JS, kuri veikia bet kur).
  • Palaikoma beveik viskas, ką turi Go, įskaitant gorutinas ir kanalus... viską, ką mes taip mėgstame ir žinome.
  • Palaikoma beveik visa standartinė biblioteka, išskyrus tuos paketus, kurių naršyklėje palaikyti nėra prasmės: syscall, net Interactions (yra net/http klientas, bet serverio nėra, o klientas emuliuojamas per XMLHttpRequest). Apskritai yra prieinama visa standartinė biblioteka – čia ji yra naršyklėje, čia yra „Go“ stdlib, kurią mes mėgstame.
  • Visą „Go“ paketo ekosistemą, visus trečiųjų šalių sprendimus (šablonus ir pan.) galima sukompiliuoti naudojant GopherJS ir paleisti naršyklėje.

GopherJS gauti labai paprasta – tai tik įprastas „Go“ paketas. Mes gauname ir turime GopherJS komandą programai sukurti:

Aleksejus Gračiovas: Eikite į priekį

Tai toks mažas labas pasaulis...

Aleksejus Gračiovas: Eikite į priekį

...Įprasta programa „Go“, įprastas standartinis bibliotekos fmt paketas ir „Binding Js“, kad pasiektų naršyklės API. „Println“ galiausiai bus konvertuotas į konsolės žurnalą ir naršyklė parašys „Hello gophers“! Taip paprasta: kuriame GopherJS – paleidžiame jį naršyklėje – viskas veikia!

ka tu turi siuo metu? Apkaustai

Aleksejus Gračiovas: Eikite į priekį

Visoms populiarioms js sistemoms yra susiejimas:

  • JQuery;
  • Angular.js;
  • D3.js, skirtas braižyti ir dirbti su dideliais duomenimis;
  • React.js;
  • VueJS;
  • yra net „Electron“ palaikymas (tai yra, „Electron“ jau galime rašyti darbalaukio programas);
  • o smagiausias dalykas yra WebGL (galime padaryti pilnos grafikos programas, įskaitant žaidimus su 3D grafika, muzika ir visomis gėrybėmis);
  • ir daug kitų susiejimo su visomis populiariomis JavaScript sistemomis ir bibliotekomis.

Struktūra

  1. Jau yra specialiai GopherJS sukurta žiniatinklio sistema – Vecty. Tai yra pilnavertis React.js analogas, tačiau sukurtas tik Go, turintis GopherJS specifiką.
  2. Yra žaidimų krepšiai (siurprizas!). Radau du populiariausius:
    • Engo;
    • Ebitenas.

Parodysiu keletą pavyzdžių, kaip tai atrodo ir ką jau galite parašyti Go:

Aleksejus Gračiovas: Eikite į priekį

Arba ši parinktis (neradau 3D šaudyklės, bet galbūt ji egzistuoja):

Aleksejus Gračiovas: Eikite į priekį

Ką aš siūlau?

Dabar front-end pramonė yra tokioje būsenoje, kad ten skubės visos kalbos, kurios anksčiau šaukė iš „Javascript“. Dabar viskas bus sukompiliuota į „Web Assemblies“. Ko mums reikia, kad užimtume savo teisėtą vietą kaip Gophers?

Aleksejus Gračiovas: Eikite į priekį

„Go“ tradiciškai manė, kad tai yra sistemos programavimo kalba, o bibliotekų darbui su vartotojo sąsaja praktiškai nėra. Kažkas yra, bet pusiau apleistas, pusiau neveikiantis.

Ir dabar yra gera proga sukurti „Go“ vartotojo sąsajos bibliotekas, kurios veiks GopherJS! Pagaliau galite parašyti savo sistemą! Tai laikas, kai galite parašyti karkasą, jis bus vienas iš pirmųjų ir anksti pritaikytas, o jūs būsite žvaigždė (jei tai geras karkasas).

Galite pritaikyti daugybę skirtingų paketų, kurie jau yra Go ekosistemoje, prie naršyklės specifikos (pavyzdžiui, šablono variklis). Jie jau veiks, galite padaryti patogius įrišimus, kad galėtumėte lengvai atvaizduoti turinį tiesiai naršyklėje. Be to, galite sukurti, pavyzdžiui, paslaugą, kuri gali pateikti tą patį serveryje ir priekinėje dalyje, naudojant tą patį kodą – viskas, kas patinka sąsajos kūrėjams (tik dabar Go).

Galite parašyti žaidimą! Dėl linksmumo…

Tai viskas, ką norėjau pasakyti.

Aleksejus Gračiovas: Eikite į priekį

Klausimai

Klausimas (toliau – Q): – Rašau Go ar Js?

AG: – Rašote rutinas, kanalus, struktūras, įterpimą – viskas Go... Prenumeruojate įvykį, perkeliate ten funkciją.

In: – Taigi aš rašau „nuoga“ Js?

AG: – Ne, rašote tarsi į Go ir prisijungiate prie naršyklės API (API nepasikeitė). Galite parašyti savo įrišimus, kad pranešimai būtų siunčiami į kanalą - tai nėra sunku.

In: – O kaip mobilusis?

AG: – Tikrai mačiau: yra apkaustai Cordova pleistrui, kurį paleidžia Js. In React Native – aš nežinau; gal yra, o gal ne (nebuvau ypač susidomėjęs). N-go žaidimų variklis palaiko abi mobiliąsias programas – tiek iOS, tiek Android.

In: – Klausimas apie Web Assembly. Vis daugiau vietos užima, nepaisant suspaudimo ir „užtrauktuko“... Ar taip dar labiau neužmušime front-end pasaulio?

AG: – Web Assembly yra dvejetainis formatas ir pagal numatytuosius nustatymus galutiniame leidime dvejetainis negali būti daugiau nei tekstas... Jus traukia vykdymo laikas, tačiau tai yra tas pats, kas ištraukti standartinę Javascript biblioteką, kai jos nėra, todėl mes naudokite šiek tiek Lodash. Nežinau, kiek Lodash paima.

In: – Akivaizdu, kad mažiau nei vykdymo laikas...

AG: – „Gryname“ Javascript?

In: – Taip. Prieš išsiųsdami jį suspaudžiame...

AG: – Bet tai tekstas... Apskritai megabaitas atrodo daug, bet tai ir viskas (turite visą vykdymo laiką). Tada jūs rašote savo verslo logiką, kuri padidins jūsų dvejetainį 1%. Kol kas nematau, kad tai žudytų frontendą. Be to, Web Assembly veiks greičiau nei Javascript dėl ​​akivaizdžios priežasties – jos nereikia analizuoti.

In: – Tai vis dar ginčytinas momentas... Dar nėra jokios referencinės „Vasmos“ (Web Assembly) įgyvendinimo, kad būtų galima spręsti vienareikšmiškai. Konceptualiai – taip: visi suprantame, kad dvejetainis turėtų būti greitesnis, tačiau dabartinis to paties V8 diegimas yra labai efektyvus.

AG: – Taip.

In: – Kompiliacija ten veikia tikrai labai šauniai ir tai nėra faktas, kad bus didelis pranašumas.

AG: – Web Assembly taip pat gamina dideli vaikinai.

In: – Man atrodo, kad vis dar sunku spręsti apie Web Assembly. Jau daug metų vyksta pokalbiai, tačiau tikrų pasiekimų, kuriuos galima pajusti, mažai.

AG: - Gal būt. Pamatysime.

In: – Neturime problemų užpakalinėje dalyje... Gal reikėtų šias problemas palikti frontendėje? Kam ten eiti?

AG: – Turime išlaikyti priekinės linijos darbuotojų personalą.

Kai kurie skelbimai 🙂

Dėkojame, kad likote su mumis. Ar jums patinka mūsų straipsniai? Norite pamatyti įdomesnio turinio? Palaikykite mus pateikdami užsakymą ar rekomenduodami draugams, debesies VPS kūrėjams nuo 4.99 USD, unikalus pradinio lygio serverių analogas, kurį mes sugalvojome jums: Visa tiesa apie VPS (KVM) E5-2697 v3 (6 branduoliai) 10GB DDR4 480GB SSD 1Gbps nuo 19$ arba kaip dalintis serveriu? (galima su RAID1 ir RAID10, iki 24 branduolių ir iki 40 GB DDR4).

„Dell R730xd“ 2 kartus pigiau „Equinix Tier IV“ duomenų centre Amsterdame? Tik čia 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 televizoriai nuo 199 USD Olandijoje! „Dell R420“ – 2 x E5-2430 2.2 GHz 6C 128 GB DDR3 2 x 960 GB SSD 1 Gbps 100 TB – nuo ​​99 USD! Skaityti apie Kaip sukurti infrastruktūros korp. klasę naudojant Dell R730xd E5-2650 v4 serverius, kurių vertė 9000 eurų už centą?

Šaltinis: www.habr.com

Добавить комментарий