Alexey Grachev: Go Frontend

Kyiv Go Meetup Mei 2018:

Alexey Grachev: Go Frontend

Pimpin: - Halo kabeh! Matur nuwun wis kene! Dina iki kita duwe loro pamicara resmi - Lyosha lan Vanya. Bakal ana loro maneh yen kita duwe cukup wektu. Pembicara pisanan yaiku Alexey Grachev, dheweke bakal ngandhani babagan GopherJS.

Alexey Grachev (sabanjuré - AG): – Aku pangembang Go, lan aku nulis layanan web ing Go. Kadhangkala sampeyan kudu ngatasi frontend, kadhangkala sampeyan kudu mlebu kanthi manual. Aku pengin ngomong babagan pengalaman lan riset menyang Go on the frontend.

Legenda iki: pisanan kita bakal pirembagan bab apa kita arep mbukak Go ing frontend, banjur kita bakal pirembagan bab carane iki bisa rampung. Ana rong cara - Majelis Web lan GopherJS. Ayo ndeleng apa status solusi kasebut lan apa sing bisa ditindakake.

Apa sing salah karo frontend?

Apa kabeh wong setuju yen kabeh apik karo frontend?

Alexey Grachev: Go Frontend

Apa ora cukup tes? Mbangun alon? Ekosistem? nggih.

Babagan frontend, aku seneng karo kutipan salah sawijining pangembang frontend ing bukune:

Alexey Grachev: Go Frontend

Javascript ora duwe sistem jinis. Saiki aku bakal menehi jeneng masalah sing aku nemoni sajrone karya lan nerangake carane ngrampungake.

Sistem jinis ing umum meh ora bisa diarani sistem jinis ing Javasript - ana garis sing nuduhake jinis obyek, nanging nyatane iki ora ana hubungane karo jinis. Masalah iki ditanggulangi ing TypeScript (tambahan kanggo Javasript) lan Flow (pemeriksa tipe statis ing Javascript). Bener, frontend wis tekan titik ngrampungake masalah sistem jinis ala ing Javascript.

Alexey Grachev: Go Frontend

Ora ana perpustakaan standar ing browser kaya ngono - ana sawetara obyek sing dibangun lan fungsi "sihir" ing browser. Nanging ing Javascript ora ana perpustakaan standar. Masalah iki wis ditanggulangi sapisan dening jQuery (kabeh wong nggunakake jQuery karo kabeh prototype, helpers, fungsi sing padha perlu kanggo bisa). Saiki kabeh wong nggunakake Lodash:

Alexey Grachev: Go Frontend

Callback neraka. Aku mikir kabeh wong weruh kode Javascript babagan 5 taun kepungkur, lan katon kaya "mi" saka kerumitan callback sing luar biasa. Saiki masalah iki wis ditanggulangi (kanthi release ES-15 utawa ES-16), janji wis ditambahake menyang Javascript lan kabeh wong bisa ambegan luwih gampang kanggo sawetara wektu.

Alexey Grachev: Go Frontend

Nganti Promice neraka teka ... Aku ora ngerti carane industri ngarep-mburi ngatur, nanging padha tansah drive piyambak menyang sawetara alas aneh. Kita uga bisa nggawe neraka ing janji. Banjur kita ngrampungake masalah iki kanthi nambah primitif anyar - async/await:

Alexey Grachev: Go Frontend

Masalah karo asynchrony wis ditanggulangi. Async/await minangka primitif sing cukup populer ing macem-macem basa. Python lan liya-liyane duwe pendekatan iki - cukup apik. Masalah ditanggulangi.

Masalah apa sing ora ditanggulangi? Kompleksitas kerangka kerja sing saya tambah akeh, kompleksitas ekosistem lan program kasebut dhewe.

Alexey Grachev: Go Frontend

  • Sintaks Javascript rada aneh. Kita kabeh ngerti masalah karo nambah array lan obyek lan lelucon liyane.
  • Javascript minangka multi-paradigma. Iki minangka sistem sing paling penting saiki nalika ekosistem gedhe banget:
    • saben wong nulis kanthi gaya sing beda-beda - sawetara nulis kanthi struktural, sawetara nulis kanthi fungsional, pangembang beda nulis kanthi cara sing beda-beda;
    • saka paket beda, paradigma beda nalika sampeyan nggunakake paket beda;
    • ana akeh "nyenengake" karo program fungsional ing Javasript - perpustakaan rambda katon lan saiki ora ana sing bisa maca program sing ditulis ing perpustakaan iki.

  • Kabeh iki ndadekake impact gedhe ing ekosistem, lan wis thukul luar biasa. Paket kasebut ora kompatibel karo siji liyane: sawetara adhedhasar janji, sawetara adhedhasar async / ngenteni, sawetara adhedhasar callback. Padha uga nulis ing paradigma beda!
  • Iki nggawe proyek angel kanggo njaga. Pancen angel golek bug yen sampeyan ora bisa maca kode kasebut.

Apa Web Assembly?

Wong lanang sing wani saka Yayasan Mozilla lan sawetara perusahaan liyane teka karo perkara kaya Web Assembly. Apa iki?

Alexey Grachev: Go Frontend

  • Iki minangka mesin virtual sing dibangun ing browser sing ndhukung format binar.
  • Program binar teka lan dieksekusi meh asli, yaiku, browser ora perlu ngurai kabeh "mi" kode javascript saben wektu.
  • Kabeh browser wis ngumumake dhukungan.
  • Amarga iki bytecode, sampeyan bisa nulis compiler kanggo basa apa wae.
  • Papat browser utama wis dikirim kanthi dhukungan Majelis Web.
  • Kita ngarepake dhukungan pribumi ing Go rauh. Arsitèktur anyar iki wis ditambahaké: GOARCH=wasm GOOS=js (rauh). Nganti saiki, aku ngerti, iku ora fungsi, nanging ana statement sing mesthi bakal ing Go.

Apa sing kudu ditindakake saiki? GopherJS

Nalika kita ora duwe dhukungan kanggo Web Assembly, ana transpiler kaya GopherJS.

Alexey Grachev: Go Frontend

  • Kode Go wis transpiled menyang "murni" Javascript.
  • Mlaku ing kabeh browser - ora ana fitur anyar sing mung didhukung dening browser modern (iki Vanilla JS, sing nganggo apa wae).
  • Ana dhukungan kanggo meh kabeh sing duwe Go, kalebu goroutine lan saluran ... kabeh sing kita tresnani lan ngerti banget.
  • Meh kabeh perpustakaan standar didhukung, kajaba paket sing ora ana gunane kanggo ndhukung ing browser: syscall, interaksi net (ana net / klien http, nanging ora ana server, lan klien ditiru liwat XMLHttpRequest). Umumé, kabeh perpustakaan standar kasedhiya - kene ing browser, punika stdlib Go kang, sing kita tresnani.
  • Kabeh ekosistem paket ing Go, kabeh solusi pihak katelu (templating, etc.) bisa dikompilasi nggunakake GopherJS lan mbukak ing browser.

GopherJS gampang banget dipikolehi - mung paket Go biasa. Kita njaluk, lan kita duwe perintah GopherJS kanggo mbangun aplikasi kasebut:

Alexey Grachev: Go Frontend

Iki minangka jagad cilik hello ...

Alexey Grachev: Go Frontend

...Program Go biasa, paket fmt perpustakaan standar biasa lan Binding Js kanggo nggayuh API browser. Println pungkasane bakal diowahi dadi log konsol lan browser bakal nulis "Hello gophers"! Iku sing prasaja: kita nggawe GopherJS mbangun - kita miwiti ing browser - kabeh bisa!

Apa sing sampeyan duwe saiki? Bindings

Alexey Grachev: Go Frontend

Ana bindings kanggo kabeh kerangka js populer:

  • JQuery;
  • Angular.js;
  • D3.js kanggo ngrancang lan nggarap data gedhe;
  • React.js;
  • VueJS;
  • malah ana dhukungan kanggo Electron (yaiku, kita wis bisa nulis aplikasi desktop ing Electron);
  • lan sing paling lucu yaiku WebGL (kita bisa nggawe aplikasi grafis lengkap, kalebu game kanthi grafis 3D, musik lan kabeh barang);
  • lan akeh binding liyane kanggo kabeh frameworks javascript populer lan perpustakaan.

framework

  1. Ana kerangka web sing wis dikembangake khusus kanggo GopherJS - Vecty. Iki minangka analog lengkap saka React.js, nanging mung dikembangake ing Go, kanthi spesifik GopherJS.
  2. Ana tas game (surprise!). Aku nemokake loro sing paling populer:
    • Enggo;
    • Ebiten.

Aku bakal nuduhake sawetara conto sing katon lan apa sing wis bisa ditulis ing Go:

Alexey Grachev: Go Frontend

Utawa pilihan iki (Aku ora bisa nemokake penembake 3D, nanging bisa uga ana):

Alexey Grachev: Go Frontend

Apa sing daktawakake?

Saiki industri front-end ana ing kahanan kaya mengkono kabeh basa sing sadurunge nangis saka Javascript bakal cepet-cepet ana. Saiki kabeh bakal dikompilasi dadi "Web Assemblies". Apa kita kudu njupuk Panggonan tengen kita minangka Gophers?

Alexey Grachev: Go Frontend

Go wis tradisional nganggep yen iku basa pemrograman Sistem, lan meh ora ana perpustakaan kanggo nggarap UI. Ana sing, nanging setengah ditinggalake, setengah ora fungsional.

Lan saiki minangka kesempatan sing apik kanggo nggawe perpustakaan UI ing Go sing bakal mbukak ing GopherJS! Sampeyan pungkasanipun bisa nulis framework dhewe! Iki wektu nalika sampeyan bisa nulis framework, lan iku bakal dadi salah siji saka pisanan lan Adoption awal, lan sampeyan bakal lintang (yen framework apik).

Sampeyan bisa ngganti macem-macem paket sing wis ana ing ekosistem Go kanggo spesifik browser (contone, mesin Cithakan). Dheweke bakal bisa digunakake, sampeyan bisa nggawe ikatan sing trep supaya sampeyan bisa kanthi gampang menehi konten langsung ing browser. Kajaba iku, sampeyan bisa nggawe, umpamane, layanan sing bisa nggawe perkara sing padha ing server lan ing ngarep, nggunakake kode sing padha - kabeh sing disenengi pangembang ngarep (mung saiki ing Go).

Sampeyan bisa nulis game! Mung kanggo seneng-seneng…

Mung kuwi sing dakkandhakake.

Alexey Grachev: Go Frontend

Pitakonan

Pitakonan (sabanjuré diarani Q): – Apa aku nulis ing Go utawa Js?

AG: – Sampeyan nulis rutin, saluran, struktur, embedding – kabeh ing Go... Sampeyan langganan acara, pass fungsi ana.

IN: – Dadi aku nulis ing "wuda" Js?

AG: – Ora, sampeyan nulis kaya ing Go lan nyambung menyang API browser (API durung diganti). Sampeyan bisa nulis bindings dhewe supaya pesen dikirim menyang saluran - iku ora angel.

IN: – Apa babagan seluler?

AG: – Aku mesthi weruh: ana bindings kanggo tembelan Cordova sing Js mlaku. Ing React Native - Aku ora ngerti; Mungkin ana, bisa uga ora (Aku ora utamané kasengsem). Mesin game N-go ndhukung loro aplikasi seluler - loro iOS lan Android.

IN: - Pitakonan babagan Majelis Web. Luwih akeh papan sing ditindakake, sanajan kompresi lan "zipping" ... Apa kita ora bakal mateni jagad ngarep kanthi cara iki luwih akeh?

AG: – Majelis Web minangka format binar, lan binar kanthi gawan ora bisa ing release final luwih saka teks... Sampeyan ditarik menyang runtime, nanging iki padha karo nyeret metu perpustakaan Javascript standar nalika ora ana, supaya kita nggunakake sawetara Lodash. Aku ora ngerti carane Lodash njupuk.

IN: - Temenan kurang saka runtime ...

AG: – Ing Javascript "murni"?

IN: - Ya. Kita kompres sadurunge ngirim ...

AG: - Nanging iki teks ... Umumé, megabyte katon kaya akeh, nanging kabeh (sampeyan duwe kabeh runtime). Sabanjure, sampeyan nulis logika bisnis sampeyan dhewe, sing bakal nambah binar kanthi 1%. Nganti saiki aku ora weruh iki mateni frontend. Kajaba iku, Majelis Web bakal luwih cepet tinimbang Javascript amarga alasan sing jelas - ora perlu diurai.

IN: – Iki isih titik kontrovèrsial ... Ana durung sembarang implementasine referensi saka "Vasma" (Web Assembly) supaya siji bisa ngadili unambiguously. Secara konseptual, ya: kita kabeh ngerti yen binar kudu luwih cepet, nanging implementasine saiki saka V8 sing padha banget efisien.

AG: - Ya.

IN: - Kompilasi ana kerjane apik banget lan dudu kasunyatan manawa bakal ana kauntungan gedhe.

AG: – Majelis Web uga digawe dening wong gedhe.

IN: – Iku misale jek kula sing isih angel kanggo ngadili Majelis Web. Wis pirang-pirang taun ana obrolan, nanging ana sawetara prestasi nyata sing bisa dirasakake.

AG: - Mungkin. Kita bakal weruh.

IN: - Kita ora duwe masalah ing backend ... Mungkin kita kudu ninggalake masalah iki ing frontend? Napa mrana?

AG: - Kita kudu njaga staf buruh garis ngarep.

Sawetara iklan 🙂

Matur nuwun kanggo tetep karo kita. Apa sampeyan seneng karo artikel kita? Pengin ndeleng konten sing luwih menarik? Ndhukung kita kanthi nggawe pesenan utawa menehi rekomendasi menyang kanca, cloud VPS kanggo pangembang saka $4.99, analog unik saka server level entri, sing diciptakake kanggo sampeyan: Bebener kabeh babagan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps saka $ 19 utawa carane nuduhake server? (kasedhiya karo RAID1 lan RAID10, munggah 24 intine lan nganti 40GB DDR4).

Dell R730xd 2 kaping luwih murah ing pusat data Equinix Tier IV ing Amsterdam? Mung kene 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV saka $199 ing Walanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - saka $99! Maca babagan Carane mbangun infrastruktur corp. kelas karo nggunakake Dell R730xd E5-2650 v4 server worth 9000 euro kanggo Penny?

Source: www.habr.com

Add a comment