Kyiv Go Meetup May 2018:
Ukukhokela: - Molweni nonke! Enkosi ngokuba lapha! Namhlanje sinezithethi ezimbini ezisemthethweni - uLyosha noVanya. Kuya kubakho ezinye ezimbini ukuba sinexesha elaneleyo. Isithethi sokuqala ngu-Alexey Grachev, uya kusixelela ngeGopherJS.
U-Alexey Grachev (emva koku β AG): -Ndingumphuhlisi weGo, kwaye ndibhala iinkonzo zewebhu kwi-Go. Ngamanye amaxesha kufuneka ujongane ne-frontend, ngamanye amaxesha kufuneka ungene kuyo ngesandla. Ndifuna ukuthetha ngamava am kunye nophando kwi-Go on the frontend.
Intsomi yile: okokuqala siza kuthetha malunga nokuba kutheni sifuna ukubaleka kwi-frontend, emva koko siza kuthetha ngendlela enokwenziwa ngayo oku. Kukho iindlela ezimbini - iNdibano yeWebhu kunye neGopherJS. Makhe sibone ukuba imeko yezi zisombululo yintoni kwaye yintoni enokwenziwa.
Yintoni engalunganga nge-frontend?
Ngaba wonke umntu uyavuma ukuba yonke into ilungile nge-frontend?
Akwanelanga iimvavanyo? Ulwakhiwo olucothayo? Inkqubo yendalo? Kulungile.
Ngokuphathelele kwi-frontend, ndiyathanda isicatshulwa esathethwa ngomnye wabaphuhlisi be-frontend kwincwadi yakhe:
IJavascript ayinayo inkqubo yohlobo. Ngoku ndiza kuchaza iingxaki endiye ndadibana nazo ngexesha lomsebenzi wam kwaye ndichaze nendlela ezisonjululwa ngayo.
Inkqubo yohlobo ngokubanzi ayinakubizwa ngokuba yinkqubo yohlobo kwiJavasript - kukho imigca ebonisa uhlobo lwento, kodwa ngokwenene oku akunanto yakwenza neentlobo. Le ngxaki isonjululwe kwi-TypeScript (i-add-on kwiJavasript) kunye ne-Flow (i-static-type checker kwi-Javascript). Ngokwenyani, i-frontend sele ifikelele kwinqanaba lokusombulula ingxaki yenkqubo yohlobo olubi kwiJavascript.
Akukho thala leencwadi eliqhelekileyo kwisikhangeli - kukho izinto ezakhelwe ngaphakathi kunye nemisebenzi "yomlingo" kwizikhangeli. Kodwa kwiJavascript ayikho ilayibrari eqhelekileyo njengaleyo. Le ngxaki sele isonjululwe kanye nge-jQuery (wonke umntu wasebenzisa i-jQuery nazo zonke iiprototypes, abancedisi, imisebenzi efunekayo ukusebenza). Ngoku wonke umntu usebenzisa i-Lodash:
Callback esihogweni. Ndicinga ukuba wonke umntu wabona ikhowudi yeJavascript malunga neminyaka eyi-5 eyadlulayo, kwaye yayikhangeleka ngathi "i-noodle" yobuchule obumangalisayo bokufowuna. Ngoku le ngxaki ixazululwe (ngokukhululwa kwe-ES-15 okanye i-ES-16), izithembiso zongezwe kwiJavascript kwaye wonke umntu unokuphefumula lula ixesha elithile.
Kwaze kwafika isihogo sePromice ... andiyazi ukuba imboni ye-front-end ilawula njani, kodwa bahlala beziqhubela kwihlathi elingaqhelekanga. Sakwazi kananjalo ukwenza isihogo ngezithembiso. Emva koko siyisombulule le ngxaki ngokongeza i-primitive entsha-i-async/await:
Ingxaki nge-asynchrony isonjululwe. I-Async / ukulinda yinto yokuqala eyaziwayo kwiilwimi ezahlukeneyo. I-Python kunye nabanye banayo le ndlela-ilungile. Ingxaki isonjululwe.
Yeyiphi ingxaki engasonjululwanga? Ukukhula okuntsokothileyo kwezicwangciso-nkqubo, ukuntsonkotha kwe-ikhosistim kunye neenkqubo ngokwazo.
- Isivakalisi seJavascript siyinto engaqhelekanga. Sonke siyazazi iingxaki ngokongeza uluhlu kunye nento kunye nezinye iziqhulo.
- I-Javascript yi-multi-paradigm. Le yinkqubo ecinezela ngokukodwa ngoku xa i-ecosystem inkulu kakhulu:
- wonke umntu ubhala ngeendlela ezahlukeneyo - abanye babhala ngokwesakhiwo, abanye babhala ngokusebenzayo, abaphuhlisi abahlukeneyo babhala ngeendlela ezahlukeneyo;
- ukusuka kwiipakethe ezahlukeneyo, iiparadigms ezahlukeneyo xa usebenzisa iipakethe ezahlukeneyo;
- kukho "ukuzonwabisa" okuninzi kunye neprogram esebenzayo kwiJavasript - ilayibrari ye-rambda yabonakala kwaye ngoku akukho mntu unokufunda iinkqubo ezibhalwe kule thala leencwadi.
- Konke oku kwenza impembelelo enkulu kwi-ecosystem, kwaye ikhule ngokumangalisayo. Iiphakheji azihambelani kunye: ezinye zisekelwe kwizithembiso, ezinye zisekelwe kwi-async / zilindele, ezinye zisekelwe kwi-callbacks. Bakwabhala kwiiparadigms ezahlukeneyo!
- Oku kwenza ukuba iprojekthi ibenzima ukuyigcina. Kunzima ukufumana ibug ukuba awukwazi ukufunda ikhowudi.
Yintoni iNdibano yeWebhu?
Abafana abanesibindi beMozilla Foundation kunye nenani lezinye iinkampani beza nento efana neNdibano yeWebhu. Yintoni lento?
- Lo ngumatshini onenyani owakhelwe kwisikhangeli esixhasa ifomati yokubini.
- Iinkqubo zeBinary zifika apho kwaye ziqhutywa phantse ngokwemveli, oko kukuthi, isikhangeli asidingi kuhlaziya zonke "ii-noodle" zekhowudi ye-javascript ngalo lonke ixesha.
- Zonke iibhrawuza zibhengeze inkxaso.
- Kuba le bytecode, ungabhala umqokeleli walo naluphi na ulwimi.
- Iiphequluli ezine eziphambili sele zithunyelwa ngenkxaso yeNdibano yeWebhu.
- Silindele inkxaso yemveli kwi-Go kamsinya. Olu lwakhiwo lutsha sele longeziwe: GOARCH=wasm GOOS=js (kungekudala). Ukuza kuthi ga ngoku, njengoko ndiyiqonda, ayisebenzi, kodwa kukho inkcazo yokuba ngokuqinisekileyo iya kuba kwi-Go.
Kufuneka wenze ntoni ngoku? GopherJS
Nangona singenayo inkxaso kwiNdibano yeWebhu, kukho i-transpiler efana neGopherJS.
- Ikhowudi yokuya ikhutshelwa kwiJavascript "ecocekileyo".
- Isebenza kuzo zonke iiphequluli - akukho mpawu zintsha ezixhaswa kuphela ngabaphequluli banamhlanje (le Vanilla JS, eqhuba nantoni na).
- Kukho inkxaso malunga nayo yonke into i-Go enayo, kuquka i-goroutines kunye namajelo ... yonke into esiyithandayo kwaye siyazi kakhulu.
- Phantse ithala leencwadi eliqhelekileyo lixhaswa, ngaphandle kwezo phakheji zingenangqiqo ukuxhasa kwi-browser: i-syscall, i-net interactions (kukho umxhasi we-net / http, kodwa akukho mncedisi, kwaye umxhasi ulinganiswe nge-XMLHttpRequest). Ngokubanzi, ithala leencwadi eliqhelekileyo liyafumaneka - nantsi ikwibhrawuza, nantsi iGo's stdlib, esiyithandayo.
- Yonke i-ecosystem yephakheji kwi-Go, zonke izisombululo zomntu wesithathu (i-templateng, njl.) inokuqulunqwa kusetyenziswa i-GopherJS kwaye iqhutywe kwisiphequluli.
I-GopherJS kulula kakhulu ukuyifumana - yiphakheji nje yeGophe eqhelekileyo. Siye safumana, kwaye sinomyalelo weGopherJS wokwakha isicelo:
Eli lilizwe elincinci molo...
...Inkqubo yokuHamba rhoqo, iphakheji eqhelekileyo yelayibrari yefmt kunye ne-Binding Js ukufikelela kwisikhangeli se-API. I-Println ekugqibeleni iya kuguqulwa ibe yi-console log kwaye isikhangeli siya kubhala "Molo gophers"! Ilula ngolo hlobo: senza iGopherJS ukwakha - siyisungula kwibhrawuza - yonke into iyasebenza!
Yintoni onayo ngeli xesha? Izibophelelo
Kukho izibophelelo kuzo zonke izikhokelo ze-js ezidumileyo:
- JQuery;
- Angular.js;
- ii-D3.js zokucwangcisa nokusebenza ngedatha enkulu;
- React.js;
- VueJS;
- kukho nenkxaso ye-Electron (oko kukuthi, singakwazi ukubhala izicelo zedesktop kwi-Electron);
- kwaye eyona nto ihlekisayo yiWebGL (sinokwenza izicelo ezigcweleyo, kuquka imidlalo enemifanekiso ye-3D, umculo kunye nazo zonke izinto ezilungileyo);
- kunye nezinye izibophelelo kuzo zonke izikhokelo zejavascript ezidumileyo kunye namathala eencwadi.
Isikhokelo
- Kukho isakhelo sewebhu esele siphuhliswe ngokukodwa iGopherJS - Vecty. Le yi-analogue epheleleyo ye-React.js, kodwa iphuhliswe kuphela kwi-Go, kunye neenkcukacha ze-GopherJS.
- Kukho iibhegi zemidlalo (isimanga!). Ndifumene ezimbini ezidumileyo:
- Engo;
- Ebeten.
Ndiza kukubonisa imizekelo embalwa yendlela ekhangeleka ngayo kunye nento onokuthi uyibhale kwi-Go:
Okanye olu khetho (andifumananga 3D shooter, kodwa mhlawumbi ikhona):
Ndinikezela ngantoni?
Ngoku umzi-mveliso ongaphambili ukwimeko yokuba zonke iilwimi ezazikhala kwiJavascript ziya kungxamela apho. Ngoku yonke into iya kuhlanganiswa ibe yi "Web Assemblies". Yintoni esiyifunayo ukuze sithathe indawo yethu efanelekileyo apho njengeGophers?
UGo uye wathatha ngokwesiko ukuba lulwimi lwenkqubo yeNkqubo, kwaye akukho mathala eencwadi okusebenza nge-UI. Kukho into, kodwa ishiywe ngesiqingatha, ayisebenzi.
Kwaye ngoku lithuba elihle lokwenza iilayibrari ze-UI kwi-Go eziya kusebenza kwi-GopherJS! Ekugqibeleni ungabhala esakho isakhelo! Eli lixesha apho ungabhala isakhelo, kwaye iya kuba yenye yokuqala kwaye ufumane ukwamkelwa kwangethuba, kwaye uya kuba yinkwenkwezi (ukuba sisikhokelo esihle).
Unokuziqhelanisa neepakethe ezininzi ezahlukeneyo esele zikwi-Go ecosystem kwiinkcukacha zesikhangeli (umzekelo, i-Template injini). Ziya kusebenza kakade, unokwenza izibophelelo ezifanelekileyo ukwenzela ukuba unikeze umxholo ngokuthe ngqo kwisikhangeli. Ngaphezu koko, unokwenza, umzekelo, inkonzo enokuthi inike into efanayo kumncedisi nakwisiphelo sangaphambili, usebenzisa ikhowudi efanayo - yonke into eyenziwa ngabaphuhlisi bangaphambili (kuphela ngoku kwi-Go).
Ungabhala umdlalo! Nje ukonwabelaβ¦
Nantso kuphela into ebendifuna ukuyithetha.
Imibuzo yakho
Umbuzo (apha ekubhekiselwa kuwo njengoMbuzo): β Ngaba ndibhala ngo-Go okanye kwiiJs?
AG: - Ubhala iinkqubo, iziteshi, izakhiwo, ukufakela - yonke into kwi-Go ... Ubhalisela umcimbi, udlulise umsebenzi apho.
KWI: - Ke ndibhala "ze" Js?
AG: - Hayi, ubhala ngokungathi ku-Go kwaye uqhagamshele kwi-API yesikhangeli (i-API ayitshintshanga). Ungabhala izibophelelo zakho ukuze imiyalezo ithunyelwe kwitshaneli - akukho nzima.
KWI: β Kuthekani ngeselula?
AG: -Ndibonile ngokuqinisekileyo: kukho izibophelelo zepatch yeCordova eqhutywa nguJs. KwiReact Native - andazi; mhlawumbi kukho, mhlawumbi akunjalo (ndandingenamdla ngakumbi). Injini yomdlalo we-N-go ixhasa zombini usetyenziso lweselula - zombini i-iOS kunye ne-Android.
KWI: -Umbuzo malunga neNdibano yeWebhu. Indawo eninzi ithathwa phezulu, nangona ukunyanzeliswa kunye ne "zipping" ... Ngaba asiyi kubulala umhlaba ongaphambili ngale ndlela ngakumbi?
AG: β INdibano yeWebhu yifomati yokubini, kwaye ibhinari ngokungagqibekanga ayinakuba kukhupho lokugqibela ngaphezu kokubhaliweyo... Utsalwa kwixesha lokuqhuba, kodwa oku kuyafana nokutsala ngaphandle kwelayibrari yeJavascript esemgangathweni xa ingekho, ngoko ke thina sebenzisa iLodash ethile. Andazi ukuba iLodash ithatha malini.
KWI: -Ngokucacileyo ingaphantsi kunexesha lokusebenza ...
AG: -KwiJavascript "ecocekileyo"?
KWI: - Ewe. Siyicinezela phambi kokuba siyithumele...
AG: - Kodwa lo mbhalo ... Ngokuqhelekileyo, i-megabyte ibonakala ngathi ininzi, kodwa yiyo yonke (unalo lonke ixesha lokugijima). Emva koko, ubhala ingqiqo yeshishini lakho, eliya kwandisa ibhinary yakho nge-1%. Ukuza kuthi ga ngoku andiyiboni le nto ibulala umphambili. Ngaphezu koko, iNdibano yeWebhu iya kusebenza ngokukhawuleza kuneJavascript ngesizathu esicacileyo-akufuneki ukuba ihlaziywe.
KWI: - Oku kuseyingongoma ephikisanayo ... Akukabikho naluphi na ukuphunyezwa kwereferensi "Vasma" (iNdibano yeWebhu) ukuze umntu agwebe ngokungathandabuzekiyo. Ngokombono, ewe: sonke siyaqonda ukuba i-binary kufuneka ikhawuleze, kodwa ukuphunyezwa kwangoku kwe-V8 efanayo kusebenza kakuhle.
AG: - Ewe.
KWI: -Ukuhlanganisa apho kusebenza kupholile kakhulu kwaye akuyonyani ukuba kuya kubakho inzuzo enkulu.
AG: -INdibano yeWebhu nayo yenziwe ngabafana abakhulu.
KWI: - Kubonakala kum ukuba kusenzima ukugweba iNdibano yeWebhu. Sekuyiminyaka emininzi ngoku kukho iincoko, kodwa zimbalwa izinto eziphunyeziweyo ezinokuvakala.
AG: - Ingayiyo. Sobona.
KWI: - Asinayo iingxaki kwi-backend ... Mhlawumbi sifanele sishiye ezi ngxaki kwi-frontend? Kutheni uye apho?
AG: β Kufuneka sigcine abasebenzi bangaphambili.
Ezinye iintengiso π
Enkosi ngokuhlala nathi. Ngaba uyawathanda amanqaku ethu? Ngaba ufuna ukubona umxholo onomdla ngakumbi? Sixhase ngokufaka iodolo okanye ngokucebisa abahlobo,
Dell R730xd 2x ngexabiso eliphantsi kwiziko ledatha le-Equinix Tier IV eAmsterdam? Kuphela apha
umthombo: www.habr.com