{"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\/lv\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Aleksejs Gra\u010devs: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup 2018. gada maijs:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Vad\u012bt\u0101js:<\/b> \u2013 Sveiki visiem! Paldies, ka esat \u0161eit! \u0160odien mums ir divi ofici\u0101li run\u0101t\u0101ji \u2013 Le\u0161a un Vania. V\u0113l b\u016bs divi, ja paliks laiks. Pirmais run\u0101t\u0101js \u2013 Aleksejs Gra\u010devs, vi\u0146\u0161 past\u0101st\u012bs par GopherJS.<\/p>\n<p><b>Aleksejs Gra\u010devs (turpm\u0101k \u2013 AG):<\/b> \u2013 Esmu Go izstr\u0101d\u0101t\u0101js un rakstu t\u012bmek\u013ca pakalpojumus, izmantojot Go. Reiz\u0113m n\u0101kas saskarties ar frontend, da\u017ereiz ir j\u0101k\u013c\u016bst par da\u013cu no t\u0101. V\u0113los past\u0101st\u012bt par savu pieredzi un p\u0113t\u012bjumiem Go jom\u0101 frontend\u0101.<\/p>\n<p>Le\u0123enda t\u0101da: vispirms parun\u0101sim, k\u0101p\u0113c m\u0113s gribam palaist Go frontend\u0101, tad parun\u0101sim, k\u0101 to var izdar\u012bt. Ir divi ce\u013ci \u2013 Web Assembly un GopherJS. Apskat\u012bsim, k\u0101d\u0101 st\u0101vokl\u012b atrodas \u0161ie risin\u0101jumi un ko no tiem var dar\u012bt.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Kas nav k\u0101rt\u012bb\u0101 ar frontend?<\/h3>\n<p>\nVai visi piekr\u012bt, ka ar frontend viss ir k\u0101rt\u012bb\u0101?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMaza testu skaita? L\u0113na salik\u0161ana? Ekosist\u0113ma? Labi.<\/p>\n<p>Par frontend man pat\u012bk cit\u0101ts, ko teica viens no frontend izstr\u0101d\u0101t\u0101jiem sav\u0101 gr\u0101mat\u0101:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJavascript nav tipu sist\u0113mas. Tagad es nosauk\u0161u probl\u0113mas, ar kur\u0101m esmu sask\u0101ries sav\u0101 darb\u0101, un paskaidro\u0161u, k\u0101 t\u0101s tiek risin\u0101tas.<\/p>\n<p>T\u012bpu sist\u0113mu visp\u0101r gr\u016bti nosaukt par tipu sist\u0113mu Javascript \u2013 tur ir virknes, kas apz\u012bm\u0113 objekta tipu, bet tas paties\u012bb\u0101 nav saist\u012bts ar tipiem. \u0160\u012b probl\u0113ma ir atrisin\u0101ta TypeScript (papla\u0161in\u0101jums Javascript) un Flow (statisk\u0101 tipu p\u0101rbaude Javascript). Paties\u012bb\u0101 frontend jau ir atrisin\u0101jis slikt\u0101s tipu sist\u0113mas probl\u0113mu Javascript.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStandarta bibliot\u0113kas p\u0101rl\u016bkprogramm\u0101 k\u0101 t\u0101das nav \u2013 ir da\u017ei ieb\u016bv\u0113ti objekti un \u201ema\u0123isk\u0101s\u201d funkcijas p\u0101rl\u016bkprogramm\u0101s. Bet Javascript k\u0101 t\u0101ds standartbibliot\u0113kas nav. \u0160\u012b probl\u0113ma tika atrisin\u0101ta ar jQuery (visi izmantoja jQuery ar vis\u0101m prototipiem, pal\u012bgiem, funkcij\u0101m, kas nepiecie\u0161amas darbam). Tagad visi izmantot Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCallback hell. Dom\u0101ju, visi ir redz\u0113ju\u0161i Javascript kodu pirms 5 gadiem, un tas izskat\u012bj\u0101s p\u0113c \u201en\u016bde\u013cu\u201d no neticama kolbe\u017eu savijuma. Tagad \u0161\u012b probl\u0113ma ir atrisin\u0101ta (ar ES-15 vai ES-16 izn\u0101k\u0161anu), pievienoja Javascript sol\u012bjumus (promises) un visiem uz br\u012bdi k\u013cuva viegl\u0101k elpot.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKam\u0113r nepien\u0101ca Promice hell\u2026 Nezinu, k\u0101 frontend industrija to izdod, bet vi\u0146i vienm\u0113r iebrauc k\u0101d\u0101s d\u012bvain\u0101s nelaim\u0113s. Vi\u0146i pat \u201esol\u012bjumos\u201d ir izveidoju\u0161i hell. P\u0113c tam \u0161o probl\u0113mu atrisin\u0101ja, pievienojot jaunu primitivu \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAr asinkronit\u0101ti probl\u0113ma ir atrisin\u0101ta. Async\/await ir diezgan popul\u0101rs primitivs da\u017e\u0101d\u0101s valod\u0101s. 'Python' un cit\u0101s ir \u0161\u0101ds pieejas veids \u2013 tas ir diezgan labs. Probl\u0113ma ir atrisin\u0101ta.<\/p>\n<p>K\u0101da probl\u0113ma nav atrisin\u0101ta? Strauji pieaugo\u0161\u0101 sare\u017e\u0123\u012bt\u012bba ietvaros, ekosist\u0113mas sare\u017e\u0123\u012bt\u012bba un pa\u0161a programmat\u016bra.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>JavaScript sintakse ir nedaudz d\u012bvaina. M\u0113s visi zin\u0101m probl\u0113mas ar mas\u012bvu un objekta saskait\u012b\u0161anu, k\u0101 ar\u012b citas jautr\u012bbas.<\/li>\n<li>JavaScript ir multiplusparadigmu valoda. \u0160obr\u012bd tas ir \u012bpa\u0161i aktu\u0101li, jo ekosist\u0113ma ir \u013coti liela:\n<ul>\n<li>visi raksta da\u017e\u0101dos stilus \u2013 k\u0101ds raksta struktur\u0113ti, k\u0101ds raksta funkcion\u0101li, da\u017e\u0101di izstr\u0101d\u0101t\u0101ji raksta at\u0161\u0137ir\u012bgi;<\/li>\n<li>no da\u017e\u0101diem pakotn\u0113m (packages) n\u0101k da\u017e\u0101das paradigmas, kad izmantojat da\u017e\u0101das pakas;<\/li>\n<li>\u013coti daudz 'izpriecas' ar funkcion\u0101lo programm\u0113\u0161anu JavaScript \u2013 par\u0101d\u012bjusies bibliot\u0113ka Ramda un tagad neviens nevar izlas\u012bt programm\u0101s, kas rakst\u012btas \u0161aj\u0101 bibliot\u0113k\u0101.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Tas viss ievie\u0161 lielu ietekmi uz ekosist\u0113mu, un t\u0101 ir neticami papla\u0161in\u0101jusies. Pakas nav savietojamas: k\u0101ds - uz promis\u0113m, k\u0101ds - uz async\/await, k\u0101ds - uz atgriezeniskajiem izsaukumiem. V\u0113l raksta da\u017e\u0101d\u0101s paradigmas!<\/li>\n<li>Tas noved pie t\u0101, ka projektu ir gr\u016bti uztur\u0113t. Gr\u016bti atrast k\u013c\u016bdu, ja tu nevari izlas\u012bt kodu.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kas ir Web Assembly?<\/h3>\n<p>\nDrosm\u012bgie pui\u0161i no Mozilla Foundation un da\u017eu citu uz\u0146\u0113mumu izdom\u0101ja t\u0101du lietu k\u0101 Web Assembly. Kas tas ir?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Tas ir ieb\u016bv\u0113ta p\u0101rl\u016bka virtu\u0101l\u0101 ma\u0161\u012bna, kas atbalsta bin\u0101ro form\u0101tu.<\/li>\n<li>Bin\u0101r\u0101s programmas tiek iek\u013cautas, t\u0101s izpild\u0101s gandr\u012bz dabiski, tas noz\u012bm\u0113, ka p\u0101rl\u016bkam nav j\u0101pars\u0113 katru reizi visa 'n\u016bdeles' javascript koda.<\/li>\n<li>Visi p\u0101rl\u016bki ir pazi\u0146oju\u0161i par atbalstu.<\/li>\n<li>T\u0101 k\u0101 tas ir bait-kods, var uzrakst\u012bt kompilatoru jebkurai valodai.<\/li>\n<li>\u010cetri galvenie p\u0101rl\u016bki jau n\u0101k ar Web Assembly atbalstu.<\/li>\n<li>Dr\u012bz m\u0113s gaid\u0101m nat\u012bvo atbalstu Go. \u0160\u0101da jauna arhitekt\u016bra jau ir pievienota: GOARCH=wasm GOOS=js (dr\u012bz). L\u012bdz \u0161im, cik es saprotu, t\u0101 nav funkcion\u0101la, ta\u010du ir apgalvojums, ka tas noteikti b\u016bs Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ko dar\u012bt tagad? GopherJS<\/h3>\n<p>\nKam\u0113r mums v\u0113l nav Web Assembly atbalsta, ir t\u0101ds transpajleris k\u0101 GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Kods Go tiek p\u0101rv\u0113rsts 't\u012br\u0101' Javascript.<\/li>\n<li>Tas darbojas visos p\u0101rl\u016bkos \u2013 tur nav jaunu funkciju, kas tiek atbalst\u012btas tikai m\u016bsdienu p\u0101rl\u016bkos (tas ir Vanilla JS, kas darbojas vis\u0101s ier\u012bc\u0113s).<\/li>\n<li>Ir ir atbalsts gandr\u012bz visam, kas ir Go, tostarp korutin\u0101m un kan\u0101liem\u2026 \u2013 viss, ko m\u0113s m\u012blam un zin\u0101m.<\/li>\n<li>Gandr\u012bz visa standarta bibliot\u0113ka tiek atbalst\u012bta, iz\u0146emot tos pakotnes, kuras nav j\u0113gas atbalst\u012bt p\u0101rl\u016bk\u0101: syscall, t\u012bkla mijiedarb\u012bbas (ir net\/http klients, bet nav servera, un klients tiek emul\u0113ts ar XMLHttpRequest). Kopum\u0101 visa standarta bibliot\u0113ka ir pieejama \u2013 l\u016bk, t\u0101 ir p\u0101rl\u016bk\u0101, l\u016bk, Go standarta bibliot\u0113ka, kuru m\u0113s m\u012blam.<\/li>\n<li>Visa Go pakot\u0146u ekosist\u0113ma, visas tre\u0161o pu\u0161u risin\u0101jums (veidnes utt.) var tikt kompil\u0113ti ar GopherJS un palaisti p\u0101rl\u016bk\u0101.<\/li>\n<\/ul>\n<p>\nG\u016bt GopherJS ir \u013coti viegli \u2013 tas ir parasts Go pakotne. M\u0113s dar\u0101m go get, un mums ir GopherJS komanda, lai izveidotu lietojumprogrammu:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0160\u0101ds mazs hello world\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026Parasta Go programma, parasta fmt standarta bibliot\u0113kas pakotne un JavaScript saist\u012bt\u0101js, lai v\u0113rs\u0113tos pie p\u0101rl\u016bka API. Println beig\u0101s tiks p\u0101rv\u0113rsts par konsoles ierakstu, un p\u0101rl\u016bks uzrakst\u012bs \u201cHello gophers\u201d! Tik viegli: dar\u0101m GopherJS build \u2013 palai\u017eam p\u0101rl\u016bk\u0101 \u2013 viss darbojas!<\/p>\n<h3>Kas ir pieejams \u0161obr\u012bd? Saist\u012bt\u0101ji<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIr saist\u012bt\u0101ji visiem popul\u0101riem js ietvariem:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js datu vizualiz\u0101cijai un lielo datu apstr\u0101dei;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>pat ir atbalsts Electron (t\u0101tad jau tagad varam rakst\u012bt galddatoru lietojumprogrammas uz \"Electron\");<\/li>\n<li>un smiekl\u012bgi \u2013 tas ir WebGL (varam veidot piln\u012bgi grafiskas aplik\u0101cijas, tostarp sp\u0113les ar 3D grafiku, m\u016bziku un vis\u0101m iesp\u0113j\u0101m);<\/li>\n<li>un \u013coti daudz citu saist\u012bt\u0101ju visiem popul\u0101riem javascript ietvariem un bibliot\u0113k\u0101m.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ietvars<\/h3>\n<p><\/p>\n<ol>\n<li>Ir jau izstr\u0101d\u0101ts speci\u0101li GopherJS t\u012bmek\u013ca ietvars \u2013 Vecty. Tas ir pilnties\u012bgs React.js analogs, bet izstr\u0101d\u0101ts uz Go, ar GopherJS specifiku.<\/li>\n<li>Ir sp\u0113\u013cu ietvari (negaid\u012bti!). Es atradu divus popul\u0101r\u0101kos:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nPar\u0101d\u012b\u0161u p\u0101ris piem\u0113rus, k\u0101 tas izskat\u0101s un ko jau tagad var rakst\u012bt uz Go:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVai ar\u012b \u0161\u0101ds variants (3D \u0161\u0101v\u0113ju neatradu, bet varb\u016bt tas ir):<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Ko es pied\u0101v\u0101ju?<\/h3>\n<p>\n\u0160obr\u012bd priek\u0161\u0113j\u0101 izstr\u0101de ir t\u0101d\u0101 st\u0101vokl\u012b, ka tur dr\u012bz steigsies visi valodas, kas l\u012bdz \u0161im raud\u0101ja par Javascript. Tagad visi tiks kompil\u0113ti uz \"Web Assembly\". Ko mums vajag, lai tur ie\u0146emtu cien\u012bgu vietu k\u0101 \"gofers\"?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGo tradicion\u0101li tiek uzskat\u012bts par sist\u0113mu programm\u0113\u0161anas valodu, un praktiski nav nek\u0101du bibliot\u0113ku darbam ar UI. Ir kaut kas, bet tas ir da\u013c\u0113ji pamests un da\u013c\u0113ji nefunkcion\u0101ls.<\/p>\n<p>Un l\u016bk \u2013 lieliska iesp\u0113ja izveidot UI bibliot\u0113kas Go valod\u0101, kuras darbosies uz GopherJS! Beidzot var uzrakst\u012bt savu ietvaru! Ir pien\u0101cis tas laiks, kad var uzrakst\u012bt ietvaru, un tas b\u016bs viens no pirmajiem, ieg\u016bs agr\u012bnu adapt\u0101ciju, un j\u016bs b\u016bsiet zvaigzne (ja tas b\u016bs labs ietvars).<\/p>\n<p>Var piel\u0101got daudzus da\u017e\u0101dus pakotnes, kas jau ir Go ekosist\u0113m\u0101, p\u0101rejot uz p\u0101rl\u016bkprogrammas specifiku (piem\u0113ram, \u0161ablonu dzin\u0113ju). Tie jau darbojas, var izveidot \u0113rtas apvijas, lai viegli render\u0113tu saturu tie\u0161i p\u0101rl\u016bkprogramm\u0101. Turkl\u0101t var izveidot, piem\u0113ram, servisu, kas var render\u0113t to pa\u0161u gan server\u012b, gan frontend\u0101, izmantojot to pa\u0161u kodu \u2013 visu t\u0101, k\u0101 m\u012bl frontend att\u012bst\u012bt\u0101ji (tikai tagad uz Go).<\/p>\n<p>Var uzrakst\u012bt sp\u0113li! T\u0101p\u0113c, ka tas ir jautri\u2026<\/p>\n<p>Man viss.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksejs Gra\u010devs: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Jaut\u0101jumi<\/h3>\n<p>\n<b>Jaut\u0101jums (t\u0101l\u0101k \u2013 J):<\/b> \u2013 Es rakstu uz Go vai uz Js?<\/p>\n<p><b>AG:<\/b> \u2013 Tu raksti uz Go rut\u012bn\u0101m, kan\u0101liem, strukt\u016br\u0101m, iek\u013cau\u0161anu \u2013 visu\u2026 Tu paraksties uz notikumu, nodod tur funkciju.<\/p>\n<p><b>J:<\/b> \u2013 T\u0101tad es rakstu uz \u201et\u012bra\u201d Js?<\/p>\n<p><b>AG:<\/b> \u2013 N\u0113, tu raksti it k\u0101 uz Go un piesl\u0113dzies p\u0101rl\u016bkprogrammas API (API \u0161aj\u0101 gad\u012bjum\u0101 nav main\u012bjies). Vari uzrakst\u012bt savas apvijas, lai kan\u0101l\u0101 non\u0101ktu zi\u0146as \u2013 tas ta\u010du nav sare\u017e\u0123\u012bti.<\/p>\n<p><b>J:<\/b> \u2013 Ko par mobilaj\u0101m lietotn\u0113m?<\/p>\n<p><b>AG:<\/b> \u2013 Es noteikti redz\u0113ju: ir saist\u012bjumi Cordova p\u0101rlai\u0161anai, ko Js izpilda. Par React Native \u2013 nezinu; varb\u016bt ir, varb\u016bt nav (ne p\u0101r\u0101k interes\u0113jos). Sp\u0113\u013cu dzin\u0113js N-go atbalsta ar\u012b mobil\u0101s lietotnes \u2013 gan iOS, gan Android.<\/p>\n<p><b>J:<\/b> \u2013 Jaut\u0101jums par Web Assembly. Vietas k\u013c\u016bst aizvien vair\u0101k, neskatoties uz sasprindzin\u0101jumu, \u201esaspiest\u012bbu\u201d\u2026 Vai m\u0113s t\u0101d\u0113j\u0101di v\u0113l vair\u0101k nenogalin\u0101sim frontend pasauli?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly \u2013 tas ir bin\u0101rais form\u0101ts, un bin\u0101raj\u0101 p\u0113c noklus\u0113juma gala izlaidum\u0101 nedr\u012bkst b\u016bt vair\u0101k par tekstu\u2026 Tevi vilina runtime, bet tas ir tas pats, kas iek\u013caut standarta Javascript bibliot\u0113ku, kad t\u0101s nav, t\u0101d\u0113\u013c m\u0113s izmantojam kaut ko l\u012bdz\u012bgu Lodash. Nezinu, cik daudz Lodash aiz\u0146em.<\/p>\n<p><b>J:<\/b> \u2013 Ac\u012bmredzami maz\u0101k nek\u0101 runtime...<\/p>\n<p><b>AG:<\/b> \u2013 Uz \u201et\u012br\u0101\u201d Javascript?<\/p>\n<p><b>J:<\/b> \u2013 J\u0101. M\u0113s ta\u010du to saspie\u017eam pirms nos\u016bt\u012b\u0161anas\u2026<\/p>\n<p><b>AG:<\/b> \u2013 Bet tas ir teksts... Pavisam, megabaits \u2013 tas ir kaut kas, bet tas ir viss (tevis viss runtime ir). T\u0101l\u0101k tu raksti savu biznesa lo\u0123iku, kas palielin\u0101s tavu binary par 1 %. Pa\u0161laik es neredzu, ka tas nogalin\u0101tu frontend. Turkl\u0101t Web Assembly darbosies \u0101tr\u0101k nek\u0101 Javascript ac\u012bmredzama iemesla d\u0113\u013c \u2013 to nevajag pars\u0113t.<\/p>\n<p><b>J:<\/b> \u2013 Pag, str\u012bd\u012bgs br\u012bdis... V\u0113l nav k\u0101das etalona realiz\u0101cijas \u00abVasm\u0101\u00bb (Web Assembly), lai var\u0113tu viennoz\u012bm\u012bgi spriest. Konceptu\u0101li \u2013 j\u0101: m\u0113s visi saprotam, ka binary b\u016bs \u0101tr\u0101ks, bet pa\u0161reiz\u0113j\u0101 V8 realiz\u0101cija ir \u013coti efekt\u012bva.<\/p>\n<p><b>AG:<\/b> \u2013 J\u0101.<\/p>\n<p><b>J:<\/b> \u2013 Kompil\u0101cija tur str\u0101d\u0101 tie\u0161\u0101m \u013coti labi, un nav noteikti, ka b\u016bs liels ieguvums.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly ar\u012b lielie d\u017eeki str\u0101d\u0101.<\/p>\n<p><b>J:<\/b> \u2013 Pag, man \u0161\u0137iet, v\u0113l gr\u016bti spriest par Web Assembly. Jau cik gadi iet sarunas, bet re\u0101lu sasniegumu, ko var\u0113tu saprast, ir maz.<\/p>\n<p><b>AG:<\/b> \u2013 Iesp\u0113jams. Redz\u0113sim.<\/p>\n<p><b>J:<\/b> \u2013 Mums nav probl\u0113mu backend... Varb\u016bt atst\u0101t \u0161\u012bs probl\u0113mas frontend\u0101? K\u0101p\u0113c iejaukties tur?<\/p>\n<p><b>AG:<\/b> \u2013 Ir j\u0101notur \u0161tats frontend\u0113ru.<\/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=\"Atska\u0146ot 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>Mazliet rekl\u0101mas \ud83d\ude42<\/h3>\n<p>\nPaldies, ka paliekat ar mums. Vai jums pat\u012bk m\u016bsu raksti? V\u0113laties redz\u0113t vair\u0101k interesantus materi\u0101lus? Atbalstiet m\u016bs, veicot pas\u016bt\u012bjumu vai ieteicot draugiem, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">m\u0101ko\u0146u VPS izstr\u0101d\u0101t\u0101jiem no $4.99<\/a><\/noindex>, <b>unik\u0101ls ieejas l\u012bme\u0146a serveru analogs, kuru m\u0113s izstr\u0101d\u0101j\u0101m jums:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Visa paties\u012bba par VPS (KVM) E5-2697 v3 (6 kodoli) 10GB DDR4 480GB SSD 1Gbps no $19 vai k\u0101 pareizi dal\u012bt serveri?<\/a><\/noindex> (pieejami varianti ar RAID1 un RAID10, l\u012bdz 24 kodoliem un l\u012bdz 40GB DDR4).<\/p>\n<p><b>Dell R730xd divas reizes l\u0113t\u0101k datu centr\u0101 Equinix Tier IV Amsterdam\u0101?<\/b> Tikai pie mums <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 100TB no $199<\/a><\/noindex> N\u012bderland\u0113! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 no $99!<\/b><\/b> Lasiet par to <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">K\u0101 izveidot korporat\u012bvas klases infrastrukt\u016bru, izmantojot Dell R730xd E5-2650 v4 serverus, kas maks\u0101 9000 eiro par niek\u0101m?<\/a><\/noindex><br \/>\n<br \/>Avots: <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.5 - 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\/lv\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47Aleksijs Gra\u010devs: Go Frontend | ProHoster","description":"Kyiv Go Meetup Maijs 2018: Vad\u012bt\u0101js: \u2013 Visiem.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}