Alekseev Gračev: Shko nĂ« Frontend

Kyiv Go Meetup Maj 2018:

Alekseev Gračev: Shko nĂ« Frontend

Moderator: – PĂ«rshĂ«ndetje tĂ« gjithĂ«ve! Faleminderit qĂ« jeni kĂ«tu! Sot kemi dy folĂ«s zyrtarĂ« – LjoĆĄa dhe Vanya. Do tĂ« ketĂ« edhe dy tĂ« tjerĂ«, nĂ«se na lejon koha. FolĂ«si i parĂ« – Alekseev Gračev, ai do tĂ« na flasĂ« pĂ«r GopherJS.

Alekseev Gračev (nĂ« vazhdim – AG): – Jam zhvillues Go dhe shkruaj shĂ«rbime web nĂ« Go. NdonjĂ«herĂ« pĂ«rballen me frontend-in, herĂ« pas here duhet tĂ« futem atje me duar. Dua tĂ« ndaj pĂ«rvojĂ«n dhe hulumtimet e mia pĂ«r Go nĂ« frontend.

Legjenda Ă«shtĂ«: sĂ« pari do tĂ« flasim pse duam tĂ« ekzekutojmĂ« Go nĂ« frontend, pastaj do tĂ« flasim si ta bĂ«jmĂ« kĂ«tĂ«. Ka dy mundĂ«si – Web Assembly dhe GopherJS. Le tĂ« shohim nĂ« cilin gjendje janĂ« kĂ«to zgjidhje dhe çfarĂ« mund tĂ« bĂ«jmĂ«.

ÇfarĂ« nuk shkon me frontend-in?

Të gjithë janë dakord se gjithçka është mirë me frontend-in?

Alekseev Gračev: Shko nĂ« Frontend

Testet janë të pakta? Ndërtime të ngadalta? Ekosistemi? Mirë.

Për frontend-in më pëlqen një citat që tha një nga zhvilluesit e frontend-it në librin e tij:

Alekseev Gračev: Shko nĂ« Frontend

Në Javascript nuk ka sistem tipesh. Tani do të përmend problemet me të cilat kam përballur gjatë punës time dhe do të shpjegoj se si i zgjidhin ato.

Sistemi i tipave nuk mund tĂ« quhet sistem tipesh nĂ« Javascript – ka vargje qĂ« pĂ«rfaqĂ«sojnĂ« tipin e objektit, por nĂ« tĂ« vĂ«rtetĂ« nuk kanĂ« tĂ« bĂ«jnĂ« asgjĂ« me tipat. Ky problem Ă«shtĂ« zgjidhur nĂ« TypeScript (shtesĂ« mbi Javascript) dhe Flow (kontrollues static i tipeve nĂ« Javascript). Prandaj, frontend-i tashmĂ« ka arritur zgjidhjen e problemit tĂ« keq tĂ« sistemit tĂ« tipave nĂ« Javascript.

Alekseev Gračev: Shko nĂ« Frontend

Biblioteka standarde nĂ« shfletues si e tillĂ« nuk ekziston – ka disa objekte tĂ« integruara dhe funksione 'magjike' nĂ« shfletues. Por nĂ« Javascript si i tillĂ«, biblioteka standarde mungon. Ky problem ishte zgjidhur dikur nga jQuery (tĂ« gjithĂ« pĂ«rdornin jQuery me tĂ« gjitha prototipat, ndihmĂ«sit, funksionet qĂ« nevojiten pĂ«r punĂ«). Tani tĂ« gjithĂ« pĂ«rdorin Lodash:

Alekseev Gračev: Shko nĂ« Frontend

Hell-i i callback-ëve. Mendoj se të gjithë e kanë parë kodin në Javascript diku 5 vjet më parë, dhe ai dukej si 'përzierje' e jashtëzakonshme e callback-ëve. Tani ky problem është zgjidhur (me daljen e ES-15 ose ES-16), u shtuan në Javascript premtimet (promises) dhe gjithkush mund të marrë frymë më lehtë për një kohë.

Alekseev Gračev: Shko nĂ« Frontend

Derisa nuk erdhi Hell-i i PromicĂ«ve... Nuk e di se si industria e frontend-it arrin ta bĂ«jĂ« kĂ«tĂ«, por ata vazhdimisht e futin veten nĂ« ndonjĂ« derĂ« tĂ« çuditshme. ArritĂ«n ta bĂ«nin hell-in edhe me 'premtat'. MĂ« pas zgjidhen kĂ«tĂ« problem duke shtuar njĂ« primitiv tĂ« ri – async/await:

Alekseev Gračev: Shko nĂ« Frontend

Me problemin e asinkronisĂ« Ă«shtĂ« zgjidhur. Async/await Ă«shtĂ« njĂ« primitiv mjaft i njohur nĂ« gjuhĂ« tĂ« ndryshme. NĂ« "Python" dhe nĂ« tĂ« tjera ka njĂ« qasje tĂ« tillĂ« – Ă«shtĂ« mjaft e mirĂ«. Problemi Ă«shtĂ« zgjidhur.

Cila problem nuk është zgjidhur? Rritja në progresion gjeometrik e kompleksitetit të framework-eve, kompleksiteti i ekosistemit dhe vetë programeve.

Alekseev Gračev: Shko nĂ« Frontend

  • Sintaksisi i Javascript-it Ă«shtĂ« paksa i çuditshĂ«m. TĂ« gjithĂ« e dimĂ« problemin me mbledhjen e njĂ« array dhe njĂ« objekt dhe tĂ« tjera çudi.
  • Javascript Ă«shtĂ« multifunksional. Tani kjo Ă«shtĂ« njĂ« sistem veçanĂ«risht i rĂ«ndĂ«sishĂ«m, kur ekosistemi Ă«shtĂ« shumĂ« i madh:
    • tĂ« gjithĂ« shkruajnĂ« nĂ« stile tĂ« ndryshme – disa shkruajnĂ« nĂ« mĂ«nyrĂ« strukturore, disa nĂ« mĂ«nyrĂ« funksionale, zhvillues tĂ« ndryshĂ«m shkruajnĂ« ndryshe;
    • nga paketat e ndryshme (packages) parime tĂ« ndryshme, kur pĂ«rdorni paketa tĂ« ndryshme;
    • ka shumĂ« "kĂ«naqĂ«si" me programimin funksional nĂ« Javascript – doli biblioteka rambda dhe tani askush nuk mund tĂ« lexojĂ« programet e shkruara nĂ« kĂ«tĂ« bibliotekĂ«.

  • Kjo sjell njĂ« ndikim tĂ« madh nĂ« ekosistem dhe ajo Ă«shtĂ« zgjeruar nĂ« mĂ«nyrĂ« tĂ« pabesueshme. Paketat janĂ« tĂ« papajtueshme me njĂ«ra-tjetrĂ«n: disa janĂ« nĂ« promesa, disa janĂ« nĂ« async/await, disa nĂ« kolbeka. Edhe nĂ« paradigmat e ndryshme shkruajnĂ«!
  • Kjo çon nĂ« faktin qĂ« projekti Ă«shtĂ« i vĂ«shtirĂ« pĂ«r t'u mbajtur. E vĂ«shtirĂ« tĂ« gjesh njĂ« bug, nĂ«se nuk mund ta lexosh kodin.

ÇfarĂ« Ă«shtĂ« Web Assembly?

DjemtĂ« e guximshĂ«m nga Mozilla Foundation dhe disa kompani tĂ« tjera shpikĂ«n njĂ« gjĂ« si Web Assembly. ÇfarĂ« Ă«shtĂ« kjo?

Alekseev Gračev: Shko nĂ« Frontend

  • Kjo Ă«shtĂ« njĂ« makinĂ« virtuale e integruar nĂ« shfletues, qĂ« mbĂ«shtet njĂ« format binar.
  • Programet binare atje kalojnĂ« dhe ekzekutohen pothuajse nĂ« mĂ«nyrĂ« natyrale, qĂ« do tĂ« thotĂ« se shfletuesi nuk duhet ta analizojĂ« çdo herĂ« tĂ« gjithĂ« "llojin" e kodit javascript.
  • TĂ« gjithĂ« shfletuesit shpallen mbĂ«shtetje.
  • Duke qenĂ« se Ă«shtĂ« kod bajt, mund tĂ« shkruash njĂ« kompilator pĂ«r çdo gjuhĂ«.
  • KatĂ«r shfletuesit kryesorĂ« tashmĂ« vijnĂ« me mbĂ«shtetje pĂ«r Web Assembly.
  • ShumĂ« shpejt presim mbĂ«shtetje natyrale nĂ« Go. NjĂ« arkitekturĂ« e re Ă«shtĂ« tashmĂ« shtuar: GOARCH=wasm GOOS=js (shpejt). Deri tani, siç e kuptoj, nuk Ă«shtĂ« funksionale, megjithatĂ« ka njĂ« deklaratĂ« se kjo do tĂ« jetĂ« me siguri nĂ« Go.

ÇfarĂ« tĂ« bĂ«jmĂ« tani? GopherJS

Derisa nuk kemi mbështetje për Web Assembly, ka një transpajler si GopherJS.

Alekseev Gračev: Shko nĂ« Frontend

  • Kodi nĂ« Go transpajlohet nĂ« Javascript "tĂ« pastĂ«r".
  • Ekzekutohet nĂ« tĂ« gjithĂ« shfletuesit – nuk ka funksione tĂ« reja qĂ« mbĂ«shteten vetĂ«m nĂ« shfletuesit modernĂ« (ky Ă«shtĂ« Vanilla JS, i cili ekzekutohet nĂ« çdo gjĂ«).
  • Ka Ă«shtĂ« mbĂ«shtetje pĂ«r thuajse çdo gjĂ« qĂ« ka Go, pĂ«rfshirĂ« gorutinat dhe kanalet... – gjithçka qĂ« ne e duam dhe e njohim.
  • G casi gjithĂ« biblioteka standarde Ă«shtĂ« mbĂ«shtetur, pĂ«rveç atyre paketave qĂ« nuk kanĂ« kuptim tĂ« mbĂ«shteten nĂ« shfletues: syscall, ndĂ«rveprimet neto (ka njĂ« klient net/http, por nuk ka server, dhe klienti emulohet pĂ«rmes XMLHttpRequest). NĂ« pĂ«rgjithĂ«si, e gjithĂ« biblioteka standarde Ă«shtĂ« e aksesueshme – ja ajo nĂ« shfletues, ja stdlib Go, qĂ« ne e duam.
  • E gjithĂ« ekosistemi i paketĂ«s nĂ« Go, tĂ« gjitha zgjidhjet e jashtme (templating dhe tĂ« tjera) mund tĂ« kompilohet me anĂ« tĂ« GopherJS dhe tĂ« startohet kjo nĂ« shfletues.

TĂ« merrni GopherJS Ă«shtĂ« shumĂ« e thjeshtĂ« – Ă«shtĂ« njĂ« paketĂ« e zakonshme Go. BĂ«jmĂ« go get, dhe kemi komandĂ«n GopherJS pĂ«r tĂ« ndĂ«rtuar aplikacionin:

Alekseev Gračev: Shko nĂ« Frontend

Ja një hello world të tillë...

Alekseev Gračev: Shko nĂ« Frontend

...NjĂ« program i zakonshĂ«m nĂ« Go, njĂ« paketĂ« e zakonshme fmt e bibliotekĂ«s standarde dhe Binding Js, pĂ«r tĂ« arritur nĂ« API-nĂ« e shfletuesit. Println nĂ« fund do tĂ« transformohet nĂ« log tĂ« konsolĂ«s dhe shfletuesi do tĂ« shkruajĂ« “Hello gophers”! Kaq e thjeshtĂ«: bĂ«jmĂ« GopherJS build – ekzekutojmĂ« nĂ« shfletues – gjithçka funksionon!

ÇfarĂ« ka deri mĂ« tani? Bindings

Alekseev Gračev: Shko nĂ« Frontend

Ka bindings për të gjitha framework-at popullorë js:

  • JQuery;
  • Angular.js;
  • D3.js pĂ«r ndĂ«rtimin e grafikĂ«ve dhe punĂ«n me tĂ« dhĂ«na tĂ« mĂ«dha;
  • React.js;
  • VueJS;
  • madje ka mbĂ«shtetje pĂ«r Electron (pra tani mund tĂ« shkruajmĂ« aplikacione desktop me 'Electron');
  • dhe e gjitha kjo Ă«shtĂ« e çuditshme – Ă«shtĂ« WebGL (mund tĂ« bĂ«jmĂ« aplikacione poligonale, pĂ«rfshirĂ« lojĂ«ra me grafikĂ« 3D, muzikĂ« dhe tĂ« gjitha gjĂ«rat e tjera);
  • dhe shumĂ« bindings tĂ« tjera pĂ«r tĂ« gjitha framework-at dhe bibliotekat popullore JavaScript.

Framework

  1. Ka njĂ« framework tĂ« zhvilluar posaçërisht pĂ«r GopherJS – Vecty. Ky Ă«shtĂ« njĂ« ekuivalent i plotĂ« i React.js, vetĂ«m se i zhvilluar nĂ« Go, me specifikĂ«n e GopherJS.
  2. Ka çanta për lojëra (papritur!). Kam gjetur dy më të njohurat:
    • Engo;
    • Ebiten.

Do të demonstroj disa shembuj, si duket dhe çfarë mund të shkruhet tani në Go:

Alekseev Gračev: Shko nĂ« Frontend

Ose një variant të tillë (nuk gjeva një shooter 3D, por, ndoshta, ai ekziston):

Alekseev Gračev: Shko nĂ« Frontend

ÇfarĂ« ofroj unĂ«?

Tani industria e front-end-it ndodhet nĂ« njĂ« gjendje tĂ« tillĂ«, sa qĂ« tani do i drejtohen tĂ« gjitha gjuhĂ«ve qĂ« deri tani qanin nga Javascript. Tani tĂ« gjithĂ« do tĂ« kompilohet nĂ« 'Web Assembly'. ÇfarĂ« na nevojitet pĂ«r tĂ« zĂ«nĂ« njĂ« vend tĂ« denjĂ« atje si 'gofers'?

Alekseev Gračev: Shko nĂ« Frontend

Tradicionalisht, në Go është e njohur se është një gjuhë programimi sistemike, dhe praktikisht nuk ka biblioteka për të punuar me UI. Disa ekzistojnë, por janë gjysmë të braktisura dhe gjysmë jo funksionale.

Dhe ja, një shans i shkëlqyer për të krijuar biblioteka UI në Go, të cilat do të ekzekutohen në GopherJS! E fundit, mund të shkruash kornizën tënde! Ka ardhur koha për të shkruar një kornizë, dhe ajo do të jetë një nga të parat që do të marrë përshtatje të hershme, dhe do të jetë një yll (nëse është një kornizë e mirë).

Mund tĂ« adaptohen shumĂ« paketa tĂ« ndryshme, tĂ« cilat tashmĂ« ekzistojnĂ« nĂ« ekosistemin Go, pĂ«r specifikat e shfletuesit (pĂ«r shembull, motori i shabllonĂ«ve). Ato do tĂ« funksionojnĂ«, mund tĂ« krijosh mbĂ«shtetje tĂ« pĂ«rshtatshme, nĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« renderosh pĂ«rmbajtjen direkt nĂ« shfletues. PĂ«r mĂ« tepĂ«r, mund tĂ« krijosh, pĂ«r shembull, njĂ« shĂ«rbim qĂ« mund tĂ« renderojĂ« tĂ« njĂ«jtĂ«n gjĂ« nĂ« server dhe nĂ« frontend, duke pĂ«rdorur tĂ« njĂ«jtin kod – gjithçka siç e duan zhvilluesit e frontend-it (vetĂ«m tani nĂ« Go).

Mund të shkruash një lojë! Thjesht për argëtim...

Kjo është gjithçka nga unë.

Alekseev Gračev: Shko nĂ« Frontend

Pyetje

Pyetja (mĂ« pas – P): – A shkruaj nĂ« Go apo nĂ« Js?

AG: – Ti shkruan nĂ« Go rutina, kanale, struktura, embedding – gjithçka... Ti regjistrohesh pĂ«r njĂ« ngjarje, kalon atje njĂ« funksion.

P: – Pra, po shkruaj nĂ« «golë» Js?

AG: – Jo, ti shkruan si nĂ« Go dhe lidhe me API-nĂ« e shfletuesit (API-ja nuk Ă«shtĂ« ndryshuar). Mund tĂ« shkruash mbĂ«shtetje tĂ« tua, kĂ«shtu qĂ« mesazhet tĂ« vijnĂ« nĂ« kanal – kjo nuk Ă«shtĂ« e komplikuar.

P: – ÇfarĂ« ndodh me celularin?

AG: – UnĂ« me siguri e kam parĂ«: ka lidhje pĂ«r patch Cordova, qĂ« Js ekzekuton. NĂ« React Native – nuk e di; ndoshta ka, ndoshta jo (nuk jam shumĂ« i interesuar). Motori i lojĂ«rave N-go mbĂ«shtet gjithashtu aplikacionet mobile – si iOS ashtu edhe Android.

P: – Pyetje pĂ«r Web Assembly. Po merr gjithnjĂ« e mĂ« shumĂ« hapĂ«sirĂ«, pavarĂ«sisht nga kompresimi, «zipimi»... A do ta shkatĂ«rrojmĂ« kĂ«shtu edhe mĂ« shumĂ« botĂ«n e frontend-it?

AG: – Web Assembly Ă«shtĂ« njĂ« format binar, dhe binari sipas par regullit nuk mund tĂ« jetĂ« mĂ« i madh nĂ« versionin pĂ«rfundimtar se sa teksti... Ti je i tĂ«rhequr nga runtime, por kjo Ă«shtĂ« e njĂ«jtĂ« me tĂ«rheqjen e bibliotekĂ«s standarde tĂ« Javascript-it kur nuk Ă«shtĂ« aty, prandaj ne pĂ«rdorim ndonjĂ« Lodash. Nuk e di se sa hapĂ«sirĂ« merr Lodash.

P: – Sigurisht mĂ« pak se runtime...

AG: – NĂ« Javascriptin «e pastĂ«r»?

P: – Po. Ne e kompresojmĂ« atĂ« para se ta dĂ«rgojmĂ«...

AG: – Por, kyç doni qĂ« Ă«shtĂ« njĂ« tekst
 NĂ« pĂ«rgjithĂ«si, njĂ« megabajt duket shumĂ«, por Ă«shtĂ« gjithçka (ke tĂ« gjithĂ« runtime-in tuaj). MĂ« pas, ti shkruan logjikĂ«n tĂ«nde tĂ« biznesit, e cila do ta rrisĂ« binarin tuaj me 1%. Deri tani, nuk po shoh qĂ« kjo e prish frontend-in. PĂ«r mĂ« tepĂ«r, Web Assembly do tĂ« punojĂ« mĂ« shpejt se Javascript pĂ«r njĂ« arsye tĂ« qartĂ« – nuk ka nevojĂ« tĂ« analizohet.

P: – Deri tani Ă«shtĂ« njĂ« moment debati
 Nuk ka ende njĂ« zbatim standard tĂ« "VasmĂ«s" (Web Assembly), pĂ«r tĂ« cilin mund tĂ« gjykojmĂ« qartĂ«. Konceptualisht – po: tĂ« gjithĂ« e kuptojmĂ« se binari duhet tĂ« jetĂ« mĂ« i shpejtĂ«, por zbatimi aktual i tĂ« njĂ«jtit V8 Ă«shtĂ« shumĂ« efektiv.

AG: – Po.

P: – Kompilimi aty funksionon me tĂ« vĂ«rtetĂ« shumĂ« mirĂ« dhe nuk Ă«shtĂ« e sigurt se do tĂ« ketĂ« ndonjĂ« avantazh tĂ« madh.

AG: – Web Assembly po zhvillohet edhe nga figura tĂ« mĂ«dha.

P: – Deri tani, mĂ« duket se Ă«shtĂ« ende e vĂ«shtirĂ« tĂ« gjykohet pĂ«r Web Assembly. Sa kohĂ« po flitet dhe pak arritje reale qĂ« mund tĂ« prekĂ«sh.

AG: – Ndoshta. Do tĂ« shohim.

P: – Nuk kemi probleme nĂ« backend
 Ndoshta, t'i lĂ«mĂ« kĂ«to probleme nĂ« frontend? Pse tĂ« futemi aty?

AG: – Duhet tĂ« mbajmĂ« njĂ« staf frontend-esh.

Luaj videon

Pak reklamĂ« 🙂

Faleminderit që po qëndroni me ne. Ju pëlqen artikujt tanë? Doni të shihni më shumë materiale interesante? Na mbështesni duke bërë një porosi ose duke rekomanduar tek miqtë tuaj, VPS cloud për zhvillues nga $4.99, një analog unik i serverëve entry-level që e kemi shpikur për Ju: E gjithë e vërteta në lidhje me VPS (KVM) E5-2697 v3 (6 Bërthama) 10GB DDR4 480GB SSD 1Gbps nga $19 ose si ta ndajmë saktësisht serverin? (opcionet me RAID1 dhe RAID10, deri në 24 bërthama dhe deri në 40GB DDR4 janë të disponueshme).

Dell R730xd dyfish mĂ« i lirĂ« nĂ« qendĂ«r tĂ« tĂ« dhĂ«nave Equinix Tier IV nĂ« Amsterdam? VetĂ«m te ne 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB nga $199 nĂ« HolandĂ«! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — nga $99! Lexoni rreth Si tĂ« ndĂ«rtoni njĂ« infrastrukturĂ« tĂ« klasĂ«s korporative me pĂ«rdorimin e serverĂ«ve Dell R730xd E5-2650 v4 me çmim 9000 euro pĂ«r pak para?

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster