Alexey Grachev: Nenda mbele

Mkutano wa Kyiv Go Mei 2018:

Alexey Grachev: Nenda mbele

Anayeongoza: - Salaam wote! Asante kwa kuwa hapa! Leo tuna wasemaji wawili rasmi - Lyosha na Vanya. Kutakuwa na mbili zaidi ikiwa tutakuwa na wakati wa kutosha. Mzungumzaji wa kwanza ni Alexey Grachev, atatuambia kuhusu GopherJS.

Alexey Grachev (baadaye - AG): - Mimi ni msanidi wa Go, na ninaandika huduma za wavuti katika Go. Wakati mwingine unapaswa kukabiliana na frontend, wakati mwingine unapaswa kuingia ndani yake kwa manually. Ninataka kuzungumza juu ya uzoefu wangu na utafiti katika Go on the frontend.

Hadithi ni hii: kwanza tutazungumzia kwa nini tunataka kukimbia Nenda kwenye mstari wa mbele, kisha tutazungumzia jinsi hii inaweza kufanywa. Kuna njia mbili - Mkutano wa Wavuti na GopherJS. Wacha tuone hali ya suluhisho hizi ni nini na nini kinaweza kufanywa.

Kuna nini kibaya na sehemu ya mbele?

Je! kila mtu anakubali kuwa kila kitu kiko sawa na sehemu ya mbele?

Alexey Grachev: Nenda mbele

Je, hakuna vipimo vya kutosha? Jengo la polepole? Mfumo wa ikolojia? Sawa.

Kuhusu sehemu ya mbele, napenda nukuu ambayo mmoja wa watengenezaji wa mstari wa mbele alisema katika kitabu chake:

Alexey Grachev: Nenda mbele

Javascript haina mfumo wa aina. Sasa nitataja matatizo ambayo nilikumbana nayo katika kazi yangu na kueleza jinsi yanavyotatuliwa.

Mfumo wa aina kwa ujumla hauwezi kuitwa mfumo wa aina katika Javasript - kuna mistari inayoonyesha aina ya kitu, lakini kwa kweli hii haina uhusiano wowote na aina. Tatizo hili linatatuliwa katika TypeScript (nyongeza kwa Javasript) na Flow (kikagua cha aina tuli katika Javascript). Kweli, sehemu ya mbele tayari imefikia hatua ya kutatua tatizo la mfumo mbaya wa aina katika Javascript.

Alexey Grachev: Nenda mbele

Hakuna maktaba ya kawaida kwenye kivinjari kama vile - kuna vitu vilivyojengwa ndani na kazi za "uchawi" kwenye vivinjari. Lakini katika Javascript hakuna maktaba ya kawaida kama hiyo. Tatizo hili lilikuwa tayari kutatuliwa mara moja na jQuery (kila mtu alitumia jQuery na prototypes zote, wasaidizi, kazi ambazo zilihitajika kufanya kazi). Sasa kila mtu anatumia Lodash:

Alexey Grachev: Nenda mbele

Callback kuzimu. Nadhani kila mtu aliona msimbo wa Javascript takriban miaka 5 iliyopita, na ilionekana kama "tambi" ya ugumu wa ajabu wa kupiga simu. Sasa tatizo hili limetatuliwa (kwa kutolewa kwa ES-15 au ES-16), ahadi zimeongezwa kwa Javascript na kila mtu anaweza kupumua rahisi kwa muda.

Alexey Grachev: Nenda mbele

Hadi kuzimu ya Promice ilipofika ... sijui jinsi tasnia ya mbele inasimamia, lakini kila wakati wanajiendesha kwenye msitu wa ajabu. Pia tuliweza kufanya kuzimu kwa ahadi. Kisha tukatatua tatizo hili kwa kuongeza primitive - async/ait:

Alexey Grachev: Nenda mbele

Tatizo la asynchrony linatatuliwa. Async/ait ni neno la asili maarufu katika lugha mbalimbali. Python na wengine wana njia hii - ni nzuri kabisa. Tatizo limetatuliwa.

Tatizo gani halijatatuliwa? Utata unaoongezeka kwa kasi wa mifumo, utata wa mfumo ikolojia na programu zenyewe.

Alexey Grachev: Nenda mbele

  • Syntax ya Javascript ni ya kushangaza kidogo. Sote tunajua shida za kuongeza safu na kitu na vicheshi vingine.
  • Javascript ni multi-paradigm. Huu ni mfumo unaoshinikiza sana sasa wakati mfumo ikolojia ni mkubwa sana:
    • kila mtu anaandika kwa mitindo tofauti - wengine huandika kimuundo, wengine huandika kwa kazi, watengenezaji tofauti huandika kwa njia tofauti;
    • kutoka kwa vifurushi tofauti, dhana tofauti wakati unatumia vifurushi tofauti;
    • kuna "furaha" nyingi na programu ya kufanya kazi katika Javasript - maktaba ya rambda ilionekana na sasa hakuna mtu anayeweza kusoma programu zilizoandikwa kwenye maktaba hii.

  • Yote hii ina athari kubwa kwa mfumo wa ikolojia, na imekua sana. Vifurushi haviendani na kila mmoja: zingine zinatokana na ahadi, zingine zinatokana na usawazishaji/kungoja, zingine zinategemea kurudi nyuma. Pia wanaandika kwa dhana tofauti!
  • Hii inafanya mradi kuwa mgumu kudumisha. Ni vigumu kupata hitilafu ikiwa huwezi kusoma msimbo.

Mkutano wa Wavuti ni nini?

Vijana jasiri kutoka Wakfu wa Mozilla na idadi ya makampuni mengine walikuja na kitu kama Mkutano wa Wavuti. Hii ni nini?

Alexey Grachev: Nenda mbele

  • Hii ni mashine pepe iliyojengwa ndani ya kivinjari inayoauni umbizo la binary.
  • Programu za binary hufika hapo na hutekelezwa kwa kiasi kikubwa, yaani, kivinjari hakihitaji kuchanganua "noodles" zote za msimbo wa javascript kila wakati.
  • Vivinjari vyote vimetangaza msaada.
  • Kwa kuwa hii ni bytecode, unaweza kuandika mkusanyaji wa lugha yoyote.
  • Vivinjari vinne vikuu tayari vinasafirishwa kwa usaidizi wa Mkutano wa Wavuti.
  • Tunatarajia usaidizi wa asili katika Go hivi karibuni. Usanifu huu mpya tayari umeongezwa: GOARCH=wasm GOOS=js (hivi karibuni). Kufikia sasa, kama ninavyoelewa, haifanyi kazi, lakini kuna taarifa kwamba hakika itakuwa katika Go.

Nini cha kufanya sasa? GopherJS

Ingawa hatuna msaada kwa Mkutano wa Wavuti, kuna kibadilishaji kama GopherJS.

Alexey Grachev: Nenda mbele

  • Go code ni transpiled katika "safi" Javascript.
  • Inaendesha katika vivinjari vyote - hakuna vipengele vipya ambavyo vinasaidiwa tu na vivinjari vya kisasa (hii ni Vanilla JS, ambayo inaendesha chochote).
  • Kuna usaidizi kwa karibu kila kitu ambacho Go inacho, ikiwa ni pamoja na wapenda michezo na vituo... kila kitu tunachopenda na kujua sana.
  • Takriban maktaba yote ya kawaida yanaungwa mkono, isipokuwa kwa vifurushi hivyo ambavyo haina mantiki kuunga mkono kwenye kivinjari: syscall, mwingiliano wavu (kuna mteja wavu/http, lakini hakuna seva, na mteja anaigwa kupitia XMLHttpRequest). Kwa ujumla, maktaba yote ya kawaida inapatikana - hapa iko kwenye kivinjari, hapa kuna Go's stdlib, ambayo tunapenda.
  • Mfumo mzima wa kifurushi katika Go, suluhu zote za wahusika wengine (kuiga, n.k.) zinaweza kukusanywa kwa kutumia GopherJS na kuendeshwa kwenye kivinjari.

GopherJS ni rahisi sana kupata - ni kifurushi cha kawaida cha Go. Tunaenda kupata, na tunayo amri ya GopherJS ya kuunda programu:

Alexey Grachev: Nenda mbele

Huu ni ulimwengu mdogo sana wa salamu ...

Alexey Grachev: Nenda mbele

...Programu ya Go kawaida, kifurushi cha kawaida cha fmt cha maktaba na Binding Js kufikia API ya kivinjari. Println hatimaye itabadilishwa kuwa logi ya kiweko na kivinjari kitaandika "Hello gophers"! Ni rahisi hivyo: tunatengeneza GopherJS - tunaizindua kwenye kivinjari - kila kitu hufanya kazi!

Una nini kwa sasa? Vifungo

Alexey Grachev: Nenda mbele

Kuna vifungo kwa mifumo yote maarufu ya js:

  • JQuery;
  • Angular.js;
  • D3.js kwa kupanga na kufanya kazi na data kubwa;
  • React.js;
  • VueJS;
  • kuna msaada hata kwa Electron (yaani, tunaweza tayari kuandika programu za kompyuta kwenye Electron);
  • na jambo la kuchekesha zaidi ni WebGL (tunaweza kutengeneza programu-tumizi zenye mchoro kamili, ikijumuisha michezo yenye michoro ya 3D, muziki na mambo yote mazuri);
  • na vifungo vingine vingi kwa mifumo na maktaba zote maarufu za javascript.

Mfumo

  1. Kuna mfumo wa wavuti ambao tayari umetengenezwa mahususi kwa GopherJS - Vecty. Hii ni analogi kamili ya React.js, lakini imetengenezwa katika Go, kwa maelezo mahususi ya GopherJS.
  2. Kuna mifuko ya mchezo (mshangao!). Nilipata mbili maarufu zaidi:
    • Engo;
    • Ebeten.

Nitakuonyesha mifano michache ya jinsi inavyoonekana na kile ambacho unaweza tayari kuandika katika Go:

Alexey Grachev: Nenda mbele

Au chaguo hili (sikuweza kupata mpiga risasi wa 3D, lakini labda iko):

Alexey Grachev: Nenda mbele

Ninatoa nini?

Sasa tasnia ya mwisho iko katika hali ambayo lugha zote ambazo hapo awali zililia kutoka kwa Javascript zitakimbilia huko. Sasa kila kitu kitakusanywa katika "Mikutano ya Wavuti". Je, tunahitaji nini ili tuchukue nafasi yetu inayostahili pale kama Gophers?

Alexey Grachev: Nenda mbele

Go imechukua jadi kuwa ni lugha ya programu ya Mfumo, na kwa kweli hakuna maktaba za kufanya kazi na UI. Kuna kitu, lakini kimeachwa nusu, nusu hakifanyi kazi.

Na sasa ni fursa nzuri ya kutengeneza maktaba za UI katika Go ambazo zitatumika kwenye GopherJS! Hatimaye unaweza kuandika mfumo wako mwenyewe! Huu ndio wakati ambapo unaweza kuandika mfumo, na itakuwa moja ya kwanza na kupata kupitishwa mapema, na utakuwa nyota (ikiwa ni mfumo mzuri).

Unaweza kurekebisha vifurushi vingi tofauti ambavyo tayari viko kwenye mfumo ikolojia wa Go kwa maalum ya kivinjari (kwa mfano, injini ya Kiolezo). Tayari watafanya kazi, unaweza kufanya vifungo vinavyofaa ili uweze kutoa maudhui kwa urahisi moja kwa moja kwenye kivinjari. Zaidi ya hayo, unaweza kutengeneza, kwa mfano, huduma ambayo inaweza kutoa kitu kimoja kwenye seva na kwenye mwisho wa mbele, kwa kutumia msimbo sawa - kila kitu ambacho watengenezaji wa mbele wanapenda (sasa tu kwenye Go).

Unaweza kuandika mchezo! Kwa kujifurahisha tu...

Hiyo ndiyo yote nilitaka kusema.

Alexey Grachev: Nenda mbele

maswali

Swali (hapa linajulikana kama Q): - Je, ninaandika kwa Go au Js?

AG: - Unaandika taratibu, idhaa, miundo, upachikaji - kila kitu kwenye Go... Unajiandikisha kwa tukio, kupitisha utendaji huko.

Katika: - Kwa hivyo ninaandika kwa "uchi" Js?

AG: - Hapana, unaandika kana kwamba kwenye Go na unganishe kwa API ya kivinjari (API haijabadilika). Unaweza kuandika vifungo vyako mwenyewe ili ujumbe utumwe kwa kituo - sio ngumu.

Katika: - Vipi kuhusu simu?

AG: - Hakika niliona: kuna vifungo vya kiraka cha Cordova ambacho Js anaendesha. Katika Asili React - sijui; labda kuna, labda si (sikuwa na nia hasa). Injini ya mchezo wa N-go inaauni programu zote za simu - iOS na Android.

Katika: - Swali kuhusu Mkutano wa Wavuti. Nafasi zaidi na zaidi inachukuliwa, licha ya kukandamizwa na "zipping" ... Je, hatutaua ulimwengu wa mbele kwa njia hii hata zaidi?

AG: – Kusanyiko la Wavuti ni umbizo la jozi, na mfumo wa jozi kwa chaguomsingi hauwezi kuwa katika toleo la mwisho zaidi ya maandishi... Unavutiwa na wakati wa utekelezaji, lakini hii ni sawa na kuvuta maktaba ya kawaida ya Javascript wakati haipo, kwa hivyo tumia Lodash. Sijui Lodash inachukua kiasi gani.

Katika: - Ni wazi chini ya wakati wa kukimbia ...

AG: - Katika Javascript "safi"?

Katika: - Ndiyo. Tunaibana kabla ya kuituma...

AG: - Lakini hii ni maandishi ... Kwa ujumla, megabyte inaonekana kuwa mengi, lakini ndiyo yote (una muda wote wa kukimbia). Ifuatayo, unaandika mantiki yako ya biashara, ambayo itaongeza binary yako kwa 1%. Hadi sasa sioni hii inaua frontend. Kwa kuongezea, Mkutano wa Wavuti utafanya kazi haraka kuliko Javascript kwa sababu dhahiri - hauitaji kuchanganuliwa.

Katika: - Hii bado ni hatua ya utata ... Bado hakuna utekelezaji wowote wa kumbukumbu ya "Vasma" (Mkutano wa Mtandao) ili mtu ahukumu bila shaka. Kwa kweli, ndio: sote tunaelewa kuwa binary inapaswa kuwa haraka, lakini utekelezaji wa sasa wa V8 sawa ni mzuri sana.

AG: - Ndiyo.

Katika: - Mkusanyiko huko hufanya kazi vizuri sana na sio ukweli kwamba kutakuwa na faida kubwa.

AG: - Mkutano wa Wavuti pia hufanywa na watu wakubwa.

Katika: - Inaonekana kwangu kuwa bado ni ngumu kuhukumu Mkutano wa Wavuti. Kumekuwa na mazungumzo kwa miaka mingi sasa, lakini kuna mafanikio machache ya kweli ambayo yanaweza kuhisiwa.

AG: - Labda. Tutaona.

Katika: - Hatuna matatizo kwenye backend ... Labda tunapaswa kuacha matatizo haya kwenye frontend? Kwa nini kwenda huko?

AG: - Tunapaswa kuweka wafanyikazi wa mstari wa mbele.

Baadhi ya matangazo πŸ™‚

Asante kwa kukaa nasi. Je, unapenda makala zetu? Je, ungependa kuona maudhui ya kuvutia zaidi? Tuunge mkono kwa kuweka agizo au kupendekeza kwa marafiki, VPS ya wingu kwa watengenezaji kutoka $4.99, analogi ya kipekee ya seva za kiwango cha kuingia, ambayo ilivumbuliwa na sisi kwa ajili yako: Ukweli wote kuhusu VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps kutoka $19 au jinsi ya kushiriki seva? (inapatikana kwa RAID1 na RAID10, hadi cores 24 na hadi 40GB DDR4).

Dell R730xd 2x nafuu katika kituo cha data cha Equinix Tier IV huko Amsterdam? Hapa tu 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV kutoka $199 nchini Uholanzi! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - kutoka $99! Soma kuhusu Jinsi ya kujenga miundombinu ya Corp. darasa na matumizi ya seva za Dell R730xd E5-2650 v4 zenye thamani ya euro 9000 kwa senti?

Chanzo: mapenzi.com

Kuongeza maoni