{"id":71628,"date":"2020-02-27T08:51:24","date_gmt":"2020-02-27T05:51:24","guid":{"rendered":"https:\/\/prohoster.info\/blog\/aleksej-grachyov-go-frontend"},"modified":"2020-03-03T16:14:16","modified_gmt":"2020-03-03T13:14:16","slug":"aleksej-grachyov-go-frontend","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Alexej Gra\u010dov: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyjev Go Meetup m\u00e1j 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Moder\u00e1tor:<\/b> \u2013 Vitajte v\u0161etci! \u010eakujem, \u017ee ste sa tu zi\u0161li! Dnes m\u00e1me dvoch ofici\u00e1lnych re\u010dn\u00edkov \u2013 Le\u0161u a Va\u0148u. Bud\u00fa e\u0161te dvaja, ak n\u00e1m zostane \u010das. Prv\u00fdm re\u010dn\u00edkom je Alexej Gra\u010dov, porozpr\u00e1va n\u00e1m o GopherJS.<\/p>\n<p><b>Alexej Gra\u010dov (\u010falej \u2013 AG):<\/b> \u2013 Som Go v\u00fdvoj\u00e1r a p\u00ed\u0161em webov\u00e9 slu\u017eby v Go. Niekedy sa mus\u00edm zaobera\u0165 frontendom, ob\u010das sa mus\u00edm dosta\u0165 aj tam rukami. Chcem sa s vami podeli\u0165 o svoje sk\u00fasenosti a v\u00fdskum Go na fronte.<\/p>\n<p>Legendy hovoria: najprv sa porozpr\u00e1vame, pre\u010do chceme sp\u00fa\u0161\u0165a\u0165 Go na fronte, potom si povieme, ako to m\u00f4\u017eeme urobi\u0165. S\u00fa dve cesty \u2013 Web Assembly a GopherJS. Pozrime sa, v akom stave s\u00fa tieto rie\u0161enia a \u010do sa d\u00e1 robi\u0165.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u010co nie je v poriadku s frontend-om?<\/h3>\n<p>\nV\u0161etci s\u00fahlasia, \u017ee je front-end v poriadku?<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00e1lo testov? Pomal\u00e1 kompil\u00e1cia? Ekosyst\u00e9m? Dobre.<\/p>\n<p>Pokia\u013e ide o frontend, p\u00e1\u010di sa mi cit\u00e1t, ktor\u00fd povedal jeden z frontend v\u00fdvoj\u00e1rov vo svojej knihe:<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV Javascripte nie je syst\u00e9m typov. Teraz za\u010dnem hovori\u0165 o probl\u00e9moch, s ktor\u00fdmi som sa stretol v priebehu svojej pr\u00e1ce a vysvetli\u0165, ako ich rie\u0161ia.<\/p>\n<p>Syst\u00e9m typov sa \u0165a\u017eko naz\u00fdva syst\u00e9mom typov v Javascripte \u2013 s\u00fa tam re\u0165azce, ktor\u00e9 ozna\u010duj\u00fa typ objektu, ale v skuto\u010dnosti to nem\u00e1 ni\u010d spolo\u010dn\u00e9ho s typmi. Tento probl\u00e9m bol vyrie\u0161en\u00fd v TypeScripte (nadstavba nad Javascriptem) a Flow (statick\u00fd kontrol\u00f3r typov v Javascripte). V skuto\u010dnosti u\u017e frontend dosiahol rie\u0161enie probl\u00e9mu zl\u00e9ho syst\u00e9mu typov v Javascripte.<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0160tandardn\u00e1 kni\u017enica v prehliada\u010di jednoducho neexistuje \u2013 s\u00fa tam nejak\u00e9 vstavan\u00e9 objekty a \"magick\u00e9\" funkcie v prehliada\u010doch. Ale v Javascipte ako takom neexistuje \u0161tandardn\u00e1 kni\u017enica. Tento probl\u00e9m u\u017e kedysi vyrie\u0161il jQuery (v\u0161etci pou\u017e\u00edvali jQuery so v\u0161etk\u00fdmi prototypmi, pomocn\u00fdmi funkciami, ktor\u00e9 s\u00fa potrebn\u00e9 na pr\u00e1cu). Teraz v\u0161etci pou\u017e\u00edvaj\u00fa Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback hell. Mysl\u00edm, \u017ee v\u0161etci u\u017e niekde videli k\u00f3d v Javascripte pred asi 5 rokmi, a pripom\u00ednal \"nudle\" z neuverite\u013enej spleti callbackov. Teraz sa tento probl\u00e9m vyrie\u0161il (s pr\u00edchodom ES-15 alebo ES-16), do Javascriptu pridali promisy a v\u0161etk\u00fdm sa na chv\u00ed\u013eu \u013eah\u0161ie d\u00fdchalo.<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00fdm nepri\u0161iel Promice hell\u2026 Neviem, ako sa frontendov\u00fd priemysel dost\u00e1va do tak\u00fdch zvl\u00e1\u0161tnych situ\u00e1ci\u00ed, ale st\u00e1le sa dost\u00e1vaj\u00fa do zvl\u00e1\u0161tnych zlo\u017eitost\u00ed. Podarilo sa im urobi\u0165 hell aj z \u201epromisov\u201c. Potom tento probl\u00e9m vyrie\u0161ili pridan\u00edm nov\u00e9ho primit\u00edvu \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS asynchr\u00f3nnos\u0165ou je probl\u00e9m vyrie\u0161en\u00fd. Async\/await \u2013 relat\u00edvne popul\u00e1rny primit\u00edv v r\u00f4znych jazykoch. V Pythone a in\u00fdch existuje tak\u00fdto pr\u00edstup \u2013 je dos\u0165 dobr\u00fd. Probl\u00e9m je vyrie\u0161en\u00fd.<\/p>\n<p>Ak\u00fd probl\u00e9m nie je vyrie\u0161en\u00fd? Rastu\u00faca geometrick\u00e1 zlo\u017eitosti r\u00e1mca, zlo\u017eitosti ekosyst\u00e9mu a samotn\u00fdch programov.<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Syntax JavaScriptu je trochu zvl\u00e1\u0161tny. V\u0161etci vieme o probl\u00e9moch s s\u010d\u00edtan\u00edm polia a objektu a in\u00fdmi z\u00e1le\u017eitos\u0165ami.<\/li>\n<li>JavaScript je multiparadigmatick\u00fd. Moment\u00e1lne je to osobitne aktu\u00e1lny syst\u00e9m, ke\u010f je ekosyst\u00e9m ve\u013emi ve\u013ek\u00fd:\n<ul>\n<li>v\u0161etci p\u00ed\u0161u r\u00f4znymi \u0161t\u00fdlmi \u2013 niekto p\u00ed\u0161e \u0161truktur\u00e1lne, niekto funk\u010dne, r\u00f4zni v\u00fdvoj\u00e1ri p\u00ed\u0161u inak;<\/li>\n<li>z r\u00f4znych bal\u00edkov (packages) r\u00f4zne paradigmy, ke\u010f pou\u017e\u00edvate r\u00f4zne bal\u00ed\u010dky;<\/li>\n<li>ve\u013ea \"z\u00e1bavy\" s funkcion\u00e1lnym programovan\u00edm v JavaScripte \u2013 objavila sa kni\u017enica ramda a teraz nikto nedok\u00e1\u017ee \u010d\u00edta\u0165 programy nap\u00edsan\u00e9 v tejto kni\u017enici.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>To v\u0161etko vn\u00e1\u0161a ve\u013ek\u00fd dopad do ekosyst\u00e9mu, ktor\u00fd nar\u00e1stol neuverite\u013ene. Bal\u00ed\u010dky si navz\u00e1jom nie s\u00fa kompatibiln\u00e9: niektor\u00e9 funguj\u00fa na pr\u00eds\u013euboch, niektor\u00e9 na async\/await, niektor\u00e9 na sp\u00e4tnej v\u00e4zbe. E\u0161te aj p\u00ed\u0161u v r\u00f4znych paradigmach!<\/li>\n<li>To vedie k tomu, \u017ee je \u0165a\u017ek\u00e9 projekt udr\u017eiava\u0165. \u0165a\u017ek\u00e9 n\u00e1js\u0165 bug, ak nem\u00f4\u017eete pre\u010d\u00edta\u0165 k\u00f3d.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u010co je to Web Assembly?<\/h3>\n<p>\nDodr\u017ea\u0165 z\u00e1sady z Mozilla Foundation a nieko\u013ek\u00fdch in\u00fdch spolo\u010dnost\u00ed vytvorili tak\u00fa vec, ako Web Assembly. \u010co to je?<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Je to zabudovan\u00fd virtu\u00e1lny stroj v prehliada\u010di, ktor\u00fd podporuje bin\u00e1rny form\u00e1t.<\/li>\n<li>Bin\u00e1rne programy sa dostan\u00fa dovn\u00fatra, vykon\u00e1vaj\u00fa sa takmer nat\u00edvne, to znamen\u00e1, \u017ee prehliada\u010du nie je potrebn\u00e9 zaka\u017ed\u00fdm analyzova\u0165 cel\u00fa \"nudn\u00fa\" javascriptov\u00fa k\u00f3d.<\/li>\n<li>V\u0161etky prehliada\u010de ohl\u00e1sili podporu.<\/li>\n<li>Ke\u010f\u017ee je to bajtk\u00f3d, je mo\u017en\u00e9 nap\u00edsa\u0165 kompil\u00e1tor pre ak\u00fdko\u013evek jazyk.<\/li>\n<li>\u0160tyri hlavn\u00e9 prehliada\u010de u\u017e s\u00fa dod\u00e1van\u00e9 s podporou Web Assembly.<\/li>\n<li>\u010coskoro o\u010dak\u00e1vame nat\u00edvnu podporu v Go. Tak\u00e1to nov\u00e1 architekt\u00fara u\u017e bola pridan\u00e1: GOARCH=wasm GOOS=js (\u010doskoro). Zatia\u013e, ako ch\u00e1pem, nie je funk\u010dn\u00e1, av\u0161ak je tu vyhl\u00e1senie, \u017ee to ur\u010dite bude v Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u010co robi\u0165 teraz? GopherJS<\/h3>\n<p>\nK\u00fdm nem\u00e1me podporu Web Assembly, existuje tak\u00fd transpiler ako GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>K\u00f3d na Go sa transpile do \"\u010dist\u00e9ho\" JavaScriptu.<\/li>\n<li>Be\u017e\u00ed vo v\u0161etk\u00fdch prehliada\u010doch \u2013 tam nie s\u00fa \u017eiadne nov\u00e9 funkcie, ktor\u00e9 s\u00fa podporovan\u00e9 iba modern\u00fdmi prehliada\u010dmi (to je Vanilla JS, ktor\u00fd be\u017e\u00ed na v\u0161etkom).<\/li>\n<li>Podpora podstatne v\u0161etk\u00e9ho, \u010do je v Go, vr\u00e1tane gorut\u00edn a kan\u00e1lov\u2026 \u2013 v\u0161etko, \u010do m\u00e1me radi a pozn\u00e1me.<\/li>\n<li>Takmer cel\u00e1 \u0161tandardn\u00e1 kni\u017enica je podporovan\u00e1, okrem t\u00fdch bal\u00edkov, ktor\u00e9 nemaj\u00fa zmysel podporova\u0165 v prehliada\u010di: syscall, sie\u0165ov\u00e1 interakcia (existuje net\/http klient, ale server nie, a klient je emulovan\u00fd prostredn\u00edctvom XMLHttpRequest). Vo v\u0161eobecnosti je cel\u00e1 \u0161tandardn\u00e1 kni\u017enica dostupn\u00e1 \u2013 tu je v prehliada\u010di, tu je stdlib Go, ktor\u00fa milujeme.<\/li>\n<li>Cel\u00fd ekosyst\u00e9m bal\u00edka v Go, v\u0161etky extern\u00e9 rie\u0161enia (\u0161abl\u00f3novanie a in\u00e9) m\u00f4\u017eu by\u0165 skompilovan\u00e9 pomocou GopherJS a spusten\u00e9 v prehliada\u010di.<\/li>\n<\/ul>\n<p>\nZ\u00edska\u0165 GopherJS je ve\u013emi jednoduch\u00e9 \u2013 je to be\u017en\u00fd Go bal\u00edk. Rob\u00edme go get, a m\u00e1me pr\u00edkaz GopherJS na zostavenie aplik\u00e1cie:<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak\u00fdto mal\u00fd hello world\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026Be\u017en\u00fd Go program, be\u017en\u00fd bal\u00edk fmt zo \u0161tandardnej kni\u017enice a Binding Js, aby sme sa dostali k API prehliada\u010da. Println nakoniec bude prekonvertovan\u00fd na console log a prehliada\u010d nap\u00ed\u0161e \u201eHello gophers\u201c! Takto jednoducho: rob\u00edme GopherJS build \u2013 sp\u00fa\u0161\u0165ame v prehliada\u010di \u2013 v\u0161etko funguje!<\/p>\n<h3>\u010co tu m\u00e1me moment\u00e1lne? Binders<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nExistuj\u00fa bindery ku v\u0161etk\u00fdm popul\u00e1rnym js-frameworkom:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js na vytv\u00e1ranie grafov a pr\u00e1cu s ve\u013ek\u00fdmi d\u00e1tami;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>existuje dokonca podpora Electron (to znamen\u00e1, \u017ee u\u017e teraz m\u00f4\u017eeme p\u00edsa\u0165 desktopov\u00e9 aplik\u00e1cie na 'Elektrone');<\/li>\n<li>a najz\u00e1bavnej\u0161ie \u2013 to je WebGL (m\u00f4\u017eeme robi\u0165 polyg\u00f3nov\u00e9 aplik\u00e1cie, vr\u00e1tane hier s 3D grafikou, hudbou a v\u0161etk\u00fdmi vychyt\u00e1vkami);<\/li>\n<li>a ve\u013emi ve\u013ea \u010fal\u0161\u00edch binderov ku v\u0161etk\u00fdm popul\u00e1rnym javascript-frameworkom a kni\u017eniciam.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Existuje u\u017e vyvinut\u00fd webov\u00fd framework \u0161peci\u00e1lne pre GopherJS \u2013 Vecty. Je to plnohodnotn\u00fd ekvivalent React.js, ale vyvinut\u00fd v Go, so \u0161pecifikou GopherJS.<\/li>\n<li>Existuj\u00fa hern\u00e9 r\u00e1mce (prekvapuj\u00faco!). Na\u0161iel som dva najpopul\u00e1rnej\u0161ie:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nPredvediem p\u00e1r pr\u00edkladov, ako to vyzer\u00e1 a \u010do u\u017e teraz m\u00f4\u017eeme nap\u00edsa\u0165 v Go:<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlebo tak\u00e1to verzia (3D striela\u010dku som nena\u0161iel, ale mo\u017eno existuje):<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u010co navrhujem?<\/h3>\n<p>\nMoment\u00e1lne je priemysel frontendu v takom stave, \u017ee tam teraz pozv\u00fa v\u0161etky jazyky, ktor\u00e9 predt\u00fdm plakali nad Javascriptom. Teraz sa v\u0161etky jazyky bud\u00fa kompilova\u0165 do 'Web Assembly'. \u010co potrebujeme, aby sme sa tam umiestnili na slu\u0161nom mieste ako 'gofers'?<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV Go je tradi\u010dne pova\u017eovan\u00fd za jazyk syst\u00e9mov\u00e9ho programovania a takmer neexistuj\u00fa \u017eiadne kni\u017enice na pr\u00e1cu s UI. Nie\u010do existuje, ale je to napoly zanedban\u00e9 a napoly nefunk\u010dn\u00e9.<\/p>\n<p>A tu je \u2013 skvel\u00e1 pr\u00edle\u017eitos\u0165 vytvori\u0165 UI kni\u017enice v Go, ktor\u00e9 sa spustia na GopherJS! M\u00f4\u017eete kone\u010dne nap\u00edsa\u0165 svoj vlastn\u00fd framework! Pri\u0161iel \u010das, kedy m\u00f4\u017eete nap\u00edsa\u0165 framework, a ten bude jedn\u00fdm z prv\u00fdch a z\u00edska r\u00fdchlu adopciu, a vy sa stanete hviezdou (ak to bude dobr\u00fd framework).<\/p>\n<p>M\u00f4\u017eete prisp\u00f4sobi\u0165 mno\u017estvo r\u00f4znych bal\u00edkov, ktor\u00e9 u\u017e existuj\u00fa v ekosyst\u00e9me Go, pre \u0161pecifik\u00e1 prehliada\u010da (napr\u00edklad templ\u00e1tovac\u00ed syst\u00e9m). Tieto u\u017e bud\u00fa fungova\u0165, m\u00f4\u017eete vytvori\u0165 pohodln\u00e9 obalov\u00e9 funkcie, aby ste mohli \u013eahko renderova\u0165 obsah priamo v prehliada\u010di. Navy\u0161e, m\u00f4\u017eete vytvori\u0165 napr\u00edklad slu\u017ebu, ktor\u00e1 dok\u00e1\u017ee renderova\u0165 to ist\u00e9 na serveri a na frontende pomocou toho ist\u00e9ho k\u00f3du \u2013 v\u0161etko, ako to maj\u00fa radi frontendov\u00ed v\u00fdvoj\u00e1ri (len teraz v Go).<\/p>\n<p>M\u00f4\u017eete nap\u00edsa\u0165 hru! Len pre z\u00e1bavu\u2026<\/p>\n<p>M\u00e1m v\u0161etko.<\/p>\n<p><img decoding=\"async\" alt=\"Alexej Gra\u010dov: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Ot\u00e1zky<\/h3>\n<p>\n<b>Ot\u00e1zka (\u010falej \u2013 O):<\/b> \u2013 P\u00ed\u0161em v Go alebo v Js?<\/p>\n<p><b>AG:<\/b> \u2013 P\u00ed\u0161e\u0161 v Go routine, kan\u00e1ly, \u0161trukt\u00fary, embedding \u2013 v\u0161etko... Prihl\u00e1si\u0161 sa na udalos\u0165, posiela\u0161 tam funkciu.<\/p>\n<p><b>A:<\/b> \u2013 Tak\u017ee p\u00ed\u0161em v \"holom\" Js?<\/p>\n<p><b>AG:<\/b> \u2013 Nie, p\u00ed\u0161e\u0161 akoby v Go a prip\u00e1ja\u0161 sa k API prehliada\u010da (API pri tom nezmenilo). M\u00f4\u017ee\u0161 nap\u00edsa\u0165 svoje obalov\u00e9 funkcie, aby spr\u00e1vy prich\u00e1dzali do kan\u00e1la \u2013 to nie je zlo\u017eit\u00e9.<\/p>\n<p><b>A:<\/b> \u2013 \u010co s mobilom?<\/p>\n<p><b>AG:<\/b> \u2013 Ur\u010dite som videl: existuj\u00fa v\u00e4zby pre patch Cordova, ktor\u00e9 Js sp\u00fa\u0161\u0165a. V React Native \u2013 neviem; mo\u017eno s\u00fa, a mo\u017eno nie (nemal som ve\u013emi z\u00e1ujem). Hern\u00fd engine N-go podporuje aj mobiln\u00e9 aplik\u00e1cie \u2013 a iOS, aj Android.<\/p>\n<p><b>A:<\/b> \u2013 Ot\u00e1zka oh\u013eadom Web Assembly. Miesta je st\u00e1le viac, napriek kompresii, \u201ezipovosti\u201c... Nezabijeme t\u00fdm svet frontendu e\u0161te viac?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly je bin\u00e1rny form\u00e1t a bin\u00e1rny ako predvolen\u00fd nem\u00f4\u017ee by\u0165 v kone\u010dnej verzii v\u00e4\u010d\u0161\u00ed ako text... Tiahne v\u00e1s runtime, ale to je to ist\u00e9, ako \u0165aha\u0165 \u0161tandardn\u00fa kni\u017enicu Javascript, ke\u010f ju nem\u00e1te, preto pou\u017e\u00edvame nie\u010do ako Lodash. Neviem, ko\u013eko Lodash zaber\u00e1.<\/p>\n<p><b>A:<\/b> \u2013 Ur\u010dite menej, ne\u017e runtime...<\/p>\n<p><b>AG:<\/b> \u2013 Na \u201e\u010distom\u201c Javascript?<\/p>\n<p><b>A:<\/b> \u2013 \u00c1no. Ve\u010f ho komprimujeme predt\u00fdm, ako ho posielame...<\/p>\n<p><b>AG:<\/b> \u2013 Ale to je text\u2026 V podstate, megabajt je dos\u0165 ve\u013ea, ale to je v\u0161etko (m\u00e1\u0161 cel\u00fd runtime). Potom nap\u00ed\u0161 svoju obchodn\u00fa logiku, ktor\u00e1 zv\u00fd\u0161i tvoj binary o 1 %. Zatia\u013e nevid\u00edm, \u017ee by to zab\u00edjalo frontend. Ove\u013ea viac, Web Assembly bude fungova\u0165 r\u00fdchlej\u0161ie ako Javascript z oh\u013eadom na jasn\u00fd d\u00f4vod \u2013 nemus\u00ed sa parsova\u0165.<\/p>\n<p><b>A:<\/b> \u2013 Zatia\u013e sporn\u00fd bod\u2026 E\u0161te neexistuje nejak\u00e1 vzorov\u00e1 implement\u00e1cia \u201eVasm\u201c (Web Assembly), aby sa dalo jednozna\u010dne pos\u00fadi\u0165. Konceptu\u00e1lne \u2013 \u00e1no: v\u0161etci rozumieme, \u017ee binary by mal by\u0165 r\u00fdchlej\u0161\u00ed, ale s\u00fa\u010dasn\u00e1 implement\u00e1cia toho ist\u00e9ho V8 je ve\u013emi efekt\u00edvna.<\/p>\n<p><b>AG:<\/b> \u2013 \u00c1no.<\/p>\n<p><b>A:<\/b> \u2013 Kompil\u00e1cia tam funguje naozaj ve\u013emi skvele a nie je ist\u00e9, \u017ee bude ve\u013ek\u00e1 v\u00fdhoda.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly robia tie\u017e ve\u013ek\u00ed chlapci.<\/p>\n<p><b>A:<\/b> \u2013 Zatia\u013e, mysl\u00edm, je \u0165a\u017ek\u00e9 pos\u00fadi\u0165 Web Assembly. U\u017e ko\u013eko rokov sa o tom diskusuje, a re\u00e1lnych dosiahnut\u00ed, ktor\u00e9 m\u00f4\u017eeme nahmata\u0165, je m\u00e1lo.<\/p>\n<p><b>AG:<\/b> \u2013 Mo\u017eno. Uvid\u00edme.<\/p>\n<p><b>A:<\/b> \u2013 Nem\u00e1me probl\u00e9my na backend-e\u2026 Mo\u017eno, by sme mali necha\u0165 tieto probl\u00e9my na frontende? Pre\u010do sa tam mie\u0161a\u0165?<\/p>\n<p><b>AG:<\/b> \u2013 Mus\u00edme dr\u017ea\u0165 t\u00edm frontend\u00e1rov.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"xF2xUKIk2MQ\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/xF2xUKIk2MQ\/hqdefault.jpg\" alt=\"Prehrajte video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Trochu reklamy \ud83d\ude42<\/h3>\n<p>\n\u010eakujeme, \u017ee ost\u00e1vate s nami. P\u00e1\u010dia sa v\u00e1m na\u0161e \u010dl\u00e1nky? Chcete vidie\u0165 viac zauj\u00edmav\u00fdch materi\u00e1lov? Podporte n\u00e1s, vytvoren\u00edm objedn\u00e1vky alebo odpor\u00fa\u010dan\u00edm zn\u00e1mym, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloud VPS pre v\u00fdvoj\u00e1rov od 4,99 dol\u00e1rov<\/a><\/noindex>, <b>unik\u00e1tny ekvivalent entry-level serverov, ktor\u00fd sme pre v\u00e1s vytvorili:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Cel\u00e1 pravda o VPS (KVM) E5-2697 v3 (6 jadier) 10GB DDR4 480GB SSD 1Gbps od 19 dol\u00e1rov alebo ako spr\u00e1vne rozdeli\u0165 server?<\/a><\/noindex> (k dispoz\u00edcii varianty s RAID1 a RAID10, a\u017e 24 jadier a a\u017e 40GB DDR4).<\/p>\n<p><b>Dell R730xd je dvakr\u00e1t lacnej\u0161\u00ed v d\u00e1tovom centre Equinix Tier IV v Amsterdame?<\/b> Len u n\u00e1s <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB od 199 dol\u00e1rov<\/a><\/noindex> v Holandsku! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 od 99 dol\u00e1rov!<\/b><\/b> Pre\u010d\u00edtajte si o tom <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Ako vybudova\u0165 infra\u0161trukt\u00faru korpor\u00e1tneho typu s pou\u017eit\u00edm serverov Dell R730xd E5-2650 v4 s cenou 9000 eur za zlomok ceny?<\/a><\/noindex><br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/489636\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0432\u044b \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0443 \u043d\u0430\u0441 \u0434\u0432\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043f\u0438\u043a\u0435\u0440\u0430 \u2013 \u041b\u0451\u0448\u0430 \u0438 \u0412\u0430\u043d\u044f. \u0411\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0434\u0432\u0430, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0445\u0432\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u043a\u0435\u0440 \u2013 \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432, \u043e\u043d \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u043e GopherJS. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2013 \u0410\u0413): \u2013 \u042f \u2013 Go-\u0434\u0435\u0432\u0435\u043b\u043e\u043f\u0435\u0440, \u0438 \u044f \u043f\u0438\u0448\u0443 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71629,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71628","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432: Go Frontend | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-27T05:51:24+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:16+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Alexej Gra\u010dov: Go Frontend | ProHoster","description":"Kyiv Go Meetup m\u00e1j 2018: Moder\u00e1tor: \u2013 V\u0161etk\u00fdm.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u0430\u0447\u0451\u0432: Go Frontend | ProHoster","og:description":"Kyiv Go Meetup May 2018: \u0412\u0435\u0434\u0443\u0449\u0438\u0439: \u2013 \u0412\u0441\u0435\u043c.","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-27T05:51:24+00:00","article:modified_time":"2020-03-03T13:14:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71628","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:58:26","updated":"2022-09-27 20:58:26","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}