Alexey Grachev: E hele i mua

Hui ʻo Kyiv Go Mei 2018:

Alexey Grachev: E hele i mua

Ke alakaʻi: - Aloha kākou! Mahalo iā ʻoe no kou noho ʻana ma ʻaneʻi! I kēia lā, loaʻa iā mākou ʻelua mau ʻōlelo kūhelu - ʻo Lyosha a me Vanya. ʻElua hou aʻe inā lawa ka manawa. ʻO Alexey Grachev ka mea haʻi'ōlelo mua, e haʻi mai ʻo ia iā mākou e pili ana iā GopherJS.

Alexey Grachev (ma hope aku - AG): - He mea hoʻomohala Go wau, a kākau wau i nā lawelawe pūnaewele ma Go. I kekahi manawa pono ʻoe e hana me ka frontend, i kekahi manawa pono ʻoe e komo i loko me ka lima. Makemake wau e kamaʻilio e pili ana i kaʻu ʻike a me ka noiʻi ʻana iā Go on the frontend.

ʻO ka moʻolelo kēia: e kamaʻilio mua mākou e pili ana i ke kumu e makemake ai mākou e holo E hele ma ka ʻaoʻao mua, a laila e kamaʻilio mākou e pili ana i ke ʻano o kēia. ʻElua ala - Web Assembly a me GopherJS. E ʻike kākou i ke kūlana o kēia mau hoʻonā a me ka mea hiki ke hana.

He aha ka hewa o ka mua?

Ua ʻae nā mea a pau ua maikaʻi nā mea a pau me ka frontend?

Alexey Grachev: E hele i mua

ʻAʻole lawa nā hoʻokolohua? Hana lohi? kaiaola? Maikaʻi.

E pili ana i ka frontend, makemake wau i ka ʻōlelo a kekahi o nā mea hoʻomohala mua i ʻōlelo ai i kāna puke:

Alexey Grachev: E hele i mua

ʻAʻohe ʻano ʻano ʻōnaehana Javascript. I kēia manawa, e inoa wau i nā pilikia i loaʻa iaʻu i ka wā o kaʻu hana a wehewehe i ke ʻano o ka hoʻoponopono ʻana.

ʻAʻole hiki ke kapa ʻia ka ʻōnaehana ʻano ma ke ʻano he ʻano ʻano ma Javasript - aia nā laina e hōʻike ana i ke ʻano o ka mea, akā ʻoiaʻiʻo, ʻaʻohe pili kēia me nā ʻano. Hoʻoholo ʻia kēia pilikia ma TypeScript (kahi mea hoʻohui iā Javasript) a me Flow (kahi nānā ʻano static-type ma Javascript). ʻOiaʻiʻo, ua hōʻea ka frontend i kahi o ka hoʻoponopono ʻana i ka pilikia o kahi ʻano ʻano ʻano ʻino ma Javascript.

Alexey Grachev: E hele i mua

ʻAʻohe hale waihona puke maʻamau i ka polokalamu kele pūnaewele e like me ia - aia kekahi mau mea i kūkulu ʻia a me nā hana "magic" i nā polokalamu kele. Akā ma Javascript ʻaʻohe hale waihona puke maʻamau e like me ia. Ua hoʻopau mua ʻia kēia pilikia e jQuery (ua hoʻohana nā mea a pau i ka jQuery me nā prototypes, nā mea kōkua, nā hana e pono ai e hana). Ke hoʻohana nei nā mea a pau iā Lodash:

Alexey Grachev: E hele i mua

Callback hell. Manaʻo wau ua ʻike nā mea a pau i ka code Javascript e pili ana i 5 mau makahiki i hala aku nei, a ua like ia me kahi "noodle" o kahi paʻakikī o nā callbacks. I kēia manawa ua hoʻoholo ʻia kēia pilikia (me ka hoʻokuʻu ʻana o ES-15 a i ʻole ES-16), ua hoʻohui ʻia nā ʻōlelo hoʻohiki i Javascript a hiki i nā mea āpau ke hanu maʻalahi no kekahi manawa.

Alexey Grachev: E hele i mua

A hiki i ka Promice hell i hōʻea mai ... ʻAʻole maopopo iaʻu pehea e hoʻokele ai ka ʻoihana mua, akā hoʻokele mau lākou iā lākou iho i loko o kahi ululāʻau ʻē. Ua hiki no hoi ia makou ke hana hewa ma na olelo hoopomaikai. A laila ua hoʻoponopono mākou i kēia pilikia ma ka hoʻohui ʻana i kahi primitive hou - async/wait:

Alexey Grachev: E hele i mua

Hoʻoholo ʻia ka pilikia me ka asynchrony. ʻO Async/wait kahi mea kahiko kaulana i nā ʻōlelo like ʻole. Loaʻa iā Python a me nā mea ʻē aʻe kēia ala - maikaʻi loa. Paʻa ka pilikia.

He aha ka pilikia i hoʻopau ʻole ʻia? Ke piʻi nui nei ka paʻakikī o nā frameworks, ka paʻakikī o ka kaiaola a me nā papahana ponoʻī.

Alexey Grachev: E hele i mua

  • He ʻano ʻē ka syntax Javascript. ʻIke mākou a pau i nā pilikia me ka hoʻohui ʻana i kahi array a me kahi mea a me nā mea hoʻohenehene ʻē aʻe.
  • ʻO Javascript ka multi-paradigm. He ʻōnaehana koʻikoʻi kēia i kēia manawa ke nui loa ka kaiaola:
    • kākau nā kānaka a pau i nā ʻano like ʻole - kākau kekahi ma ke ʻano hana, kākau kekahi ma ke ʻano hana, kākau nā mea hoʻomohala ʻokoʻa ma nā ʻano like ʻole;
    • mai nā pūʻolo like ʻole, nā paradigms ʻokoʻa ke hoʻohana ʻoe i nā pūʻolo like ʻole;
    • he nui ka "leʻaleʻa" me ka hoʻolālā hana ma Javasript - ua ʻike ʻia ka waihona rambda a i kēia manawa ʻaʻole hiki i kekahi ke heluhelu i nā papahana i kākau ʻia ma kēia waihona.

  • He hopena nui kēia a pau i ke kaiaola, a ua ulu nui loa. ʻAʻole kūpono nā pūʻolo me kekahi: ua hoʻokumu ʻia kekahi ma nā ʻōlelo hoʻohiki, ua hoʻokumu ʻia kekahi ma ka async / kali, aia kekahi ma nā callbacks. Kākau pū lākou i nā paradigms like ʻole!
  • Paʻakikī kēia i ka mālama ʻana i ka papahana. He paʻakikī ka loaʻa ʻana o kahi bug inā ʻaʻole hiki iā ʻoe ke heluhelu i ke code.

He aha ka Web Assembly?

ʻO ka poʻe koa mai ka Mozilla Foundation a me nā hui ʻē aʻe i hele mai me kahi mea e like me ka Web Assembly. He aha kēia?

Alexey Grachev: E hele i mua

  • He mīkini virtual kēia i kūkulu ʻia i loko o ka polokalamu kele pūnaewele e kākoʻo ana i ka format binary.
  • Loaʻa nā polokalamu binary i laila a hoʻokō ʻia ma kahi ʻano maoli, ʻo ia hoʻi, ʻaʻole pono ka polokalamu kele e hoʻopau i nā "noodles" āpau o ke code javascript i kēlā me kēia manawa.
  • Ua haʻi aku nā polokalamu kele a pau i ke kākoʻo.
  • No ka mea he bytecode kēia, hiki iā ʻoe ke kākau i mea hoʻopili no kekahi ʻōlelo.
  • ʻEhā mau polokalamu kele pūnaewele nui i hoʻouna ʻia me ke kākoʻo Web Assembly.
  • Manaʻo mākou i ke kākoʻo ʻōiwi ma Go koke. Ua hoʻohui ʻia kēia hale hana hou: GOARCH=wasm GOOS=js (koke koke). I kēia manawa, e like me kaʻu i hoʻomaopopo ai, ʻaʻole ia he hana, akā aia kahi ʻōlelo e loaʻa maoli ia ma Go.

He aha ka hana i kēia manawa? GopherJS

ʻOiai ʻaʻohe o mākou kākoʻo no ka Web Assembly, aia kahi transpiler e like me GopherJS.

Alexey Grachev: E hele i mua

  • Ua unuhi ʻia ke code hele i ka Javascript "maʻemaʻe".
  • Holo i nā polokalamu kele pūnaewele a pau - ʻaʻohe hiʻohiʻona hou i kākoʻo ʻia e nā polokalamu kele hou (ʻo Vanilla JS kēia, e holo ana ma luna o kekahi mea).
  • Loaʻa ke kākoʻo no nā mea āpau i loaʻa iā Go, me nā goroutine a me nā kahawai ... nā mea āpau a mākou e aloha ai a ʻike nui ai.
  • Aneane i kākoʻo ʻia ka hale waihona puke maʻamau, koe wale nō kēlā mau pūʻolo i kūpono ʻole ke kākoʻo ʻana i ka polokalamu kele pūnaewele: syscall, nā hui pūnaewele (aia kahi mea kūʻai aku / http, akā ʻaʻohe kikowaena, a ua hoʻohālikelike ʻia ka mea kūʻai ma o XMLHttpRequest). Ma keʻano laulā, loaʻa ka waihona maʻamau holoʻokoʻa - eia ma ka polokalamu kele pūnaewele, eia ʻo Go's stdlib, a mākou e aloha ai.
  • Hiki ke hōʻuluʻulu ʻia ka pūʻolo kaiaola holoʻokoʻa ma Go, nā hāʻina o nā ʻaoʻao ʻekolu (ka hoʻohālikelike, a me nā mea ʻē aʻe) me ka hoʻohana ʻana iā GopherJS a holo i ka polokalamu kele pūnaewele.

He maʻalahi loa ka loaʻa ʻana o GopherJS - he pūʻolo Go maʻamau wale nō. Hele mākou e kiʻi, a loaʻa iā mākou kahi kauoha GopherJS e kūkulu i ka noi:

Alexey Grachev: E hele i mua

He honua aloha ʻuʻuku kēia...

Alexey Grachev: E hele i mua

...He polokalamu hele maʻamau, he pūʻolo waihona fmt maʻamau maʻamau a me Binding Js e hiki ai i ka API polokalamu kele pūnaewele. E hoʻohuli ʻia ʻo Println i console log a kākau ka polokalamu kele pūnaewele i "Hello gophers"! He mea maʻalahi ia: hana mākou i ka hana GopherJS - hoʻomaka mākou i ka polokalamu kele - hana nā mea a pau!

He aha kāu i kēia manawa? Hoʻopaʻa

Alexey Grachev: E hele i mua

Aia nā hoʻopaʻa ʻana no nā framework js kaulana a pau:

  • JQuery;
  • Angular.js;
  • D3.js no ka hoʻolālā a me ka hana ʻana me ka ʻikepili nui;
  • React.js;
  • VueJS;
  • aia nō ke kākoʻo no Electron (ʻo ia hoʻi, hiki iā mākou ke kākau i nā noi papa ma ka Electron);
  • a ʻo ka mea leʻaleʻa ʻo WebGL (hiki iā mākou ke hana i nā noi kiʻi piha, me nā pāʻani me nā kiʻi 3D, nā mele a me nā mea maikaʻi a pau);
  • a me nā mea paʻa ʻē aʻe he nui i nā papa hana javascript kaulana a me nā hale waihona puke.

Kūkulu

  1. Aia kekahi ʻōnaehana pūnaewele i kūkulu ʻia no GopherJS - Vecty. He analogue piha kēia o React.js, akā hoʻomohala wale ʻia ma Go, me nā kikoʻī o GopherJS.
  2. Aia nā ʻeke pāʻani (kahaha!). Ua loaʻa iaʻu nā mea kaulana loa ʻelua:
    • Engo;
    • Ebiten.

E hōʻike wau iā ʻoe i ʻelua mau hiʻohiʻona o ke ʻano o kona ʻano a me ka mea hiki iā ʻoe ke kākau mua ma Go:

Alexey Grachev: E hele i mua

A i ʻole kēia koho (ʻaʻole hiki iaʻu ke loaʻa i kahi pana pana 3D, akā aia paha ia):

Alexey Grachev: E hele i mua

He aha kaʻu e hāʻawi nei?

I kēia manawa aia ka ʻoihana mua i kahi kūlana e holo wikiwiki ai nā ʻōlelo āpau i kāhea mua mai Javascript. I kēia manawa e hōʻuluʻulu ʻia nā mea a pau i "Web Assemblies". He aha kā mākou e pono ai e lawe i ko mākou wahi kūpono ma laila ʻo Gophers?

Alexey Grachev: E hele i mua

Ua manaʻo maʻamau ʻo Go he ʻōlelo hoʻonohonoho Pūnaewele, a ʻaʻohe hale waihona puke no ka hana ʻana me ka UI. Aia kekahi mea, akā ua haʻalele ʻia ka hapa, ʻaʻohe hana.

A he manawa kūpono kēia e hana i nā hale waihona puke UI ma Go e holo ana ma GopherJS! Hiki iā ʻoe ke kākau i kāu hoʻolālā ponoʻī! ʻO kēia ka manawa e hiki ai iā ʻoe ke kākau i kahi framework, a ʻo ia kekahi o nā mea mua a loaʻa i ka hoʻokomo mua ʻana, a e lilo ʻoe i hōkū (inā he framework maikaʻi).

Hiki iā ʻoe ke hoʻololi i ka nui o nā pūʻolo like ʻole i loko o ka Go ecosystem i nā kikoʻī o ka polokalamu kele pūnaewele (no ka laʻana, Template engine). E hana mua lākou, hiki iā ʻoe ke hana i nā paʻa kūpono i hiki iā ʻoe ke hāʻawi maʻalahi i ka ʻike ma ka polokalamu kele pūnaewele. Eia kekahi, hiki iā ʻoe ke hana, no ka laʻana, kahi lawelawe e hiki ke hāʻawi i ka mea like ma ke kikowaena a ma ka mua-hope, me ka hoʻohana ʻana i ke code like - nā mea āpau e makemake ai nā mea hoʻomohala mua (i kēia manawa wale nō i Go).

Hiki iā ʻoe ke kākau i kahi pāʻani! No ka leʻaleʻa wale ...

ʻO ia wale nō kaʻu i makemake ai e ʻōlelo.

Alexey Grachev: E hele i mua

ʻO kāu mau nīnau

Nīnau (i kapa ʻia ma hope aku ʻo Q): – Ke kākau nei au ma Go a i ʻole Js?

AG: - Kākau ʻoe i nā hana maʻamau, nā kahawai, nā hale, ka hoʻopili ʻana - nā mea a pau ma Go... Kau inoa ʻoe i kahi hanana, hoʻohele i kahi hana ma laila.

IN: - No laila, kākau wau ma ka "'ōlohelohe" Js?

AG: - ʻAʻole, kākau ʻoe me he mea lā ma Go a hoʻopili i ka polokalamu polokalamu API (ʻaʻole i loli ka API). Hiki iā ʻoe ke kākau i kāu mau paʻa ponoʻī i hoʻouna ʻia nā memo i ke kahawai - ʻaʻole paʻakikī.

IN: – Pehea e pili ana i ke kelepona?

AG: - Ua ʻike maoli au: aia nā mea paʻa no ka pā Cordova e holo nei ʻo Js. Ma React Native - ʻAʻole au i ʻike; aia paha, ʻaʻole paha (ʻaʻole wau makemake nui). Kākoʻo ka ʻenekini pāʻani N-go i nā polokalamu kelepona ʻelua - ʻo IOS a me Android.

IN: - Nīnau e pili ana i ka Hui Pūnaewele. Ke lawe ʻia nei ka nui a me ka nui o nā wahi, ʻoiai ke kaomi a me ka "zipping" ... ʻAʻole anei mākou e pepehi i ka honua mua i kēia ala?

AG: - ʻO ka Hui Pūnaewele he ʻano binary, a ʻaʻole hiki ke hoʻokuʻu ʻia i ka hoʻokuʻu hope ʻana ma mua o ka kikokikona ... Ua huki ʻia ʻoe i ka wā holo, akā ua like kēia me ka huki ʻana i ka waihona Javascript maʻamau inā ʻaʻole ia, no laila mākou hoʻohana i kekahi Lodash. ʻAʻole maopopo iaʻu ka nui o ka lawe ʻana o Lodash.

IN: - ʻOiaʻiʻo ka liʻiliʻi ma mua o ka manawa holo ...

AG: - Ma ka Javascript "maʻemaʻe"?

IN: - ʻAe. Hoʻopili mākou iā ia ma mua o ka hoʻouna ʻana ...

AG: - Akā, he kikokikona kēia ... Ma keʻano laulā, he nui ka megabyte, akāʻo ia wale nō (loaʻa iāʻoe ka manawa holo holoʻokoʻa). A laila, kākau ʻoe i kāu loiloi ʻoihana ponoʻī, e hoʻonui i kāu binary e 1%. I kēia manawa ʻaʻole wau ʻike i kēia pepehi ʻana i ka frontend. Eia kekahi, ʻoi aku ka wikiwiki o ka Web Assembly ma mua o Javascript no ke kumu maopopo - ʻaʻole pono e paʻi ʻia.

IN: - He mea hoʻopaʻapaʻa mau kēia ... ʻAʻole i loaʻa kahi hoʻokō kuhikuhi o "Vasma" (Web Assembly) i hiki i kekahi ke hoʻoholo me ka ʻole. ʻO ka manaʻo, ʻae: ʻike mākou āpau e ʻoi aku ka wikiwiki o ka binary, akā ʻoi aku ka maikaʻi o ka hoʻokō ʻana o ka V8 like.

AG: - ʻAe.

IN: - He hana maikaʻi loa ka hui ʻana ma laila a ʻaʻole ia he ʻoiaʻiʻo e loaʻa kahi pōmaikaʻi nui.

AG: - Hana ʻia ka Hui Pūnaewele e nā kāne nui.

IN: - Me he mea lā iaʻu he mea paʻakikī ke hoʻoponopono i ka Web Assembly. Ua kamaʻilio ʻia no nā makahiki he nui i kēia manawa, akā he liʻiliʻi nā hoʻokō maoli i hiki ke ʻike ʻia.

AG: - Malia paha. E ʻike kākou.

IN: - ʻAʻohe o mākou pilikia ma ka hope ... Pono paha mākou e waiho i kēia mau pilikia ma ke alo? No ke aha e hele ai i laila?

AG: - Pono mākou e mālama i kahi limahana o nā limahana hana mua.

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka