{"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":"Alekseev Gra\u010dev: Shko n\u00eb Frontend","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kyiv Go Meetup Maj 2018:<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/9974ab1db5347a41e4ec5110c3d2ef56.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Moderator:<\/b> \u2013 P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve! Faleminderit q\u00eb jeni k\u00ebtu! Sot kemi dy fol\u00ebs zyrtar\u00eb \u2013 Ljo\u0161a dhe Vanya. Do t\u00eb ket\u00eb edhe dy t\u00eb tjer\u00eb, n\u00ebse na lejon koha. Fol\u00ebsi i par\u00eb \u2013 Alekseev Gra\u010dev, ai do t\u00eb na flas\u00eb p\u00ebr GopherJS.<\/p>\n<p><b>Alekseev Gra\u010dev (n\u00eb vazhdim \u2013 AG):<\/b> \u2013 Jam zhvillues Go dhe shkruaj sh\u00ebrbime web n\u00eb Go. Ndonj\u00ebher\u00eb p\u00ebrballen me frontend-in, her\u00eb pas here duhet t\u00eb futem atje me duar. Dua t\u00eb ndaj p\u00ebrvoj\u00ebn dhe hulumtimet e mia p\u00ebr Go n\u00eb frontend.<\/p>\n<p>Legjenda \u00ebsht\u00eb: s\u00eb pari do t\u00eb flasim pse duam t\u00eb ekzekutojm\u00eb Go n\u00eb frontend, pastaj do t\u00eb flasim si ta b\u00ebjm\u00eb k\u00ebt\u00eb. Ka dy mund\u00ebsi \u2013 Web Assembly dhe GopherJS. Le t\u00eb shohim n\u00eb cilin 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 shkon me frontend-in?<\/h3>\n<p>\nT\u00eb gjith\u00eb jan\u00eb dakord se gjith\u00e7ka \u00ebsht\u00eb mir\u00eb me frontend-in?<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/065119e699053306072b1d7aa3183b34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestet jan\u00eb t\u00eb pakta? Nd\u00ebrtime t\u00eb ngadalta? Ekosistemi? Mir\u00eb.<\/p>\n<p>P\u00ebr frontend-in m\u00eb p\u00eblqen nj\u00eb citat q\u00eb tha nj\u00eb nga zhvilluesit e frontend-it n\u00eb librin e tij:<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/e69eba4fc073c0b59789859c94ba29f2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb Javascript nuk ka sistem tipesh. Tani do t\u00eb p\u00ebrmend problemet me t\u00eb cilat kam p\u00ebrballur gjat\u00eb pun\u00ebs time dhe do t\u00eb shpjegoj se si i zgjidhin ato.<\/p>\n<p>Sistemi i tipave nuk mund t\u00eb quhet sistem tipesh n\u00eb Javascript \u2013 ka vargje q\u00eb p\u00ebrfaq\u00ebsojn\u00eb tipin e objektit, por n\u00eb t\u00eb v\u00ebrtet\u00eb nuk kan\u00eb t\u00eb b\u00ebjn\u00eb asgj\u00eb me tipat. Ky problem \u00ebsht\u00eb zgjidhur n\u00eb TypeScript (shtes\u00eb mbi Javascript) dhe Flow (kontrollues static i tipeve n\u00eb Javascript). Prandaj, frontend-i tashm\u00eb ka arritur zgjidhjen e problemit t\u00eb keq t\u00eb sistemit t\u00eb tipave n\u00eb Javascript.<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/257542cbfd2e316fbe0a0033056fff6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBiblioteka standarde n\u00eb shfletues si e till\u00eb nuk ekziston \u2013 ka disa objekte t\u00eb integruara dhe funksione 'magjike' n\u00eb shfletues. Por n\u00eb Javascript si i till\u00eb, biblioteka standarde mungon. Ky problem ishte zgjidhur dikur nga jQuery (t\u00eb gjith\u00eb p\u00ebrdornin jQuery me t\u00eb gjitha prototipat, ndihm\u00ebsit, funksionet q\u00eb nevojiten p\u00ebr pun\u00eb). Tani t\u00eb gjith\u00eb p\u00ebrdorin Lodash:<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/4eae8a8f19776028bd88fe8f7a751605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHell-i i callback-\u00ebve. Mendoj se t\u00eb gjith\u00eb e kan\u00eb par\u00eb kodin n\u00eb Javascript diku 5 vjet m\u00eb par\u00eb, dhe ai dukej si 'p\u00ebrzierje' e jasht\u00ebzakonshme e callback-\u00ebve. Tani ky problem \u00ebsht\u00eb zgjidhur (me daljen e ES-15 ose ES-16), u shtuan n\u00eb Javascript premtimet (promises) dhe gjithkush mund t\u00eb marr\u00eb frym\u00eb m\u00eb leht\u00eb p\u00ebr nj\u00eb koh\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/96c574a880ad97e0802ae3006a60cee6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDerisa nuk erdhi Hell-i i Promic\u00ebve... Nuk e di se si industria e frontend-it arrin ta b\u00ebj\u00eb k\u00ebt\u00eb, por ata vazhdimisht e futin veten n\u00eb ndonj\u00eb der\u00eb t\u00eb \u00e7uditshme. Arrit\u00ebn ta b\u00ebnin hell-in edhe me 'premtat'. M\u00eb pas zgjidhen k\u00ebt\u00eb problem duke shtuar nj\u00eb primitiv t\u00eb ri \u2013 async\/await:<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/7c0679babbea4583de924292893d805c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe problemin e asinkronis\u00eb \u00ebsht\u00eb zgjidhur. Async\/await \u00ebsht\u00eb nj\u00eb primitiv mjaft i njohur 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 \u00ebsht\u00eb mjaft e mir\u00eb. Problemi \u00ebsht\u00eb zgjidhur.<\/p>\n<p>Cila problem nuk \u00ebsht\u00eb zgjidhur? Rritja n\u00eb progresion gjeometrik e kompleksitetit t\u00eb framework-eve, kompleksiteti i ekosistemit dhe vet\u00eb programeve.<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/617fbc72e9e059bf608a48c84c5328f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Sintaksisi i Javascript-it \u00ebsht\u00eb paksa i \u00e7uditsh\u00ebm. T\u00eb gjith\u00eb e dim\u00eb problemin me mbledhjen e nj\u00eb array dhe nj\u00eb objekt dhe t\u00eb tjera \u00e7udi.<\/li>\n<li>Javascript \u00ebsht\u00eb multifunksional. Tani kjo \u00ebsht\u00eb nj\u00eb sistem ve\u00e7an\u00ebrisht i r\u00ebnd\u00ebsish\u00ebm, 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 n\u00eb m\u00ebnyr\u00eb funksionale, zhvillues t\u00eb ndrysh\u00ebm shkruajn\u00eb ndryshe;<\/li>\n<li>nga paketat e ndryshme (packages) parime t\u00eb ndryshme, kur p\u00ebrdorni paketa t\u00eb ndryshme;<\/li>\n<li>ka shum\u00eb \"k\u00ebnaq\u00ebsi\" me programimin funksional n\u00eb Javascript \u2013 doli 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>Kjo sjell nj\u00eb ndikim t\u00eb madh n\u00eb ekosistem dhe ajo \u00ebsht\u00eb zgjeruar n\u00eb m\u00ebnyr\u00eb t\u00eb pabesueshme. Paketat jan\u00eb t\u00eb papajtueshme me nj\u00ebra-tjetr\u00ebn: disa jan\u00eb n\u00eb promesa, disa jan\u00eb n\u00eb async\/await, disa n\u00eb kolbeka. Edhe n\u00eb paradigmat e ndryshme shkruajn\u00eb!<\/li>\n<li>Kjo \u00e7on n\u00eb faktin q\u00eb projekti \u00ebsht\u00eb i v\u00ebshtir\u00eb p\u00ebr t'u mbajtur. E v\u00ebshtir\u00eb t\u00eb gjesh nj\u00eb bug, n\u00ebse nuk mund ta lexosh kodin.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00c7far\u00eb \u00ebsht\u00eb Web Assembly?<\/h3>\n<p>\nDjemt\u00eb e guximsh\u00ebm nga Mozilla Foundation dhe disa kompani t\u00eb tjera shpik\u00ebn nj\u00eb gj\u00eb si Web Assembly. \u00c7far\u00eb \u00ebsht\u00eb kjo?<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb 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 nj\u00eb format binar.<\/li>\n<li>Programet binare atje kalojn\u00eb dhe ekzekutohen pothuajse n\u00eb m\u00ebnyr\u00eb natyrale, q\u00eb do t\u00eb thot\u00eb se shfletuesi nuk duhet ta analizoj\u00eb \u00e7do her\u00eb t\u00eb gjith\u00eb \"llojin\" e kodit javascript.<\/li>\n<li>T\u00eb gjith\u00eb shfletuesit shpallen mb\u00ebshtetje.<\/li>\n<li>Duke qen\u00eb se \u00ebsht\u00eb kod bajt, 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>Shum\u00eb shpejt presim mb\u00ebshtetje natyrale n\u00eb Go. Nj\u00eb arkitektur\u00eb e re \u00ebsht\u00eb tashm\u00eb shtuar: GOARCH=wasm GOOS=js (shpejt). Deri tani, si\u00e7 e kuptoj, nuk \u00ebsht\u00eb funksionale, megjithat\u00eb ka nj\u00eb deklarat\u00eb se kjo do t\u00eb jet\u00eb me siguri 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=\"Alekseev Gra\u010dev: Shko n\u00eb 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 transpajlohet n\u00eb Javascript \"t\u00eb past\u00ebr\".<\/li>\n<li>Ekzekutohet n\u00eb t\u00eb gjith\u00eb shfletuesit \u2013 nuk ka funksione t\u00eb reja q\u00eb mb\u00ebshteten vet\u00ebm n\u00eb shfletuesit modern\u00eb (ky \u00ebsht\u00eb Vanilla JS, i cili ekzekutohet n\u00eb \u00e7do gj\u00eb).<\/li>\n<li>Ka \u00ebsht\u00eb mb\u00ebshtetje p\u00ebr thuajse \u00e7do gj\u00eb q\u00eb ka Go, p\u00ebrfshir\u00eb gorutinat dhe kanalet... \u2013 gjith\u00e7ka q\u00eb ne e duam dhe e njohim.<\/li>\n<li>G casi gjith\u00eb biblioteka standarde \u00ebsht\u00eb mb\u00ebshtetur, p\u00ebrve\u00e7 atyre paketave q\u00eb nuk kan\u00eb kuptim t\u00eb mb\u00ebshteten n\u00eb shfletues: syscall, nd\u00ebrveprimet 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 aksesueshme \u2013 ja ajo n\u00eb shfletues, ja stdlib Go, q\u00eb ne e duam.<\/li>\n<li>E gjith\u00eb ekosistemi i paket\u00ebs n\u00eb Go, t\u00eb gjitha zgjidhjet e jashtme (templating dhe t\u00eb tjera) mund t\u00eb kompilohet me an\u00eb t\u00eb GopherJS dhe t\u00eb startohet kjo n\u00eb shfletues.<\/li>\n<\/ul>\n<p>\nT\u00eb merrni GopherJS \u00ebsht\u00eb shum\u00eb e thjesht\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=\"Alekseev Gra\u010dev: Shko n\u00eb 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 till\u00eb...<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb 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 n\u00eb Go, nj\u00eb paket\u00eb e zakonshme fmt e bibliotek\u00ebs standarde dhe Binding Js, p\u00ebr t\u00eb arritur n\u00eb API-n\u00eb e shfletuesit. Println n\u00eb fund do t\u00eb transformohet n\u00eb log t\u00eb konsol\u00ebs dhe shfletuesi do t\u00eb shkruaj\u00eb \u201cHello gophers\u201d! Kaq e thjesht\u00eb: b\u00ebjm\u00eb GopherJS build \u2013 ekzekutojm\u00eb n\u00eb shfletues \u2013 gjith\u00e7ka funksionon!<\/p>\n<h3>\u00c7far\u00eb ka deri m\u00eb tani? Bindings<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/6adbc1f604580c3878775c45174444a2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKa bindings p\u00ebr t\u00eb gjitha framework-at popullor\u00eb 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 me 'Electron');<\/li>\n<li>dhe e gjitha kjo \u00ebsht\u00eb e \u00e7uditshme \u2013 \u00ebsht\u00eb WebGL (mund t\u00eb b\u00ebjm\u00eb aplikacione poligonale, p\u00ebrfshir\u00eb loj\u00ebra me grafik\u00eb 3D, muzik\u00eb dhe t\u00eb gjitha gj\u00ebrat e tjera);<\/li>\n<li>dhe shum\u00eb bindings t\u00eb tjera p\u00ebr t\u00eb gjitha framework-at dhe bibliotekat popullore JavaScript.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Framework<\/h3>\n<p><\/p>\n<ol>\n<li>Ka nj\u00eb framework t\u00eb zhvilluar posa\u00e7\u00ebrisht p\u00ebr GopherJS \u2013 Vecty. Ky \u00ebsht\u00eb nj\u00eb ekuivalent i plot\u00eb i React.js, vet\u00ebm se i zhvilluar n\u00eb Go, me specifik\u00ebn e GopherJS.<\/li>\n<li>Ka \u00e7anta p\u00ebr loj\u00ebra (papritur!). Kam gjetur 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 shkruhet tani n\u00eb Go:<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb 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 gjeva nj\u00eb shooter 3D, por, ndoshta, ai ekziston):<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/b1c0a9d6d91ad8a10a9b784cd8c7b1d0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00c7far\u00eb ofroj un\u00eb?<\/h3>\n<p>\nTani industria e front-end-it ndodhet n\u00eb nj\u00eb gjendje t\u00eb till\u00eb, sa q\u00eb tani do i drejtohen t\u00eb gjitha gjuh\u00ebve q\u00eb deri tani qanin nga Javascript. Tani t\u00eb gjith\u00eb do t\u00eb kompilohet n\u00eb 'Web Assembly'. \u00c7far\u00eb na nevojitet p\u00ebr t\u00eb z\u00ebn\u00eb nj\u00eb vend t\u00eb denj\u00eb atje si 'gofers'?<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb Frontend\" src=\"\/wp-content\/uploads\/2020\/02\/32c4a03f7a31def833942af6e59c70cb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTradicionalisht, n\u00eb Go \u00ebsht\u00eb e njohur se \u00ebsht\u00eb nj\u00eb gjuh\u00eb programimi sistemike, dhe praktikisht nuk ka biblioteka p\u00ebr t\u00eb punuar me UI. Disa ekzistojn\u00eb, por jan\u00eb gjysm\u00eb t\u00eb braktisura dhe gjysm\u00eb jo funksionale.<\/p>\n<p>Dhe ja, nj\u00eb shans i shk\u00eblqyer p\u00ebr t\u00eb krijuar biblioteka UI n\u00eb Go, t\u00eb cilat do t\u00eb ekzekutohen n\u00eb GopherJS! E fundit, mund t\u00eb shkruash korniz\u00ebn t\u00ebnde! Ka ardhur koha p\u00ebr t\u00eb shkruar nj\u00eb korniz\u00eb, dhe ajo do t\u00eb jet\u00eb nj\u00eb nga t\u00eb parat q\u00eb do t\u00eb marr\u00eb p\u00ebrshtatje t\u00eb hershme, dhe do t\u00eb jet\u00eb nj\u00eb yll (n\u00ebse \u00ebsht\u00eb nj\u00eb korniz\u00eb e mir\u00eb).<\/p>\n<p>Mund t\u00eb adaptohen shum\u00eb paketa t\u00eb ndryshme, t\u00eb cilat tashm\u00eb ekzistojn\u00eb n\u00eb ekosistemin Go, p\u00ebr specifikat e shfletuesit (p\u00ebr shembull, motori i shabllon\u00ebve). Ato do t\u00eb funksionojn\u00eb, mund t\u00eb krijosh mb\u00ebshtetje t\u00eb p\u00ebrshtatshme, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb mund t\u00eb renderosh p\u00ebrmbajtjen direkt n\u00eb shfletues. P\u00ebr m\u00eb tep\u00ebr, mund t\u00eb krijosh, p\u00ebr shembull, nj\u00eb sh\u00ebrbim q\u00eb mund t\u00eb renderoj\u00eb t\u00eb nj\u00ebjt\u00ebn gj\u00eb n\u00eb server dhe n\u00eb frontend, duke p\u00ebrdorur t\u00eb nj\u00ebjtin kod \u2013 gjith\u00e7ka si\u00e7 e duan zhvilluesit e frontend-it (vet\u00ebm tani n\u00eb Go).<\/p>\n<p>Mund t\u00eb shkruash nj\u00eb loj\u00eb! Thjesht p\u00ebr arg\u00ebtim...<\/p>\n<p>Kjo \u00ebsht\u00eb gjith\u00e7ka nga un\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Alekseev Gra\u010dev: Shko n\u00eb 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>Pyetja (m\u00eb pas \u2013 P):<\/b> \u2013 A 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... Ti regjistrohesh p\u00ebr nj\u00eb ngjarje, kalon atje nj\u00eb funksion.<\/p>\n<p><b>P:<\/b> \u2013 Pra, po shkruaj n\u00eb \u00abgol\u00eb\u00bb Js?<\/p>\n<p><b>AG:<\/b> \u2013 Jo, ti shkruan si n\u00eb Go dhe lidhe me API-n\u00eb e shfletuesit (API-ja nuk \u00ebsht\u00eb ndryshuar). Mund t\u00eb shkruash mb\u00ebshtetje t\u00eb tua, k\u00ebshtu q\u00eb mesazhet t\u00eb vijn\u00eb n\u00eb kanal \u2013 kjo nuk \u00ebsht\u00eb e komplikuar.<\/p>\n<p><b>P:<\/b> \u2013 \u00c7far\u00eb ndodh me celularin?<\/p>\n<p><b>AG:<\/b> \u2013 Un\u00eb me siguri e kam par\u00eb: ka lidhje p\u00ebr patch Cordova, q\u00eb Js ekzekuton. N\u00eb React Native \u2013 nuk e di; ndoshta ka, ndoshta jo (nuk jam shum\u00eb i interesuar). Motori i loj\u00ebrave N-go mb\u00ebshtet gjithashtu aplikacionet mobile \u2013 si iOS ashtu edhe Android.<\/p>\n<p><b>P:<\/b> \u2013 Pyetje p\u00ebr Web Assembly. Po merr gjithnj\u00eb e m\u00eb shum\u00eb hap\u00ebsir\u00eb, pavar\u00ebsisht nga kompresimi, \u00abzipimi\u00bb... A do ta shkat\u00ebrrojm\u00eb k\u00ebshtu edhe m\u00eb shum\u00eb bot\u00ebn e frontend-it?<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly \u00ebsht\u00eb nj\u00eb format binar, dhe binari sipas par regullit nuk mund t\u00eb jet\u00eb m\u00eb i madh n\u00eb versionin p\u00ebrfundimtar se sa teksti... Ti je i t\u00ebrhequr nga runtime, por kjo \u00ebsht\u00eb e nj\u00ebjt\u00eb me t\u00ebrheqjen e bibliotek\u00ebs standarde t\u00eb Javascript-it kur nuk \u00ebsht\u00eb aty, prandaj ne p\u00ebrdorim ndonj\u00eb Lodash. Nuk e di se sa hap\u00ebsir\u00eb merr Lodash.<\/p>\n<p><b>P:<\/b> \u2013 Sigurisht m\u00eb pak se runtime...<\/p>\n<p><b>AG:<\/b> \u2013 N\u00eb Javascriptin \u00abe past\u00ebr\u00bb?<\/p>\n<p><b>P:<\/b> \u2013 Po. Ne e kompresojm\u00eb at\u00eb para se ta d\u00ebrgojm\u00eb...<\/p>\n<p><b>AG:<\/b> \u2013 Por, ky\u00e7 doni q\u00eb \u00ebsht\u00eb nj\u00eb tekst\u2026 N\u00eb p\u00ebrgjith\u00ebsi, nj\u00eb megabajt duket shum\u00eb, por \u00ebsht\u00eb gjith\u00e7ka (ke t\u00eb gjith\u00eb runtime-in tuaj). M\u00eb pas, ti shkruan logjik\u00ebn t\u00ebnde t\u00eb biznesit, e cila do ta rris\u00eb binarin tuaj me 1%. Deri tani, nuk po shoh q\u00eb kjo e prish frontend-in. P\u00ebr m\u00eb tep\u00ebr, Web Assembly do t\u00eb punoj\u00eb m\u00eb shpejt se Javascript p\u00ebr nj\u00eb arsye t\u00eb qart\u00eb \u2013 nuk ka nevoj\u00eb t\u00eb analizohet.<\/p>\n<p><b>P:<\/b> \u2013 Deri tani \u00ebsht\u00eb nj\u00eb moment debati\u2026 Nuk ka ende nj\u00eb zbatim standard t\u00eb \"Vasm\u00ebs\" (Web Assembly), p\u00ebr t\u00eb cilin mund t\u00eb gjykojm\u00eb qart\u00eb. Konceptualisht \u2013 po: t\u00eb gjith\u00eb e kuptojm\u00eb se binari duhet t\u00eb jet\u00eb m\u00eb i shpejt\u00eb, por zbatimi aktual i t\u00eb nj\u00ebjtit V8 \u00ebsht\u00eb shum\u00eb efektiv.<\/p>\n<p><b>AG:<\/b> \u2013 Po.<\/p>\n<p><b>P:<\/b> \u2013 Kompilimi aty funksionon me t\u00eb v\u00ebrtet\u00eb shum\u00eb mir\u00eb dhe nuk \u00ebsht\u00eb e sigurt se do t\u00eb ket\u00eb ndonj\u00eb avantazh t\u00eb madh.<\/p>\n<p><b>AG:<\/b> \u2013 Web Assembly po zhvillohet edhe nga figura t\u00eb m\u00ebdha.<\/p>\n<p><b>P:<\/b> \u2013 Deri tani, m\u00eb duket se \u00ebsht\u00eb ende e v\u00ebshtir\u00eb t\u00eb gjykohet p\u00ebr Web Assembly. Sa koh\u00eb po flitet dhe pak arritje reale q\u00eb mund t\u00eb prek\u00ebsh.<\/p>\n<p><b>AG:<\/b> \u2013 Ndoshta. Do t\u00eb shohim.<\/p>\n<p><b>P:<\/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 staf frontend-esh.<\/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 po q\u00ebndroni me ne. Ju p\u00eblqen artikujt tan\u00eb? Doni t\u00eb shihni m\u00eb shum\u00eb materiale interesante? Na mb\u00ebshtesni duke b\u00ebr\u00eb nj\u00eb porosi ose duke rekomanduar tek miqt\u00eb 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 q\u00eb e kemi shpikur p\u00ebr Ju:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">E gjith\u00eb e v\u00ebrteta n\u00eb lidhje me VPS (KVM) E5-2697 v3 (6 B\u00ebrthama) 10GB DDR4 480GB SSD 1Gbps nga $19 ose si ta ndajm\u00eb sakt\u00ebsisht serverin?<\/a><\/noindex> (opcionet me RAID1 dhe RAID10, deri n\u00eb 24 b\u00ebrthama dhe deri n\u00eb 40GB DDR4 jan\u00eb t\u00eb disponueshme).<\/p>\n<p><b>Dell R730xd dyfish m\u00eb i lir\u00eb n\u00eb qend\u00ebr t\u00eb t\u00eb dh\u00ebnave Equinix Tier IV n\u00eb Amsterdam?<\/b> Vet\u00ebm te ne <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\u00ebrtoni nj\u00eb infrastruktur\u00eb t\u00eb klas\u00ebs korporative me p\u00ebrdorimin e server\u00ebve Dell R730xd E5-2650 v4 me \u00e7mim 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.2 - 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.2\" \/>\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\udd47Aleksit Grachjev: Go 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}]}}