{"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\/sq\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","title":{"rendered":"Aleksei Gra\u00e7ev: Go Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Maj 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Moderator:<\/b> \u2013 T\u00eb gjith\u00eb p\u00ebrsh\u00ebndetje! Faleminderit q\u00eb jeni k\u00ebtu! Sot kemi dy fol\u00ebs zyrtar\u00eb \u2013 L\u0451sha dhe Vanya. Do t\u00eb ket\u00eb edhe dy t\u00eb tjer\u00eb, n\u00ebse na mjafton koha. Fol\u00ebsi i par\u00eb \u2013 Aleksei Grach\u0451v, do t\u00eb na tregoj\u00eb p\u00ebr GopherJS.<\/p>\n<p><b>Aleksei Grach\u0451v (m\u00eb pas \u2013 AG):<\/b> \u2013 Un\u00eb jam zhvillues Go, dhe shkruaj sh\u00ebrbime web n\u00eb Go. Ndonj\u00ebher\u00eb m\u00eb duhet t\u00eb p\u00ebrballem me frontend-in, ndonj\u00ebher\u00eb duhet t\u00eb futem atje me duar. Dua t\u00eb flas p\u00ebr p\u00ebrvoj\u00ebn dhe hulumtimet e mia p\u00ebr Go n\u00eb frontend.<\/p>\n<p>Legjenda \u00ebsht\u00eb kjo: fillimisht do t\u00eb flasim p\u00ebrse duam t\u00eb p\u00ebrdorim Go n\u00eb frontend, pastaj do t\u00eb flasim se si mund ta b\u00ebjm\u00eb k\u00ebt\u00eb. Ka dy rrug\u00eb \u2013 Web Assembly dhe GopherJS. Do t\u00eb shohim n\u00eb \u00e7far\u00eb gjendje jan\u00eb k\u00ebto zgjidhje dhe \u00e7far\u00eb mund t\u00eb b\u00ebjm\u00eb.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u00c7far\u00eb nuk \u00ebsht\u00eb n\u00eb rregull me frontend-in?<\/h3>\n<p>\nA jeni t\u00eb gjith\u00eb dakord q\u00eb gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull me frontend-in?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKa pak prova? Nd\u00ebrtime t\u00eb ngadalta? Ekosistemi? Mir\u00eb.<\/p>\n<p>Sa i p\u00ebrket frontend-it, m\u00eb p\u00eblqen nj\u00eb citat q\u00eb tha nj\u00eb nga zhvilluesit frontend n\u00eb librin e tij:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb Javascript nuk ka sistem types. Tani do t\u00eb filloj t\u00eb p\u00ebrmend problemet me t\u00eb cilat kam p\u00ebrballur gjat\u00eb pun\u00ebs sime dhe do t\u00eb shpjegoj se si zgjidhen ato.<\/p>\n<p>Sistemi i types \u00ebsht\u00eb e v\u00ebshtir\u00eb ta quash nj\u00eb sistem types n\u00eb Javascript \u2013 ka disa vargje q\u00eb p\u00ebrfaq\u00ebsojn\u00eb tipin e objektit, por n\u00eb t\u00eb v\u00ebrtet\u00eb nuk kan\u00eb lidhje me types. Ky problem \u00ebsht\u00eb zgjidhur n\u00eb TypeScript (nj\u00eb shtes\u00eb mbi Javascript) dhe Flow (verifikues i types n\u00eb Javascript). N\u00eb fakt, frontend-i tashm\u00eb ka arritur n\u00eb nj\u00eb zgjidhje p\u00ebr problemin e sistemit t\u00eb dob\u00ebt t\u00eb types n\u00eb Javascript.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNuk ka bibliotek\u00eb standarde n\u00eb shfletues si e till\u00eb \u2013 ka disa objekte t\u00eb integruara dhe funksione \"magjike\" n\u00eb shfletues. Por n\u00eb Javascript, biblioteca standarde si e till\u00eb mungon. Ky problem \u00ebsht\u00eb zgjidhur dikur nga jQuery (t\u00eb gjith\u00eb p\u00ebrdornin jQuery me t\u00eb gjitha prototipat, ndihm\u00ebsit, funksionet q\u00eb jan\u00eb t\u00eb nevojshme p\u00ebr pun\u00eb). Tani, t\u00eb gjith\u00eb p\u00ebrdorin Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHell-i i t\u00eb kthyerave. Mendoj se t\u00eb gjith\u00eb e kan\u00eb par\u00eb kodin n\u00eb Javascript rreth 5 vjet m\u00eb par\u00eb, dhe ai dukeshin si \"makaronat\" nga nj\u00eb ngat\u00ebrres\u00eb e pabesueshme e t\u00eb kthyerave. Tani, ky problem \u00ebsht\u00eb zgjidhur (me daljen e ES-15 ose ES-16), jan\u00eb shtuar n\u00eb Javascript premtimet (promises) dhe t\u00eb gjith\u00ebve iu b\u00eb m\u00eb e leht\u00eb p\u00ebr nj\u00eb koh\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDerisa erdhi Hell-i i Premtimit... Nuk e di se si industria e frontend-it arrin ta b\u00ebj\u00eb k\u00ebt\u00eb, por vazhdimisht e \u00e7ojn\u00eb veten n\u00eb ndonj\u00eb rrug\u00eb t\u00eb \u00e7uditshme. Kan\u00eb arritur dhe n\u00eb \"premtime\" ta b\u00ebjn\u00eb hell. M\u00eb pas e zgjidh\u00ebn k\u00ebt\u00eb problem duke shtuar nj\u00eb primitive t\u00eb ri \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProblemi me asinkronizimin \u00ebsht\u00eb zgjidhur. Async\/await \u2013 nj\u00eb primitiv mjaft popullor n\u00eb gjuh\u00eb t\u00eb ndryshme. N\u00eb \"Python\" dhe n\u00eb t\u00eb tjera ka nj\u00eb qasje t\u00eb till\u00eb \u2013 ajo \u00ebsht\u00eb mjaft e mir\u00eb. Problemi \u00ebsht\u00eb zgjidhur.<\/p>\n<p>Cila problem nuk \u00ebsht\u00eb zgjidhur? Shtimi n\u00eb progresion gjeometrik i nd\u00ebrlikueshm\u00ebris\u00eb s\u00eb framework-eve, nd\u00ebrlikueshm\u00ebris\u00eb s\u00eb ekosistemit dhe vet\u00eb programeve.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Sintaksa e JavaScript-it \u00ebsht\u00eb paksa e \u00e7uditshme. T\u00eb gjith\u00eb ne e dim\u00eb problemin me mbledhjen e nj\u00eb array dhe nj\u00eb objekti dhe t\u00eb tjera kuriozitete.<\/li>\n<li>JavaScript \u2013 nj\u00eb gjuh\u00eb me shum\u00eb paradigma. Tani kjo \u00ebsht\u00eb nj\u00eb sistem ve\u00e7an\u00ebrisht aktual, kur ekosistemi \u00ebsht\u00eb shum\u00eb i madh:\n<ul>\n<li>t\u00eb gjith\u00eb shkruajn\u00eb n\u00eb stile t\u00eb ndryshme \u2013 disa shkruajn\u00eb n\u00eb m\u00ebnyr\u00eb strukturore, disa shkruajn\u00eb n\u00eb m\u00ebnyr\u00eb funksionale, zhvillues t\u00eb ndrysh\u00ebm shkruajn\u00eb ndryshe;<\/li>\n<li>nga paketa t\u00eb ndryshme (packages) paradigmata ndryshojn\u00eb, kur p\u00ebrdorni paketa t\u00eb ndryshme;<\/li>\n<li>ka shum\u00eb \"k\u00ebnaq\u00ebsi\" me programimin funksional n\u00eb JavaScript \u2013 u shfaq biblioteka rambda dhe tani askush nuk mund t\u00eb lexoj\u00eb programet e shkruara n\u00eb k\u00ebt\u00eb bibliotek\u00eb.<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>T\u00eb gjitha k\u00ebto kan\u00eb nj\u00eb ndikim t\u00eb madh n\u00eb ekosistem dhe ajo \u00ebsht\u00eb rritur shum\u00eb. Paketat nuk jan\u00eb t\u00eb p\u00ebrputhshme me nj\u00ebra-tjetr\u00ebn: disa jan\u00eb n\u00eb premisa, disa jan\u00eb n\u00eb async\/await, disa jan\u00eb n\u00eb callback-e. Edhe n\u00eb paradigma t\u00eb ndryshme shkruhen!<\/li>\n<li>Kjo \u00e7on n\u00eb faktin se projekti \u00ebsht\u00eb i v\u00ebshtir\u00eb p\u00ebr t'u mbajtur. E v\u00ebshtir\u00eb p\u00ebr t\u00eb gjetur nj\u00eb gabim, n\u00ebse nuk mund t\u00eb lexosh kodin.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c7far\u00eb \u00ebsht\u00eb Web Assembly?<\/h3>\n<p>\nDjemt\u00eb trim nga Mozilla Foundation dhe disa kompani t\u00eb tjera shpik\u00ebn di\u00e7ka si Web Assembly. \u00c7far\u00eb \u00ebsht\u00eb kjo?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9ca5b1e0b7646ec7d6fa751d77780b41.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Kjo \u00ebsht\u00eb nj\u00eb makin\u00eb virtuale e integruar n\u00eb shfletues, q\u00eb mb\u00ebshtet formatin binar.<\/li>\n<li>Programet binare atje arrijn\u00eb, ekzekutohen pothuajse n\u00eb m\u00ebnyr\u00eb natyrore, dometh\u00ebn\u00eb shfletuesi nuk ka nevoj\u00eb \u00e7do her\u00eb t\u00eb analizoj\u00eb t\u00eb gjith\u00eb \"makaron\u00ebn\" e kodit javascript.<\/li>\n<li>T\u00eb gjitha shfletuesit njoftuan mb\u00ebshtetje.<\/li>\n<li>Meqen\u00ebse \u00ebsht\u00eb byte-code, mund t\u00eb shkruash nj\u00eb kompilator p\u00ebr \u00e7do gjuh\u00eb.<\/li>\n<li>Kat\u00ebr shfletuesit kryesor\u00eb tashm\u00eb vijn\u00eb me mb\u00ebshtetje p\u00ebr Web Assembly.<\/li>\n<li>S\u00eb shpejti presim mb\u00ebshtetje natyrore n\u00eb Go. Nj\u00eb arkitektur\u00eb e till\u00eb e re tashm\u00eb \u00ebsht\u00eb shtuar: GOARCH=wasm GOOS=js (s\u00eb shpejti). Deri tani, ashtu si\u00e7 e kuptoj, nuk \u00ebsht\u00eb funksionale, megjithat\u00eb ka nj\u00eb deklarat\u00eb q\u00eb kjo do t\u00eb jet\u00eb sigurisht n\u00eb Go.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c7far\u00eb t\u00eb b\u00ebjm\u00eb tani? GopherJS<\/h3>\n<p>\nDerisa nuk kemi mb\u00ebshtetje p\u00ebr Web Assembly, ka nj\u00eb transpajler si GopherJS.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/067c1b605b220c4aeed103915daacca4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Kodi n\u00eb Go transpilohet n\u00eb JavaScript \"t\u00eb past\u00ebr\".<\/li>\n<li>Ekzekutohet n\u00eb t\u00eb gjitha shfletuesit - aty nuk ka ve\u00e7ori t\u00eb reja q\u00eb p\u00ebrkrahen vet\u00ebm nga shfletuesit modern\u00eb (kjo \u00ebsht\u00eb Vanilla JS, q\u00eb ekzekutohet n\u00eb gjith\u00e7ka q\u00eb dikush do).<\/li>\n<li>Ka nj\u00eb mb\u00ebshtetje p\u00ebr pothuajse gjith\u00e7ka q\u00eb \u00ebsht\u00eb n\u00eb Go, p\u00ebrfshir\u00eb gorutinat dhe kanalet... \u2013 gjith\u00e7ka q\u00eb ne e duam dhe e dim\u00eb.<\/li>\n<li>Gati t\u00eb gjith\u00eb biblioteka standarde mb\u00ebshtetet, p\u00ebrve\u00e7 atyre paketave q\u00eb nuk ka kuptim t\u00eb mb\u00ebshteten n\u00eb shfletues: syscall, nd\u00ebrveprime neto (ka nj\u00eb klient net\/http, por nuk ka server, dhe klienti emulohet p\u00ebrmes XMLHttpRequest). N\u00eb p\u00ebrgjith\u00ebsi, e gjith\u00eb biblioteka standarde \u00ebsht\u00eb e disponueshme \u2013 ja ajo n\u00eb shfletues, ja stdlib Go, q\u00eb ne e duam.<\/li>\n<li>E gjith\u00eb ekosistemi i paketave n\u00eb Go, t\u00eb gjitha zgjidhjet e tret\u00eb (templating dhe t\u00eb tjera) mund t\u00eb kompilohet me GopherJS dhe ta ekzekutojm\u00eb k\u00ebt\u00eb n\u00eb shfletues.<\/li>\n<\/ul>\n<p>\nT\u00eb marr\u00ebsh GopherJS \u00ebsht\u00eb shum\u00eb e leht\u00eb \u2013 \u00ebsht\u00eb nj\u00eb paket\u00eb e zakonshme Go. B\u00ebjm\u00eb go get, dhe kemi komand\u00ebn GopherJS p\u00ebr t\u00eb nd\u00ebrtuar aplikacionin:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4f96f9e437b532f9cb1a4f960a621293.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa nj\u00eb hello world t\u00eb vog\u00ebl...<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e4b56385a6cac97fc75b09584da1bfbb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n...Nj\u00eb program i zakonsh\u00ebm Go, nj\u00eb paket\u00eb t\u00eb zakonshme fmt nga biblioteka standarde dhe Binding Js, p\u00ebr t'u lidhur me API-n\u00eb e shfletuesit. Println n\u00eb fund do t\u00eb konvertohet n\u00eb log t\u00eb konsol\u00ebs dhe shfletuesi do t\u00eb shkruaj\u00eb \u201cHello gophers\u201d! K\u00ebshtu kaq e thjesht\u00eb: b\u00ebjm\u00eb nd\u00ebrtimin me GopherJS \u2013 e ekzekutojm\u00eb n\u00eb shfletues \u2013 gjith\u00e7ka funksionon!<\/p>\n<h3>\u00c7far\u00eb ka deri tani? Bindings<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKa bindime p\u00ebr t\u00eb gjitha frameworket e njohura js:<\/p>\n<ul>\n<li>JQuery;<\/li>\n<li>Angular.js;<\/li>\n<li>D3.js p\u00ebr nd\u00ebrtimin e grafik\u00ebve dhe pun\u00ebn me t\u00eb dh\u00ebna t\u00eb m\u00ebdha;<\/li>\n<li>React.js;<\/li>\n<li>VueJS;<\/li>\n<li>madje ka mb\u00ebshtetje p\u00ebr Electron (pra tani mund t\u00eb shkruajm\u00eb aplikacione desktop n\u00eb \u201cElectron\u201d);<\/li>\n<li>dhe m\u00eb e \u00e7uditshmja \u2013 \u00ebsht\u00eb WebGL (mund t\u00eb krijojm\u00eb aplikacione poligonale, duke p\u00ebrfshir\u00eb loj\u00ebra me grafik\u00eb 3D, muzik\u00eb dhe t\u00eb gjitha loj\u00ebrat);<\/li>\n<li>dhe shum\u00eb bindings t\u00eb tjera p\u00ebr t\u00eb gjitha frameworket dhe bibliotekat e njohura javascript.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Ka tashm\u00eb nj\u00eb framework web t\u00eb zhvilluar posa\u00e7\u00ebrisht p\u00ebr GopherJS \u2013 Vecty. Ky \u00ebsht\u00eb nj\u00eb ekuivalent i plot\u00eb i React.js, por i zhvilluar n\u00eb Go, me ve\u00e7orit\u00eb e GopherJS.<\/li>\n<li>Ka \u00e7anta lojrash (papritur!). Gjeta dy m\u00eb t\u00eb njohurat:\n<ul>\n<li>Engo;<\/li>\n<li>Ebiten.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nDo t\u00eb demonstroj disa shembuj, si duket dhe \u00e7far\u00eb mund t\u00eb shkruajm\u00eb aktualisht n\u00eb Go:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/53365146c12b320fbf05334bdc6a79e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOse nj\u00eb variant t\u00eb till\u00eb (nuk gjeta nj\u00eb 3D-shooter, por ndoshta ai ekziston):<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00c7far\u00eb po propozoj?<\/h3>\n<p>\nTani industria e front-end po ndodhet n\u00eb nj\u00eb gjendje t\u00eb till\u00eb, q\u00eb tani do t\u00eb nisin t\u00eb gjitha gjuh\u00ebt, t\u00eb cilat deri m\u00eb tani ishin ankuar p\u00ebr Javascript. Tani t\u00eb gjith\u00eb do t\u00eb kompilohet n\u00eb \u201cWeb Assembly\u201d. \u00c7far\u00eb na nevojitet, p\u00ebr t\u00eb z\u00ebn\u00eb nj\u00eb vend dinjitoz atje si \u201cgofers\u201d?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb Go, \u00ebsht\u00eb tradit\u00eb q\u00eb t\u00eb jet\u00eb nj\u00eb gjuh\u00eb programimi p\u00ebr sisteme, dhe praktikisht nuk ka libra p\u00ebr t\u00eb punuar me UI. Ka di\u00e7ka, por \u00ebsht\u00eb gjysm\u00eb e braktisur, gjysm\u00eb jo-funksionale.<\/p>\n<p>Dhe ja \u2013 nj\u00eb mund\u00ebsi e shk\u00eblqyer p\u00ebr t\u00eb b\u00ebr\u00eb libra UI n\u00eb Go, q\u00eb do t\u00eb ekzekutohen n\u00eb GopherJS! M\u00eb n\u00eb fund, mund t\u00eb shkruajm\u00eb framework-un ton\u00eb! Arriti koha, kur mund t\u00eb shkruhet nj\u00eb framework, dhe ai do t\u00eb jet\u00eb nj\u00eb nga t\u00eb par\u00ebt dhe do t\u00eb marr\u00eb adaptim t\u00eb hersh\u00ebm, dhe ju do t\u00eb jeni nj\u00eb yll (n\u00ebse \u00ebsht\u00eb nj\u00eb framework i mir\u00eb).<\/p>\n<p>Mund t\u00eb adaptojm\u00eb shum\u00eb paketa t\u00eb ndryshme, t\u00eb cilat tashm\u00eb jan\u00eb n\u00eb ekosistem\u00ebn e Go, p\u00ebr specifikat e shfletuesit (p\u00ebr shembull, motori i shablloneve). Ato tashm\u00eb do t\u00eb funksionojn\u00eb, mund t\u00eb b\u00ebjm\u00eb mb\u00ebshtetje t\u00eb leht\u00eb, p\u00ebr ta b\u00ebr\u00eb t\u00eb thjesht\u00eb renderimin e p\u00ebrmbajtjes direkt n\u00eb shfletues. Plus, mund t\u00eb krijojm\u00eb, p\u00ebr shembull, nj\u00eb sh\u00ebrbim q\u00eb di t\u00eb renderoj\u00eb t\u00eb nj\u00ebjt\u00ebn gj\u00eb n\u00eb server dhe n\u00eb front-end, duke p\u00ebrdorur t\u00eb nj\u00ebjtin kod \u2013 gjith\u00e7ka si\u00e7 i p\u00eblqen zhvilluesve t\u00eb front-end (vet\u00ebm tani n\u00eb Go).<\/p>\n<p>Mund t\u00eb shkruajm\u00eb nj\u00eb loj\u00eb! Thjesht p\u00ebr arg\u00ebtim\u2026<\/p>\n<p>Kjo \u00ebsht\u00eb e gjith\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Gra\u00e7ev: Go Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/ba08e0e65de0898e4f53abd00abb6dab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Pyetje<\/h3>\n<p>\n<b>Pyetje (m\u00eb posht\u00eb \u2013 P):<\/b> \u2013 Po shkruaj n\u00eb Go apo n\u00eb Js?<\/p>\n<p><b>AG:<\/b> \u2013 Ti shkruan n\u00eb Go rutina, kanale, struktura, embedding \u2013 gjith\u00e7ka\u2026 Regjistrohesh p\u00ebr event, dhe kalon nj\u00eb funksion atje.<\/p>\n<p><b>M:<\/b> \u2013 Pra, po shkruaj n\u00eb \u00abgolin\u00bb Js?<\/p>\n<p><b>AG:<\/b> \u2013 Jo, ti shkruan si t\u00eb ishe n\u00eb Go dhe lidhesh me API-n\u00eb e shfletuesit (API gjithashtu nuk \u00ebsht\u00eb ndryshuar). Mund t\u00eb krijosh mb\u00ebshtetje t\u00eb tua, q\u00eb mesazhet t\u00eb vijn\u00eb n\u00eb kanal \u2013 nuk \u00ebsht\u00eb e v\u00ebshtir\u00eb.<\/p>\n<p><b>M:<\/b> \u2013 \u00c7far\u00eb ndodh me mobilin?<\/p>\n<p><b>AG:<\/b> \u2013 Sigurisht kam par\u00eb: ka lidhje p\u00ebr patch-in Cordova, t\u00eb cilat Js i ekzekuton. N\u00eb React Native \u2013 nuk e di; ndoshta ka, ndoshta jo (nuk kam qen\u00eb shum\u00eb i interesuar). Moti i loj\u00ebs N-go mb\u00ebshtet edhe aplikacionet mobile \u2013 dhe iOs, dhe Android.<\/p>\n<p><b>M:<\/b> \u2013 Pyetje p\u00ebr Web Assembly. Po z\u00eb gjithnj\u00eb e m\u00eb shum\u00eb vend, pavar\u00ebsisht nga kompaktimi, \u00abzipimi\u00bb\u2026 A do ta vrasim k\u00ebshtu bot\u00ebn e front-end m\u00eb shum\u00eb?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly \u00ebsht\u00eb nj\u00eb format binar, dhe binarisht sipas parimit nuk mund t\u00eb jet\u00eb n\u00eb versionin p\u00ebrfundimtar m\u00eb shum\u00eb se sa tekst\u2026 T\u00eb t\u00ebrheq runtime, por kjo \u00ebsht\u00eb si t\u00eb t\u00ebrheq\u00ebsh bibliotek\u00ebn standarde Javascript kur ajo nuk \u00ebsht\u00eb e pranishme, prandaj ne p\u00ebrdorim ndonj\u00eb Lodash. Nuk e di sa z\u00eb Lodash.<\/p>\n<p><b>M:<\/b> \u2013 Qart\u00eb m\u00eb pak se runtime\u2026<\/p>\n<p><b>AG:<\/b> \u2013 N\u00eb Javascriptin \u00abe past\u00ebr\u00bb?<\/p>\n<p><b>M:<\/b> \u2013 Po. Ne e kompresojm\u00eb at\u00eb para se ta d\u00ebrgojm\u00eb\u2026<\/p>\n<p><b>AG:<\/b> \u2013 Por q\u00eb ky \u00ebsht\u00eb nj\u00eb tekst\u2026 N\u00eb p\u00ebrgjith\u00ebsi, megabajt \u2013 duket disi shum\u00eb, por \u00ebsht\u00eb \u2013 gjith\u00e7ka (ke t\u00ebr\u00eb runtime-in). M\u00eb pas ti shkruan logjik\u00ebn t\u00ebnde t\u00eb biznesit, e cila do ta rris\u00eb me 1% binarin t\u00ebnd. Deri tani nuk shoh q\u00eb kjo po vret frontendin. P\u00ebrs\u00ebri, Web Assembly do t\u00eb funksionoj\u00eb m\u00eb shpejt se Javascript p\u00ebr shkakun e duksh\u00ebm \u2013 nuk ka nevoj\u00eb p\u00ebr t\u00eb u parse.<\/p>\n<p><b>M:<\/b> \u2013 Deri tani \u00ebsht\u00eb nj\u00eb moment i diskutuesh\u00ebm\u2026 Akoma nuk ka ndonj\u00eb implementim referenc\u00eb p\u00ebr \"Vasm\" (Web Assembly), q\u00eb t\u00eb mund t\u00eb gjykohet pa dyshime. Konceptualisht \u2013 po: t\u00eb gjith\u00eb ne e kuptojm\u00eb q\u00eb binary duhet t\u00eb jet\u00eb m\u00eb i shpejt\u00eb, por implementimi aktual i V8 \u00ebsht\u00eb shum\u00eb efikas.<\/p>\n<p><b>AG:<\/b> - Po.<\/p>\n<p><b>M:<\/b> \u2013 Kompilimi atje funksionon n\u00eb t\u00eb v\u00ebrtet\u00eb shum\u00eb mir\u00eb dhe nuk \u00ebsht\u00eb fakt se do t\u00eb ket\u00eb nj\u00eb avantazh t\u00eb madh.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly po e zhvillojn\u00eb edhe njer\u00ebz t\u00eb m\u00ebdhenj.<\/p>\n<p><b>M:<\/b> \u2013 Deri tani, m\u00eb duket se akoma \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb gjykohet p\u00ebr Web Assembly. Sa vjet jan\u00eb b\u00ebr\u00eb biseda, por arritjet reale, q\u00eb mund t\u00eb preken, jan\u00eb pak.<\/p>\n<p><b>AG:<\/b> \u2013 Ndoshta. Do t\u00eb shohim.<\/p>\n<p><b>M:<\/b> \u2013 Nuk kemi probleme n\u00eb backend\u2026 Ndoshta t'i l\u00ebm\u00eb k\u00ebto probleme n\u00eb frontend? Pse t\u00eb futemi aty?<\/p>\n<p><b>AG:<\/b> \u2013 Duhet t\u00eb mbajm\u00eb nj\u00eb ekip frontender\u00ebsh.<\/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=\"Luaj videon\" 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>Pak reklam\u00eb \ud83d\ude42<\/h3>\n<p>\nFaleminderit q\u00eb q\u00ebndroni me ne. Ju p\u00eblqejn\u00eb artikujt tan\u00eb? D\u00ebshironi t\u00eb shihni m\u00eb shum\u00eb materiale interesante? Na mb\u00ebshtetni duke b\u00ebr\u00eb nj\u00eb porosi ose duke na rekomanduar njohurive tuaj, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud p\u00ebr zhvillues nga $4.99<\/a><\/noindex>, <b>nj\u00eb analog unik i server\u00ebve entry-level, i nd\u00ebrtuar p\u00ebr ju:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">E gjith\u00eb e v\u00ebrteta rreth VPS (KVM) E5-2697 v3 (6 Nuclea) 10GB DDR4 480GB SSD 1Gbps nga $19 ose si ta ndajm\u00eb sakt\u00ebsisht serverin?<\/a><\/noindex> (disponohen variante me RAID1 dhe RAID10, deri n\u00eb 24 b\u00ebrthama dhe deri n\u00eb 40GB DDR4).<\/p>\n<p><b>Dell R730xd dyfish m\u00eb i lir\u00eb n\u00eb qendr\u00ebn e t\u00eb dh\u00ebnave Equinix Tier IV n\u00eb Amsterdam?<\/b> Vet\u00ebm k\u00ebtu <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 nga $199<\/a><\/noindex> n\u00eb Holand\u00eb! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 nga $99!<\/b><\/b> Lexoni rreth <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Si t\u00eb nd\u00ebrtosh nj\u00eb infrastruktur\u00eb t\u00eb klas\u00ebs korporative me p\u00ebrdorimin e server\u00ebve Dell R730xd E5-2650 v4 me \u00e7mim prej 9000 euro p\u00ebr pak para?<\/a><\/noindex><br \/>\n<br \/>Burimi: <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.0.1 - 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\/sq\/blog\/administrirovanie\/aleksej-grachyov-go-frontend\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Aleks\u00e9i Gra\u00e7\u00e8v: Shkoni n\u00eb Frontend | ProHoster","description":"Kyiv Go Meetup Maj 2018: Moderator: \u2013 T\u00eb gjith\u00ebve.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/aleksej-grachyov-go-frontend","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/71628","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=71628"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/71628\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/71629"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=71628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=71628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=71628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}