Alexey Grachev: Biçe pêşiya

Hevdîtina Kyiv Go Gulan 2018:

Alexey Grachev: Biçe pêşiya

Lead: - Silav hemû! Spas ji bo ku hûn li vir in! Îro du axaftvanên me yên fermî hene - Lyosha û Vanya. Ger wextê me têr hebe dê du kesên din jî hebin. Axaftvanê yekem Alexey Grachev e, ew ê ji me re behsa GopherJS bike.

Alexey Grachev (li vir - AG): - Ez pêşdebirek Go me, û ez karûbarên malperê li Go dinivîsim. Carinan divê hûn bi pêşiyê re mijûl bibin, carinan jî divê hûn bi destan têkevin nav wê. Ez dixwazim li ser serpêhatî û lêkolîna xwe ya li ser Go li pêşiyê biaxivim.

Efsane ev e: pêşî em ê biaxivin ka çima em dixwazin Go li pêşiyê bimeşînin, dûv re em ê biaxivin ka ev çawa dikare were kirin. Du rê hene - Meclîsa Web û GopherJS. Ka em binêrin rewşa van çareseriyan çawa ye û çi dikare were kirin.

Çi li pêşiyê heye?

Ma her kes qebûl dike ku her tişt bi pêşiyê re baş e?

Alexey Grachev: Biçe pêşiya

Ma ceribandinên têr nakin? Avakirina hêdî? Ekosîstem? Baş.

Di derbarê pêşangehê de, ez ji gotina ku yek ji pêşdebirên pêşîn di pirtûka xwe de gotî hez dikim:

Alexey Grachev: Biçe pêşiya

Javascript pergala tîpan nîne. Naha ez ê pirsgirêkên ku di xebata xwe de rastî wan hatim bi nav bikim û rave bikim ka ew çawa têne çareser kirin.

Pergala celebê bi gelemperî di Javasript-ê de bi zor dikare wekî pergala celebê were gotin - rêz hene ku celebê tiştê destnîşan dikin, lê bi rastî ev yek bi celeban re tune ye. Ev pirsgirêk di TypeScript (pêvekek Javasript) û Flow (kontrolkerek tîpa statîk di Javascript de) tê çareser kirin. Bi rastî, pêşangeh jixwe gihîştiye xala çareserkirina pirsgirêka pergala celebek xirab a Javascript.

Alexey Grachev: Biçe pêşiya

Di gerokê de pirtûkxaneyek standard tune - di gerokan de hin tiştên çêkirî û fonksiyonên "efsûnî" hene. Lê di Javascript de pirtûkxaneyek standard bi vî rengî tune. Ev pirsgirêk berê ji hêla jQuery ve hate çareser kirin (her kes jQuery bi hemî prototîp, arîkar, fonksiyonên ku ji bo xebatê hewce bûn bikar anîn). Naha her kes Lodash bikar tîne:

Alexey Grachev: Biçe pêşiya

Callback dojehê. Ez difikirim ku her kesî 5 sal berê koda Javascript dît, û ew mîna "noodle" ya tevliheviya bêbawer a bangewaziyê xuya bû. Naha ev pirsgirêk çareser bûye (bi berdana ES-15 an ES-16), soz li Javascriptê hatine zêdekirin û her kes dikare ji bo demekê hêsantir nefesê bigire.

Alexey Grachev: Biçe pêşiya

Heya ku Promise dojeh hat... Ez nizanim ka pîşesaziya pêşîn çawa birêve dibe, lê ew her gav xwe diavêjin daristanek xerîb. Me jî li ser sozên xwe kir dojeh. Dûv re me ev pirsgirêk bi lêzêdekirina primitiveek nû - async/wait çareser kir:

Alexey Grachev: Biçe pêşiya

Pirsgirêka asynkroniyê çareser dibe. Async/wait di zimanên cihêreng de seretayîyek pir populer e. Python û yên din xwedî vê nêzîkbûnê ne - ew pir baş e. Kêşe hat çareserkirin.

Çi pirsgirêk nayê çareser kirin? Tevliheviya qat bi qat zêdekirina çarçoweyan, tevliheviya ekosîstema û bernameyan bixwe.

Alexey Grachev: Biçe pêşiya

  • Hevoksaziya Javascript hinekî xerîb e. Em hemî pirsgirêkên bi lêzêdekirina array û tiştek û henekên din dizanin.
  • Javascript pir-paradîgma ye. Dema ku ekosîstema pir mezin e ev pergalek bi taybetî zext e:
    • her kes bi şêwazên cihê dinivîse - hin bi strukturî dinivîsin, hin bi fonksîyonî dinivîsin, pêşdebirên cûda cûda dinivîsin;
    • ji pakêtên cuda, paradîgmayên cuda dema ku hûn pakêtên cuda bikar tînin;
    • di Javasript de bi bernameya fonksiyonel re gelek "kêf" heye - pirtûkxaneya rambda xuya bû û naha kes nikare bernameyên ku li vê pirtûkxaneyê hatine nivîsandin bixwîne.

  • Hemî ev bandorek mezin li ser ekosîstemê dike, û ew pir mezin bûye. Pakêt bi hevûdu re ne lihevhatî ne: hin li ser bingeha sozê ne, hin li ser async/bendewariyê, hin jî li ser bingeha vegerê ne. Ew jî di paradîgmayên cuda de dinivîsin!
  • Ev yek parastina projeyê zehmet dike. Zehmet e ku meriv xeletiyek bibîne heke hûn nikaribin kodê bixwînin.

Meclîsa Webê çi ye?

Xortên wêrek ên Weqfa Mozilla û hejmarek pargîdaniyên din tiştek wekî Meclîsa Webê derketin. Eve çîye?

Alexey Grachev: Biçe pêşiya

  • Ev makîneyek virtual e ku di gerokê de hatî çêkirin ku formata binary piştgirî dike.
  • Bernameyên binary digihîjin wir û hema hema xwemalî têne darve kirin, ango gerok ne hewce ye ku her carê hemî "noodles" kodên javascript parsek bike.
  • Hemî gerokan piştgirî ragihandine.
  • Ji ber ku ev bytecode ye, hûn dikarin ji bo her zimanî berhevkarek binivîsin.
  • Çar gerokên sereke berê bi piştgiriya Meclîsa Webê têne şandin.
  • Em li bendê ne ku di demek nêzîk de li Go piştgirîya xwemalî bikin. Ev mîmariya nû jixwe hatiye zêdekirin: GOARCH=wasm GOOS=js (zûkî). Heya nuha, wekî ku ez jê fam dikim, ew ne fonksiyonel e, lê daxuyaniyek heye ku ew ê bê guman di Go de be.

Niha çi bikin? GopherJS

Dema ku me ji Meclîsa Webê re piştgirî tune, transpilerek mîna GopherJS heye.

Alexey Grachev: Biçe pêşiya

  • Koda Go di Javascript-a "paqij" de tê veguheztin.
  • Di hemî gerokan de dimeşe - taybetmendiyên nû tune ku tenê ji hêla gerokên nûjen ve têne piştgirî kirin (ev Vanilla JS e, ku li ser her tiştî dimeşe).
  • Hema hema ji bo her tiştê ku Go heye piştgirî heye, tevî goroutine û kanalan... her tiştê ku em pir jê hez dikin û dizanin.
  • Hema hema tevahiya pirtûkxaneya standard tê piştgirî kirin, ji bilî wan pakêtan ku piştgirîkirina wan di gerokê de bê wate ye: syscall, danûstendinên net (muşterek net/http heye, lê server tune, û xerîdar bi XMLHttpRequest ve tê emilandin). Bi gelemperî, tevahiya pirtûkxaneya standard heye - li vir ew di gerokê de ye, li vir stdlib-a Go-yê ye, ku em jê hez dikin.
  • Tevahiya ekosîstema pakêtê ya li Go, hemî çareseriyên sêyemîn (şablon, hwd.) dikare bi karanîna GopherJS were berhev kirin û di gerokê de were xebitandin.

GopherJS pir hêsan e ku meriv bigire - ew tenê pakêtek Go-ya birêkûpêk e. Em diçin, û emrêkek GopherJS heye ku serîlêdanê ava bike:

Alexey Grachev: Biçe pêşiya

Ev cîhanek silavek piçûk e ...

Alexey Grachev: Biçe pêşiya

...Bernameyek Go birêkûpêk, pakêtek fmt ya pirtûkxaneyê ya standard û Binding Js ku bigihîje API-ya gerokê. Println dê di dawiyê de bibe têketina konsolê û gerok dê "Hello gophers" binivîse! Ew qas hêsan e: em avakirina GopherJS-ê dikin - em wê di gerokê de dest pê dikin - her tişt dixebite!

Di vê demê de çi heye? Bindings

Alexey Grachev: Biçe pêşiya

Ji bo hemî çarçoveyên js yên populer girêdan hene:

  • JQuery;
  • Angular.js;
  • D3.js ji bo plankirin û xebata bi daneyên mezin;
  • React.js;
  • VueJS;
  • tewra piştgirî ji bo Electron heye (ango, em jixwe dikarin serîlêdanên sermaseyê li ser Electron binivîsin);
  • û ya herî xweş WebGL ye (em dikarin serîlêdanên tam-grafîkî, tevî lîstikên bi grafikên 3D, muzîk û hemî xweşiyê jî tê de çêbikin);
  • û gelek girêdanên din ên hemî çarçove û pirtûkxaneyên javascript-ê yên populer.

Framework

  1. Çarçoveyek malperê heye ku berê bi taybetî ji bo GopherJS - Vecty hatî pêşve xistin. Ev analogek bêkêmasî ya React.js e, lê tenê li Go, bi taybetmendiyên GopherJS ve hatî pêşve xistin.
  2. Çenteyên lîstikê hene (sûrprîz!). Min du herî populer dîtin:
    • Engo;
    • Ebiten.

Ez ê çend mînakan nîşanî we bidim ka ew çawa xuya dike û hûn dikarin berê di Go de binivîsin:

Alexey Grachev: Biçe pêşiya

An jî ev vebijark (min nekarî fîşekek 3D bibînim, lê dibe ku ew hebe):

Alexey Grachev: Biçe pêşiya

Ez çi pêşkêş dikim?

Naha pîşesaziya pêşîn di rewşek wusa de ye ku hemî zimanên ku berê ji Javascript digirîn dê li wir bilezînin. Naha dê her tişt di "Meclîsên Webê" de were berhev kirin. Ji bo ku em wek Gophers li wir cîhê xwe yê rast bigirin çi hewce ne?

Alexey Grachev: Biçe pêşiya

Go bi kevneşopî texmîn kiriye ku ew zimanek bernamesaziya Pergalê ye, û di pratîkê de pirtûkxane tune ku bi UI re bixebitin. Tiştek heye, lê ew nîv terikandin, nîv ne fonksiyonel e.

Û naha şansek baş e ku meriv pirtûkxaneyên UI-yê li Go-yê ku dê li ser GopherJS-ê bixebite çêbikin! Di dawiyê de hûn dikarin çarçoveya xwe binivîsin! Ev dem e ku hûn dikarin çarçoveyek binivîsin, û ew ê yek ji yekem be û zû were pejirandin, û hûn ê bibin stêrk (heke ew çarçoveyek baş be).

Hûn dikarin gelek pakêtên cihêreng ên ku berê di ekosîstema Go de ne li gorî taybetmendiyên gerokê (mînak, motora Şablon) biguncînin. Ew ê jixwe bixebitin, hûn dikarin girêdanên hêsan çêbikin da ku hûn bi hêsanî naverokê rasterast di gerokê de bidin. Zêdeyî, hûn dikarin, mînakî, karûbarek çêbikin ku dikare heman tiştî li ser serverê û li pêş-endê bi kar bîne, bi karanîna heman kodê - her tiştê ku pêşdebirên pêşîn hez dikin (tenê naha di Go de).

Hûn dikarin lîstikek binivîsin! Tenê ji bo kêfê…

Tiştê ku min dixwest bibêjim ev bû.

Alexey Grachev: Biçe pêşiya

Pirsên

Pirs (li jêrê wekî Q tê binav kirin): – Ez bi Go an Js dinivîsim?

AG: – Hûn rûtîn, kanal, avahî, embedding – her tiştî di Go-yê de dinivîsin... Hûn bibin aboneyê bûyerek, li wir fonksiyonek derbas bikin.

In: – Yanî ez bi Jsên “tazî” dinivîsim?

AG: - Na, hûn mîna ku di Go de dinivîsin û bi API-ya gerokê ve girêdidin (API nehatiye guhertin). Hûn dikarin girêdanên xwe binivîsin da ku peyam ji kanalê re bêne şandin - ne dijwar e.

In: - Çi li ser mobîl?

AG: - Min bê guman dît: ji bo patch Cordova ya ku Js dimeşîne girêdan hene. Di React Native de - ez nizanim; dibe ku hebe, dibe ku ne (ez bi taybetî eleqedar nebûm). Motora lîstika N-go herdu serîlêdanên mobîl piştgirî dike - hem iOS û Android.

In: - Pirs di derbarê Meclîsa Webê de. Her ku diçe zêdetir cîh tê girtin, tevî çewisandin û "zipkirinê"... Ma em ê cîhana pêşîn bi vî rengî hîn bêtir nekujin?

AG: – Meclisa Webê formatek binary e, û binary ji hêla xwerû ve nikare di çapa dawîn de ji nivîsê bêtir be... Hûn ber bi dema xebitandinê ve têne kişandin, lê ev heman tişt e ku gava ku ew li wir nebe pirtûkxaneya standard a Javascriptê bikişîne derve, ji ber vê yekê em hinek Lodash bikar bînin. Ez nizanim Lodash çiqas digire.

In: - Eşkere ye ku ji dema xebitandinê kêmtir ...

AG: - Di Javascriptê ya "paqij" de?

In: - Erê. Berî ku em bişînin, em wê berhev dikin ...

AG: – Lê ev nivîs e... Bi gelemperî, megabyte pir xuya dike, lê ew hemî ye (tevahiya dema xebatê we heye). Dûv re, hûn mantiqa karsaziya xwe binivîsin, ku dê binariya we 1% zêde bike. Heya nuha ez vê kuştina pêşiyê nabînim. Wekî din, Meclîsa Webê ji ber sedemek eşkere dê ji Javascript zûtir bixebite - ne hewce ye ku were pars kirin.

In: – Ev hê jî xaleke nakok e... Hîn jî tu referansa “Vasma” (Meclîsa Malperê) tuneye ku meriv bi awayekî zelal dadbar bike. Bi têgînî, erê: em hemî fam dikin ku binary divê zûtir be, lê pêkanîna heyî ya heman V8 pir bikêr e.

AG: - Erê.

In: - Berhevkirin li wir bi rastî pir xweş dixebite û ne rastiyek e ku dê avantajek mezin hebe.

AG: - Meclîsa Webê jî ji hêla xortên mezin ve tê çêkirin.

In: - Ji min re xuya dike ku hîn jî dijwar e ku meriv Meclîsa Webê dadbar bike. Niha gelek sal in axaftin hene, lê hindik destkeftiyên rastîn hene ku dikarin bêne hîs kirin.

AG: - Belkî. Em ê bibînin.

In: – Pirsgirêkên me li ser piştê nînin... Dibe ku em van pirsgirêkan li pêş bihêlin? Çima here wir?

AG: - Divê em karmendek karkerên pêşîn biparêzin.

Hin reklam 🙂

Spas ji bo ku hûn bi me re bimînin. Ma hûn ji gotarên me hez dikin? Ma hûn dixwazin naveroka balkêştir bibînin? Piştgiriya me bikin bi danîna fermanek an pêşniyarkirina hevalan, ewr VPS ji bo pêşdebiran ji 4.99 $, analogek bêhempa ya pêşkêşkerên asta têketinê, ku ji hêla me ve ji bo we hatî vedîtin: Tevahiya rastiyê di derbarê VPS (KVM) E5-2697 v3 (6 Cores) 10 GB DDR4 480 GB SSD 1Gbps ji 19 $ an çawa serverek parve dike? (bi RAID1 û RAID10, heta 24 core û heya 40 GB DDR4 peyda dibe).

Dell R730xd 2x erzantir li navenda daneya Equinix Tier IV li Amsterdam? Tenê li vir 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ji 199$ li Hollanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ji $99! Li ser bixwînin Meriv çawa pargîdaniya binesaziyê ava dike. pola bi karanîna serverên Dell R730xd E5-2650 v4 bi nirxek 9000 euro ji bo quruşek?

Source: www.habr.com

Add a comment