Alexey Grachev: Go Frontend

Kulanka Kyiv Go May 2018:

Alexey Grachev: Go Frontend

Hogaaminaya: - Salaamu calaykum! Waad ku mahadsan tahay joogitaankaaga halkan! Maanta waxaan leenahay laba ku hadla rasmiga ah - Lyosha iyo Vanya. Waxaa jiri doona laba kale haddii aan haysanno waqti ku filan. Hadalka ugu horreeya waa Alexey Grachev, wuxuu nooga sheegi doonaa GopherJS.

Alexey Grachev (hadda ka dib - AG): - Waxaan ahay horumariye Go, oo waxaan ku qoraa adeegyada shabakadda gudaha Go. Mararka qaarkood waa inaad wax ka qabataa dhinaca hore, mararka qaarkood waa inaad gacanta u gelisaa. Waxaan rabaa inaan ka hadlo khibradeyda iyo cilmi baarista Go on frontend.

Halyeygu waa kan: marka hore waxaan ka hadli doonaa sababta aan u dooneyno inaan ku soconno Go on the frontend, ka dibna waxaan ka hadli doonaa sida tan loo samayn karo. Waxaa jira laba siyaabood - Golaha Shabakadda iyo GopherJS. Aynu eegno halka ay xalalkani ku sugan yihiin iyo waxa la qaban karo.

Maxaa ka khaldan dhanka hore?

Qof kastaa ma ku raacsan yahay in wax walba ay ku fiican yihiin xagga hore?

Alexey Grachev: Go Frontend

Miyayna jirin baaritaanno ku filan? Dhisme gaabis ah? Nidaamka deegaanka? Fiican

Marka laga hadlayo dhinaca hore, waxaan jeclahay xigashada mid ka mid ah horumariyayaasha hore ku yidhi buugiisa:

Alexey Grachev: Go Frontend

Javascript ma laha nidaam nooc ah. Hadda waxaan magacaabi doonaa dhibaatooyinkii aan la kulmay intii aan shaqada ku jiray, waxaanan sharixi doonaa sida loo xalliyo.

Nidaamka nooca guud ahaan si dhib leh loogu yeeri karo nidaamka nooca Javasript - waxaa jira khadadka tilmaamaya nooca shayga, laakiin dhab ahaantii tani shaqo kuma laha noocyada. Dhibaatadan waxa lagu xalliyaa TypeScript (ku-dar ku-darka Javasript) iyo Flow (Cheeer nooca taagan ee Javascript). Dhab ahaantii, horudhaca hore wuxuu horeyba u gaaray xalinta dhibaatada nidaamka nooca xun ee Javascript.

Alexey Grachev: Go Frontend

Ma jiro maktabad caadi ah browser-ka sidaas oo kale - waxaa jira waxyaabo la dhisay iyo hawlaha "sixirka" ee daalacashada. Laakin Javascript kuma jiro maktabad caadi ah oo la mid ah. Dhibaatadan waxaa mar horeba lagu xalliyay jQuery (qof kastaa wuxuu isticmaalay jQuery oo wata dhammaan tusaalooyinka, caawiyayaasha, hawlaha loo baahan yahay si loo shaqeeyo). Hadda qof kastaa wuxuu isticmaalaa Lodash:

Alexey Grachev: Go Frontend

Cadaabta dib ugu yeer. Waxaan u maleynayaa in qof walba uu arkay koodka Javascript 5 sano ka hor, waxayna u egtahay "noodle" oo ah qarsoodi cajiib ah oo dib-u-soo-celin ah. Hadda dhibaatadan waa la xalliyay (marka la sii daayo ES-15 ama ES-16), ballanqaadyada ayaa lagu daray Javascript qof walbana si fudud ayuu u neefsan karaa muddo.

Alexey Grachev: Go Frontend

Ilaa cadaabta Promice timid ... Ma aqaano sida warshadaha hore u maareeyaan, laakiin had iyo jeer waxay naftooda u kaxeeyaan qaar ka mid ah kaymaha qariibka ah. Waxa kale oo aanu ku guulaysanay in aanu samayno jahannamo. Kadibna waxaan xallinay dhibaatadan annagoo ku darayna mid hore - async/sugi:

Alexey Grachev: Go Frontend

Dhibka leh asynchrony waa la xalliyey. Async/wait waa hore caan ah oo luuqado kala duwan ku hadla. Python iyo kuwa kale waxay leeyihiin habkan - aad bay u fiican tahay. Dhibaatada la xaliyay.

Maxaa dhib ah oo aan la xalin? Kakanaanta qaab-dhismeedka, kakanaanta nidaamka deegaanka iyo barnaamijyada laftooda.

Alexey Grachev: Go Frontend

  • Javascript syntax waa xoogaa la yaab leh. Dhammaanteen waan ognahay dhibka ay leedahay in lagu daro array iyo shay iyo kaftan kale.
  • Javascript waa halbeegyo badan. Kani waa nidaam si gaar ah cadaadis u saaraya hadda marka nidaamka deegaanka uu aad u weyn yahay:
    • qof kastaa wuxuu u qoraa qaabab kala duwan - qaar waxay u qoraan qaab dhismeed, qaar waxay qoraan si shaqeynaya, horumariyayaal kala duwan ayaa si kala duwan u qoraa;
    • laga bilaabo baakado kala duwan, jaangooyooyin kala duwan markaad isticmaasho baakado kala duwan;
    • Waxaa jira wax badan oo "madadaalo ah" oo leh barnaamijyo shaqeynaya gudaha Javasript - maktabadda rambda ayaa soo muuqatay oo hadda qofna ma akhriyi karo barnaamijyada ku qoran maktabaddan.

  • Waxaas oo dhami waxay saameyn weyn ku leeyihiin nidaamka deegaanka, waxayna u kortay si cajiib ah. Xirmooyinka ayaa ah kuwo aan ku habboonayn midba midka kale: qaar waxay ku saleysan yihiin ballanqaadyo, qaar waxay ku saleysan yihiin async / sugitaanka, qaar waxay ku saleysan yihiin dib-u-soo-celinta. Waxay sidoo kale ku qoraan jaangooyooyin kala duwan!
  • Tani waxay adkeyneysaa in mashruuca la sii wado. Way adag tahay in la helo bug haddii aadan akhrin karin koodka.

Waa maxay Golaha Shabakadda?

Ragga geesiyaasha ah ee ka socda Mozilla Foundation iyo shirkado kale oo badan ayaa la yimid wax la mid ah Golaha Shabakadda. Waa maxay waxaan?

Alexey Grachev: Go Frontend

  • Kani waa mishiin dalwad ah oo lagu dhex dhisay browser-ka taageera qaabka binary-ga.
  • Barnaamijyada binary-ga ayaa halkaas yimaada waxaana lagu fuliyaa ku dhawaad ​​asal ahaan, taas oo ah, browserku uma baahna inuu kala saaro dhammaan "baasto" ee code Javascript mar kasta.
  • Dhammaan daalacayaashu waxay caddeeyeen taageero
  • Maadaama kani yahay bytecode, waxaad u qori kartaa isku-dubarid luqad kasta.
  • Afar browser oo waaweyn ayaa horey u soo raray taageerada Golaha Shabakadda.
  • Waxaan rajeyneynaa taageerada waddaniga ah ee Go dhawaan. Nashqadan cusub ayaa horay loogu soo daray: GOARCH=wasm GOOS=js (soon). Ilaa hadda, sida aan u fahmay, ma aha mid shaqaynaysa, laakiin waxaa jira hadal sheegaya in ay hubaal tahay in Go.

Maxaa hadda la sameeyaa? GopherJS

In kasta oo aynaan taageero u haysan Golaha Shabakadda, waxa jira qalab-qaade sida GopherJS.

Alexey Grachev: Go Frontend

  • Go code waxa loo turjumay Javascript β€œ saafi ah.
  • Ku shaqeeya dhammaan daalacashada - ma jiraan astaamo cusub oo ay taageerayaan daalacashada casriga ah oo keliya (tani waa Vanilla JS, oo ku shaqeysa wax kasta).
  • Waxaa jira taageero ku dhawaad ​​wax kasta oo Go leeyahay, oo ay ku jiraan gorutines iyo channels... wax kasta oo aan jeclahay oo aan aad u ognahay.
  • Ku dhowaad dhammaan maktabadda caadiga ah waa la taageeray, marka laga reebo xirmooyinkaas oo aan macno lahayn in lagu taageero browserka: syscall, isdhexgalka saafiga ah (waxaa jira macmiil shabakad / http, laakiin ma jiro server, iyo macmiilka waxaa lagu dayday XMLHttpRequest). Guud ahaan, maktabadda caadiga ah oo dhan waa la heli karaa - halkan waxay ku taal browserka, halkan waa Go's stdlib, oo aan jecelnahay.
  • Dhammaan nidaamka deegaanka ee xirmada ee Go, dhammaan xalalka dhinac saddexaad (templating, iwm.) waa la isku dubaridi karaa iyadoo la adeegsanayo GopherJS oo lagu socodsiiyo browserka.

GopherJS aad bay u fududahay in la helo - waa kaliya xirmo Go caadi ah. Waanu tagnaa, waxaanan leenahay amarka GopherJS si loo dhiso codsiga:

Alexey Grachev: Go Frontend

Kani waa adduun yar oo hello...

Alexey Grachev: Go Frontend

...Barnaamijka Go joogto ah, xirmo fmt maktabad caadi ah iyo Binding Js si loo gaaro browserka API. Println aakhirka waxa loo rogi doonaa log console oo browserku waxa uu qori doonaa "Hello gophers"! Waa wax fudud: waxaan samaynaa GopherJS dhis - waxaan ku bilownay browserka - wax walbaa way shaqeeyaan!

Maxaa hadda haysaa? Isku xidhka

Alexey Grachev: Go Frontend

Waxaa jira xidhidhyo loogu talagalay dhammaan qaab-dhismeedka js ee caanka ah:

  • JQuery;
  • Xaglaha.js;
  • D3.js loogu talagalay qorsheynta iyo ku shaqeynta xogta weyn;
  • Ka falcelin.js;
  • VueJS;
  • xitaa waxaa jira taageero Electron (taasi waa, waxaan horeyba ugu qori karnaa codsiyada miiska Electron);
  • iyo waxa ugu qosolka badan waa WebGL (waxaan samayn karnaa codsiyada garaafyada buuxa, oo ay ku jiraan ciyaaraha leh sawirada 3D, muusikada iyo dhammaan waxyaabaha wanaagsan);
  • iyo waxyaabo kale oo badan oo ku xidhan dhammaan qaab-dhismeedka Javascript ee caanka ah iyo maktabadaha.

Framework

  1. Waxa jira qaab-dhismeedka shabakadda oo horeba loogu sameeyay GopherJS - Vecty. Kani waa analoog dhamaystiran oo React.js ah, laakiin kaliya lagu sameeyay Go, oo leh waxyaabaha gaarka ah ee GopherJS.
  2. Waxaa jira bacaha ciyaarta (yaab!). Waxaan helay labada ugu caansan:
    • Engo;
    • Ebiten.

Waxaan ku tusi doonaa dhowr tusaale oo ah sida ay u egtahay iyo waxa aad horay ugu qori karto Go:

Alexey Grachev: Go Frontend

Ama doorashadan (Ma heli kari waayay toogte 3D, laakiin malaha way jirtaa):

Alexey Grachev: Go Frontend

Maxaan bixinayaa?

Hadda warshadaha-dhamaadka hore waxay ku sugan yihiin xaalad sidan oo kale ah in dhammaan luqadaha hore uga qayliyay Javascript ay ku degdegi doonaan halkaas. Hadda wax walba waxaa lagu soo ururin doonaa "Web Assemblies". Maxaan u baahanahay si aan meesha saxda ah ugu qaadano Gophers ahaan?

Alexey Grachev: Go Frontend

Go waxa ay dhaqan ahaan u qaadatay in ay tahay luqadda barnaamijka, mana jiraan wax maktabado ah oo la shaqeeya UI. Wax baa jira, laakiin badh baa laga tegay, badhna ma shaqaynayo.

Oo hadda waa fursad wanaagsan oo lagu samayn karo maktabadaha UI ee Go oo ku socon doona GopherJS! Ugu dambeyntii waxaad qori kartaa qaabkaaga! Tani waa marka aad qori kartaa qaab-dhismeedka, oo waxay noqon doontaa mid ka mid ah kuwa ugu horreeya oo aad hore u korsato, waxaadna noqon doontaa xiddig (haddii ay tahay qaab-dhismeed wanaagsan).

Waxaad la qabsan kartaa baakado badan oo kala duwan kuwaas oo horey ugu jiray nidaamka deegaanka ee Go waxyaabaha gaarka ah ee browserka (tusaale, matoorka Template). Horeyba way u shaqayn doonaan, waxaad samayn kartaa xidhidhyo ku haboon si aad si fudud ugu soo bandhigto nuxurka browserka. Intaa waxaa dheer, waxaad samayn kartaa, tusaale ahaan, adeeg bixin kara wax la mid ah server-ka iyo dhinaca hore, adoo isticmaalaya kood isku mid ah - wax kasta oo ay jecel yihiin horumarinta-dhamaadka hore (kaliya hadda Go).

Waxaad qori kartaa ciyaar! Kaliya madadaalo…

Taasi waa waxa aan rabay in aan sheego.

Alexey Grachev: Go Frontend

Su'aalahaada

Su'aal (ka dib loogu yeero Q): – Ma waxaan ku qoraa Go ama Js?

AG: - Waxaad qortaa hab-nololeedka, kanaalada, qaab-dhismeedka, dhejinta - wax kasta oo ku jira Go... Waxaad iska diiwaan gelisaa dhacdo, waxaad ku gudbisaa hawl.

AT: - Markaa waxaan ku qoraa "qaawan" Js?

AG: - Maya, waxaad u qortaa sidii Go oo waxaad ku xidhaa browserka API (API isma beddelin). Waxaad qori kartaa xidhidhiyahaaga si fariimaha loogu soo diro kanaalka - ma aha wax adag.

AT: – Ka warran mobilka?

AG: - Runtii waan arkay: waxaa jira xidhidhyo loogu talagalay balastar Cordova oo uu Js wado. Dhaladka React - ma garanayo; waxaa laga yaabaa inay jirto, laga yaabee inaysan jirin (ma xiisayneynin gaar ahaan). Matoorka ciyaarta ee N-go wuxuu taageeraa labada codsi ee mobilada - labadaba iOS iyo Android.

AT: - Su'aal ku saabsan Golaha Shabakadda. Meelo badan oo badan ayaa la qaadayaa, inkastoo la isku riixo iyo "zipping"

AG: - Golaha Shabakadu waa qaab-binaari ah, binary-kuna sida caadiga ah kuma jiri karo sii-deynta kama dambaysta ah in ka badan qoraalka isticmaal qaar ka mid ah Lodash . Ma garanayo inta Lodash qaadanayso.

AT: - Sida iska cad wax ka yar wakhtiga shaqada...

AG: - Javascript-ka " saafi ah"?

AT: - Haa. Waanu isku cadaadiyaa ka hor intaanan dirin...

AG: - Laakiin tani waa qoraal ... Guud ahaan, megabyte waxay u muuqataa wax badan, laakiin taasi waa dhammaan (waxaad haysataa dhammaan runtime). Marka xigta, waxaad qortaa caqli-gal ganacsi oo kuu gaar ah, taas oo kordhin doonta binary-gaaga 1%. Ilaa hadda ma arko kan dilaaga ah ee hore. Waxaa intaa dheer, Golaha Shabakadu wuxuu u shaqayn doonaa si ka dhakhso badan Javascript sababta cad - uma baahna in la kala saaro.

AT: - Tani weli waa qodob muran badan leh... Weli ma jiro wax tixraac ah oo la hirgelinayo "Vasma" (Golaha Webka) si qofku u xukumo si aan caddayn. Fikrad ahaan, haa: dhammaanteen waan fahamsanahay in binary ay tahay inay dhaqso badan tahay, laakiin hirgelinta hadda ee isla V8 waa mid aad waxtar u leh.

AG: - Haa.

AT: - Isku-dubbarididda halkaas waxay u shaqeysaa runtii aad u fiican mana aha xaqiiqo ah inay jiri doonto faa'iido weyn.

AG: - Golaha Shabakadda sidoo kale waxaa sameeya rag waaweyn.

AT: – Waxay ila tahay inay weli adag tahay in la xukumo Golaha Shabakadda. Waxaa jiray wada hadal sanado badan hadda, laakiin waxaa jira guulo dhab ah oo yar oo la dareemi karo.

AG: - Waxaa laga yaabaa in. Waan arki doonaa.

AT: - Dhibaato kuma qabno dhabarka dambe ... Ma laga yaabaa inaan dhibaatooyinkan uga tagno dhinaca hore? Maxaa meeshaas loo aadayaa?

AG: - Waa inaan haysanaa shaqaale ka tirsan shaqaalaha safka hore.

Xayeysiisyada qaar πŸ™‚

Waad ku mahadsan tahay inaad nala joogto. Ma jeceshahay maqaalladayada? Ma doonaysaa inaad aragto wax badan oo xiiso leh? Nagu taageer adigoo dalbanaya amar ama kula talinaya asxaabta, Cloud VPS ee horumariyeyaasha laga bilaabo $ 4.99, analoog gaar ah oo ah server-yada heerka gelitaanka, kaas oo anaga aanu adiga kuu hindisay: Xaqiiqada oo dhan ee ku saabsan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps laga bilaabo $19 ama sida loo wadaago server? (waxaa laga heli karaa RAID1 iyo RAID10, ilaa 24 cores iyo ilaa 40GB DDR4).

Dell R730xd 2x ka jaban xarunta xogta Equinix Tier IV ee Amsterdam? Kaliya halkan 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV laga bilaabo $199 Nederlaan! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - laga bilaabo $99! Wax ka akhri Sida loo dhiso infrastructure Corp. fasalka iyadoo la adeegsanayo Dell R730xd E5-2650 v4 servers oo qiimahoodu yahay 9000 euro dinaar?

Source: www.habr.com

Add a comment