Alexey Grachev: Go Frontend

Kyiv Go Meetup Méi 2018:

Alexey Grachev: Go Frontend

Kalungguhan: - Halo sadayana! Hatur nuhun kadieu! Dinten ieu kami boga dua speaker resmi - Lyosha na Vanya. Bakal aya dua deui upami urang gaduh waktos cekap. Speaker kahiji Alexey Grachev, anjeunna bakal ngabejaan urang ngeunaan GopherJS.

Alexey Grachev (saterusna - AG): - Abdi pamekar Go, sareng kuring nyerat jasa wéb dina Go. Kadang-kadang anjeun kudu nungkulan frontend, kadang anjeun kudu meunang kana eta sacara manual. Abdi hoyong ngobrol ngeunaan pangalaman sareng panalungtikan kuring kana Go on frontend.

Legenda ieu: mimitina urang bakal ngobrol ngeunaan naha urang rék ngajalankeun Go on frontend, lajeng urang bakal ngobrol ngeunaan kumaha ieu bisa dipigawé. Aya dua cara - Majelis Web sareng GopherJS. Hayu urang tingali kumaha status solusi ieu sareng naon anu tiasa dilakukeun.

Naon anu lepat sareng frontend?

Naha sadayana satuju yén sadayana henteu kunanaon sareng frontend?

Alexey Grachev: Go Frontend

Aya henteu cukup tés? Lambat ngawangun? Ékosistem? muhun.

Ngeunaan frontend, kuring resep kutipan anu salah sahiji pamekar frontend nyarios dina bukuna:

Alexey Grachev: Go Frontend

Javascript teu boga sistem tipe. Ayeuna kuring bakal ngaranan masalah anu kuring hadapi dina padamelan kuring sareng ngajelaskeun kumaha aranjeunna direngsekeun.

Sistim tipe boro bisa disebut sistem tipe di Javasript - aya garis nu nunjukkeun jenis objék, tapi dina kanyataanana ieu teu aya hubunganana jeung jenis. Masalah ieu direngsekeun dina TypeScript (tambahan kana Javasript) sareng Flow (pamariksaan tipe statik dina Javascript). Sabenerna, frontend geus ngahontal titik ngarengsekeun masalah sistem tipe goréng dina Javascript.

Alexey Grachev: Go Frontend

Henteu aya perpustakaan standar dina browser sapertos kitu - aya sababaraha objék anu diwangun sareng fungsi "magic" dina browser. Tapi dina Javascript teu aya perpustakaan standar sapertos kitu. Masalah ieu parantos direngsekeun sakali ku jQuery (sadayana nganggo jQuery sareng sadaya prototipe, pembantu, fungsi anu diperyogikeun pikeun dianggo). Ayeuna sadayana nganggo Lodash:

Alexey Grachev: Go Frontend

Callback naraka. Jigana sarerea nempo kode Javascript ngeunaan 5 sababaraha taun ka pengker, sarta eta kasampak kawas "mi" tina hiji intricacy luar biasa tina callbacks. Ayeuna masalah ieu parantos direngsekeun (kalayan sékrési ES-15 atanapi ES-16), janji parantos ditambah kana Javascript sareng sadayana tiasa ngambekan langkung gampang sakedap.

Alexey Grachev: Go Frontend

Dugi Promice naraka anjog ... Kuring henteu weruh kumaha industri hareup-tungtung manages, Tapi maranéhna salawasna ngajalankeun sorangan kana sababaraha leuweung aneh. Urang ogé junun nyieun naraka on janji. Teras we direngsekeun masalah ieu ku nambahkeun primitif anyar - async/await:

Alexey Grachev: Go Frontend

Masalah sareng asynchrony direngsekeun. Async/await mangrupikeun primitif anu cukup populer dina sababaraha basa. Python sareng anu sanésna gaduh pendekatan ieu - éta saé. Masalah direngsekeun.

Masalah naon anu teu direngsekeun? Pajeulitna kerangka sacara éksponénsial, pajeulitna ékosistem sareng program éta sorangan.

Alexey Grachev: Go Frontend

  • Sintaksis Javascript rada anéh. Urang kabeh terang masalah sareng nambahkeun hiji Asép Sunandar Sunarya na hiji obyék sarta guyonan séjén.
  • Javascript nyaéta multi-paradigma. Ieu mangrupikeun sistem anu penting ayeuna nalika ékosistem ageung pisan:
    • sadayana nyerat dina gaya anu béda - sababaraha nyerat sacara struktural, sababaraha nyerat sacara fungsional, pamekar anu béda nyerat ku cara anu béda;
    • ti bungkusan béda, paradigma béda mun anjeun migunakeun bungkusan béda;
    • Aya seueur "senang" kalayan program fungsional dina Javasript - perpustakaan rambda muncul sareng ayeuna teu aya anu tiasa maca program anu ditulis dina perpustakaan ieu.

  • Sadaya ieu ngajadikeun dampak badag dina ékosistem, sarta geus tumuwuh incredibly. Bungkusan henteu cocog sareng anu sanés: aya anu dumasar kana janji, aya anu dumasar kana async / ngantosan, aya anu dumasar kana telepon balik. Éta ogé nulis dina paradigms béda!
  • Hal ieu ngajadikeun proyék hésé pikeun ngajaga. Hésé milarian bug upami anjeun henteu tiasa maca kodeu.

Naon ari Majelis Wéb?

Lalaki gagah ti Yayasan Mozilla sareng sajumlah perusahaan anu sanés datang sareng hal sapertos Majelis Wéb. Naon ini?

Alexey Grachev: Go Frontend

  • Ieu mesin virtual diwangun kana browser nu ngarojong format binér.
  • Program binér dugi ka dinya sareng dieksekusi ampir sacara asli, nyaéta, browser henteu kedah nga-parse sadaya "mi" kode javascript unggal waktos.
  • Sadaya panyungsi parantos nyatakeun dukungan.
  • Kusabab ieu bytecode, anjeun tiasa nyerat kompiler pikeun basa naon waé.
  • Opat panyungsi utama geus dikirimkeun ku rojongan Web Assembly.
  • Kami ngarepkeun dukungan asli di Go pas. Arsitéktur anyar ieu parantos ditambihan: GOARCH=wasm GOOS=js (moal lami deui). Sajauh, sakumaha Abdi ngartos eta, teu fungsi, tapi aya hiji pernyataan yén éta pasti bakal di Go.

Naon anu kudu dipigawé ayeuna? GopherJS

Bari urang teu boga rojongan pikeun Web Assembly, aya transpiler kawas GopherJS.

Alexey Grachev: Go Frontend

  • Kode Go ditranspilkeun kana Javascript "murni".
  • Dijalankeun dina sakabéh panyungsi - euweuh fitur anyar nu dirojong ukur ku browser modern (ieu Vanilla JS, nu dijalankeun dina nanaon).
  • Aya rojongan pikeun ampir sagalana nu Go boga, kaasup goroutines sarta saluran ... sagalana urang cinta tur nyaho pisan.
  • Ampir sakabéh perpustakaan standar dirojong, iwal jalma bungkusan nu teu aya rasa pikeun ngarojong dina browser nu: syscall, interaksi net (aya net / klien http, tapi euweuh server, sarta klien ieu emulated via XMLHttpRequest). Sacara umum, sakabéh perpustakaan baku geus sadia - dieu éta dina browser nu, didieu nyaeta stdlib Go urang, nu urang cinta.
  • Sakabéh ékosistem pakét di Go, sadaya solusi pihak katilu (templating, jsb) tiasa disusun nganggo GopherJS sareng dijalankeun dina browser.

GopherJS gampang pisan kéngingkeun - éta ngan ukur pakét Go biasa. Kami kéngingkeun, sareng kami gaduh paréntah GopherJS pikeun ngawangun aplikasi:

Alexey Grachev: Go Frontend

Ieu mangrupikeun dunya halo anu leutik ...

Alexey Grachev: Go Frontend

... Program Go biasa, paket fmt perpustakaan standar biasa sareng Binding Js pikeun ngahontal API browser. Println antukna bakal dirobih kana log konsol sareng browser bakal nyerat "Halo gophers"! Éta saderhana pisan: kami ngadamel GopherJS ngawangun - kami ngaluncurkeunana dina browser - sadayana tiasa dianggo!

Naon anu anjeun gaduh ayeuna? Binding

Alexey Grachev: Go Frontend

Aya bindings pikeun sakabéh kerangka js populér:

  • JQuery;
  • Angular.js;
  • D3.js pikeun ngarencanakeun sareng damel sareng data ageung;
  • React.js;
  • VueJS;
  • malah aya dukungan pikeun Éléktron (nyaéta, urang parantos tiasa nyerat aplikasi desktop dina Éléktron);
  • sareng anu paling lucu nyaéta WebGL (urang tiasa ngadamel aplikasi grafis pinuh, kalebet kaulinan kalayan grafik 3D, musik sareng sadaya barang);
  • sarta loba bindings séjén pikeun sakabéh frameworks JavaScript populér tur perpustakaan.

kerangka

  1. Aya kerangka wéb anu parantos dikembangkeun khusus pikeun GopherJS - Vecty. Ieu mangrupikeun analog lengkep tina React.js, tapi ngan ukur dikembangkeun dina Go, kalayan spésifikasi GopherJS.
  2. Aya kantong kaulinan (reuwas!). Kuring mendakan dua anu pang populerna:
    • Engo;
    • Ebiten.

Kuring bakal nunjukkeun anjeun sababaraha conto kumaha rupana sareng naon anu anjeun tiasa nyerat dina Go:

Alexey Grachev: Go Frontend

Atawa pilihan ieu (Kuring teu bisa manggihan hiji jujur ​​3D, tapi meureun aya):

Alexey Grachev: Go Frontend

Naon anu kuring nawiskeun?

Ayeuna industri hareup-tungtung dina kaayaan sapertos kitu yén sadaya basa anu saacanna ceurik tina Javascript bakal buru-buru ka dinya. Ayeuna sadayana bakal disusun kana "Web Assemblies". Naon anu urang kedah nyandak tempat anu leres di dinya salaku Gophers?

Alexey Grachev: Go Frontend

Go sacara tradisional nganggap yén éta mangrupikeun basa pamrograman Sistem, sareng sacara praktis henteu aya perpustakaan pikeun damel sareng UI. Aya hiji hal, tapi satengah ditinggalkeun, satengah non-fungsi.

Sareng ayeuna mangrupikeun kasempetan anu saé pikeun ngadamel perpustakaan UI di Go anu bakal dijalankeun dina GopherJS! Anjeun tungtungna tiasa nyerat kerangka anjeun nyalira! Ieu waktu nalika anjeun bisa nulis kerangka, sarta eta bakal salah sahiji mimiti na meunang nyoko mimiti, tur anjeun bakal béntang a (lamun éta kerangka alus).

Anjeun tiasa adaptasi seueur bungkusan anu béda anu parantos aya dina ékosistem Go ka spésifikasi browser (contona, mesin Citakan). Aranjeunna parantos tiasa dianggo, anjeun tiasa ngadamel beungkeutan anu saé supados anjeun tiasa sacara gampil ngadamel kontén langsung dina browser. Tambih Deui, anjeun tiasa ngadamel, contona, jasa anu tiasa ngadamel hal anu sami dina server sareng di payun, nganggo kode anu sami - sadayana anu dipikaresep ku pamekar hareup (ngan ayeuna di Go).

Anjeun tiasa nyerat kaulinan! Ngan pikeun senang…

Sakitu waé anu kuring hoyong nyarios.

Alexey Grachev: Go Frontend

patarosan

Patarosan (satuluyna disebut Q): - Naha kuring nyerat dina Go atanapi Js?

AG: - Anjeun nulis rutin, saluran, struktur, embedding - sagalana di Go ... Anjeun ngalanggan hiji acara, lulus fungsi dinya.

Dina: - Jadi kuring nulis dina "taranjang" Js?

AG: - Henteu, anjeun nyerat saolah-olah di Go teras sambungkeun ka API browser (API henteu acan robih). Anjeun tiasa nyerat beungkeutan anjeun nyalira supados pesen dikirim ka saluran - éta henteu sesah.

Dina: – Kumaha upami mobile?

AG: - Kuring pasti nempo: aya bindings pikeun patch Cordova nu Js ngajalankeun. Dina React Native - Kuring henteu terang; meureun aya, meureun moal (Kuring teu utamana kabetot). Mesin kaulinan N-go ngarojong duanana aplikasi mobile - duanana ios sarta Android.

Dina: - Patarosan ngeunaan Majelis Wéb. Beuki loba spasi keur dicokot nepi, sanajan komprési jeung "zipping" ... Naha urang moal maéhan dunya hareup-tungtung ku cara kieu malah leuwih?

AG: - Majelis Web mangrupakeun format binér, sarta binér sacara standar teu bisa di release final leuwih ti téks ... Anjeun ditarik ka runtime, tapi ieu téh sarua jeung nyered kaluar perpustakaan Javascript baku lamun teu aya, jadi urang ngagunakeun sababaraha Lodash. Kuring henteu weruh sabaraha Lodash nyokot.

Dina: - Jelas kirang ti runtime ...

AG: - Dina "murni" Javascript?

Dina: - Sumuhun. Urang komprési sateuacan dikirim...

AG: - Tapi ieu téks ... Sacara umum, hiji megabyte sigana kawas pisan, tapi éta sakabéh (anjeun boga sakabéh runtime). Salajengna, anjeun nyerat logika bisnis anjeun nyalira, anu bakal ningkatkeun binér anjeun ku 1%. Sajauh ieu kuring henteu ningali ieu maéhan frontend. Sumawona, Majelis Wéb bakal dianggo langkung gancang tibatan Javascript pikeun alesan anu écés - éta henteu kedah di-parse.

Dina: - Ieu masih titik kontroversial ... Aya henteu acan sagala palaksanaan rujukan tina "Vasma" (Majelis Web) ku kituna hiji bisa nangtoskeun unambiguously. Conceptually, enya: urang sadayana ngartos yen binér kudu gancang, tapi palaksanaan ayeuna tina V8 sarua pisan efisien.

AG: - Sumuhun.

Dina: - Kompilasi aya jalanna saé pisan sareng éta sanés kanyataan yén bakal aya kauntungan anu ageung.

AG: – Majelis Web ogé dijieun ku guys badag.

Dina: – Sigana mah nu masih hese nangtoskeun Majelis Web. Aya paguneman mangtaun-taun ayeuna, tapi aya sababaraha prestasi nyata anu tiasa dirasakeun.

AG: - Tiasa waé. Urang tingali.

Dina: - Urang teu boga masalah dina backend nu ... Meureun urang kudu ninggalkeun masalah ieu dina frontend nu? Naha ka ditu?

AG: - Urang kedah ngajaga staf pagawé garis payun.

Sababaraha iklan 🙂

Hatur nuhun pikeun tetep sareng kami. Naha anjeun resep artikel kami? Hoyong ningali eusi anu langkung narik? Dukung kami ku cara nempatkeun pesenan atanapi nyarankeun ka babaturan, cloud VPS pikeun pamekar ti $4.99, analog unik tina server tingkat éntri, anu diciptakeun ku kami pikeun anjeun: Sakabeh bebeneran ngeunaan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ti $ 19 atanapi kumaha babagi server a? (sadia kalawan RAID1 na RAID10, nepi ka 24 cores sarta nepi ka 40GB DDR4).

Dell R730xd 2 kali langkung mirah dina puseur data Equinix nagara golongan IV di Amsterdam? Ngan di dieu 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ti $199 di Walanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ti $99! Baca ngeunaan Kumaha ngawangun Infrastruktur Corp. kelas kalawan pamakéan Dell R730xd E5-2650 v4 server patut 9000 euro pikeun Penny a?

sumber: www.habr.com

Tambahkeun komentar