Kyiv Go Meetup Mei 2018:
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?
Apa ora cukup tes? Mbangun alon? Ekosistem? nggih.
Babagan frontend, aku seneng karo kutipan salah sawijining pangembang frontend ing bukune:
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.
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:
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.
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:
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.
- 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?
- 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.
- 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:
Iki minangka jagad cilik hello ...
...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
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
- 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.
- 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:
Utawa pilihan iki (Aku ora bisa nemokake penembake 3D, nanging bisa uga ana):
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?
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.
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,
Dell R730xd 2 kaping luwih murah ing pusat data Equinix Tier IV ing Amsterdam? Mung kene
Source: www.habr.com