Алексей Грачев: Фронттон өт

Kyiv Go Meetup Май 2018:

Алексей Грачев: Фронттон өт

Модератор: - Баарына салам! Бул жерде болгонуңуз үчүн рахмат! Бүгүн бизде эки расмий спикер бар - Лёша жана Ваня. Убакытыбыз жетиштүү болсо дагы экөө болот. Биринчи спикер - Алексей Грачев, ал GopherJS жөнүндө айтып берет.

Алексей Грачев (мындан ары – АГ): – Мен Go иштеп чыгуучусумун жана Go программасында веб кызматтарды жазам. Кээде фронт менен күрөшүүгө туура келет, кээде ага кол менен кирүү керек. Мен Go on frontend боюнча тажрыйбам жана изилдөөм тууралуу айткым келет.

Легенда мындай: адегенде биз эмне үчүн Go программасын фронтондо иштеткибиз келет, андан кийин муну кантип жасоо керектиги жөнүндө сүйлөшөбүз. Эки жолу бар - Web Assembly жана GopherJS. Келгиле, бул чечимдердин абалы кандай жана эмне кылса болорун карап көрөлү.

Frontend менен эмне болуп жатат?

Фронт менен баары жакшы дегенге баары макулбу?

Алексей Грачев: Фронттон өт

Тесттер жетишсизби? Жай куруу? Экосистема? Жакшы.

Frontend жөнүндө айтсам, мага фронтендди иштеп чыгуучулардын бири өзүнүн китебинде айткан цитата жакты:

Алексей Грачев: Фронттон өт

Javascriptтин типтүү системасы жок. Эми мен өзүмдүн ишимдин жүрүшүндө жолуккан көйгөйлөрдүн атын атайм жана алар кантип чечилерин түшүндүрөм.

Тип системасын Javasriptте тип системасы деп атоого болбойт - объекттин түрүн көрсөткөн сызыктар бар, бирок чындыгында бул типтерге эч кандай тиешеси жок. Бул маселе TypeScript (Javasript кошумчасы) жана Flow (Javascript'те статикалык типтеги текшерүүчү) менен чечилет. Чынында, frontend Javascriptтин начар типтеги тутумунун көйгөйүн чечүүгө чейин жеткен.

Алексей Грачев: Фронттон өт

Браузерде стандарттуу китепкана жок - браузерлерде кээ бир орнотулган объекттер жана "сыйкырдуу" функциялар бар. Бирок Javascriptте стандарттуу китепкана жок. Бул көйгөй мурунтан эле jQuery тарабынан бир жолу чечилген (бардыгы jQueryди бардык прототиптер, жардамчылар, иштөө үчүн зарыл болгон функциялар менен колдонушкан). Азыр баары Lodash колдонот:

Алексей Грачев: Фронттон өт

Кайра чалуу тозок. Менимче, бардыгы 5 жыл мурун Javascript кодун көрүшкөн жана ал кайра чалуулардын укмуштуудай татаалдыгынын “кесмесиндей” көрүнгөн. Эми бул көйгөй чечилди (ES-15 же ES-16нын чыгышы менен), Javascriptке убадалар кошулду жана ар бир адам бир азга жеңил дем ала алат.

Алексей Грачев: Фронттон өт

Promice тозогу келгенге чейин ... Мен алдыңкы өнөр жай кантип башкарат билбейм, бирок алар ар дайым кандайдыр бир кызыктай джунглиге өздөрүн кууп. Биз дагы убадалар боюнча тозок кыла алдык. Андан кийин биз жаңы примитивди кошуу менен бул маселени чечтик - async/await:

Алексей Грачев: Фронттон өт

Асинхрондук көйгөй чечилди. Async/await ар кандай тилдерде абдан популярдуу примитив болуп саналат. Python жана башкалар бул ыкмага ээ - бул абдан жакшы. Көйгөй чечилди.

Кандай маселе чечилбей жатат? Алкактардын экспоненциалдуу түрдө өсүп жаткан татаалдыгы, экосистеманын жана программалардын өздөрүнүн татаалдыгы.

Алексей Грачев: Фронттон өт

  • Javascript синтаксиси бир аз кызыктай. Массив, объект жана башка тамашаларды кошуудагы көйгөйлөр баарыбызга белгилүү.
  • Javascript көп парадигмалуу. Бул экосистема абдан чоң болуп турганда өзгөчө актуалдуу система:
    • ар ким ар кандай стилде жазат - айрымдары структуралык түрдө жазышат, кээ бири функционалдык жазышат, ар кандай иштеп чыгуучулар ар кандай жолдор менен жазышат;
    • ар кандай пакеттерден, ар кандай парадигмалардан сиз ар кандай пакеттерди колдонгондо;
    • Javasriptте функционалдык программалоо менен көп "көңүл ачуу" бар - rambda китепканасы пайда болду жана азыр бул китепканада жазылган программаларды эч ким окуй албайт.

  • Мунун баары экосистемага чоң таасирин тийгизет жана ал укмуштуудай өстү. Пакеттер бири-бири менен шайкеш келбейт: айрымдары убадаларга негизделген, кээ бирлери асинхрондо/күтүүдө, кээ бирлери кайра чалууларга негизделген. Алар ошондой эле ар кандай парадигмаларда жазышат!
  • Бул долбоорду сактоону кыйындатат. Кодду окуй албасаңыз, ката табуу кыйын.

Веб Ассамблея деген эмне?

Mozilla Фондунун жана башка бир катар компаниялардын эр жүрөк балдары Web Assembly сыяктуу нерсени ойлоп табышты. Бул эмне?

Алексей Грачев: Фронттон өт

  • Бул экилик форматты колдогон браузерге орнотулган виртуалдык машина.
  • Бинардык программалар ал жерге жетет жана дээрлик жергиликтүү түрдө аткарылат, башкача айтканда, браузер JavaScript кодунун бардык "кесмелерин" ар дайым талдап чыгуунун кереги жок.
  • Бардык браузерлер колдоо жарыялады.
  • Бул байт код болгондуктан, сиз каалаган тил үчүн компиляторду жаза аласыз.
  • Төрт негизги браузер буга чейин Web Assembly колдоосу менен жөнөтүлгөн.
  • Жакында Go'до жергиликтүү колдоону күтөбүз. Бул жаңы архитектура мурунтан эле кошулган: GOARCH=wasm GOOS=js (жакында). Азырынча, мен аны түшүнгөндөй, ал функционалдык эмес, бирок ал Go-да сөзсүз болот деген билдирүү бар.

Эми эмне кылуу керек? GopherJS

Бизде Web Assembly колдоого алынбаса да, GopherJS сыяктуу транспилер бар.

Алексей Грачев: Фронттон өт

  • Go коду "таза" Javascriptке которулат.
  • Бардык браузерлерде иштейт - заманбап браузерлер тарабынан гана колдоого алынган жаңы функциялар жок (бул Vanilla JS, бардык нерседе иштейт).
  • Go ээ болгон дээрлик бардык нерсе, анын ичинде горутиндер жана каналдар үчүн колдоо бар... биз жакшы көргөн жана абдан жакшы билген нерселердин бардыгы.
  • Браузерде колдоого мааниси жок топтомдорду кошпогондо, дээрлик бардык стандарттык китепкана колдоого алынат: syscall, нетто өз ара аракеттенүү (net/http кардары бар, бирок сервер жок жана кардар XMLHttpRequest аркылуу эмуляцияланган). Жалпысынан алганда, бардык стандарттык китепкана бар - бул жерде ал браузерде, бул жерде Go'нун stdlib, биз жакшы көрөт.
  • Go программасынын бүтүндөй пакетинин экосистемасы, бардык үчүнчү тараптын чечимдери (шаблондоо ж.б.) GopherJS аркылуу түзүлүп, браузерде иштетилет.

GopherJS алуу абдан оңой – бул жөн гана кадимки Go пакети. Биз барабыз жана колдонмону куруу үчүн GopherJS буйругубуз бар:

Алексей Грачев: Фронттон өт

Бул кичинекей салам дүйнөсү...

Алексей Грачев: Фронттон өт

...Кадимки Go программасы, кадимки стандарттуу китепкана fmt топтому жана браузердин API'сине жетүү үчүн Binding Js. Println акыры консолдук журналга айландырылат жана браузер "Hello gophers" деп жазат! Бул абдан жөнөкөй: биз GopherJS түзөбүз - биз аны браузерде ишке киргизебиз - баары иштейт!

Сизде учурда эмне бар? Байланыштар

Алексей Грачев: Фронттон өт

Бардык популярдуу JS алкактары үчүн байланыштар бар:

  • JQuery;
  • Angular.js;
  • чоң маалыматтар менен иштөө жана пландоо үчүн D3.js;
  • React.js;
  • VueJS;
  • ал тургай, Electron үчүн колдоо бар (башкача айтканда, биз Electron боюнча рабочий тиркемелерди жаза алабыз);
  • жана эң күлкүлүү нерсе WebGL (биз толук графикалык тиркемелерди, анын ичинде 3D графикасы, музыка жана бардык жакшы нерселер менен оюндарды жасай алабыз);
  • жана бардык популярдуу JavaScript алкактарына жана китепканаларына көптөгөн башка байланыштар.

Алкактык

  1. GopherJS - Vecty үчүн атайын иштелип чыккан веб алкак бар. Бул React.jsтин толук кандуу аналогу, бирок GopherJS өзгөчөлүктөрү менен Go программасында гана иштелип чыккан.
  2. Оюн баштыктары бар (сюрприз!). Мен эң популярдуу экөөнү таптым:
    • Энго;
    • Эбитэн.

Мен сизге анын кандай көрүнгөнүнүн жана Go'до эмне жаза ала турганыңыздын бир нече мисалын көрсөтөм:

Алексей Грачев: Фронттон өт

Же бул параметр (мен 3D аткычты таба алган жокмун, бирок ал бардыр):

Алексей Грачев: Фронттон өт

Мен эмнени сунуштайм?

Азыр алдыңкы тармак ушундай абалда, буга чейин Javascriptтен кыйкырып келген бардык тилдер ал жакка шашыла баштайт. Эми баары "Веб ассамблеяларына" түзүлөт. Гоферлер катары ал жактагы татыктуу орунду ээлеш үчүн бизге эмне керек?

Алексей Грачев: Фронттон өт

Go салттуу түрдө бул системалык программалоо тили деп эсептейт жана UI менен иштөө үчүн дээрлик китепканалар жок. Бир нерсе бар, бирок жарымы ташталган, жарымы иштебейт.

Эми GopherJSте иштей турган Go'до UI китепканаларын жасоого жакшы мүмкүнчүлүк! Акыры, өзүңүздүн алкакыңызды жаза аласыз! Бул сиз алкак жаза турган убак, ал биринчилерден болуп, эрте кабыл алып, жылдыз болосуз (эгер ал жакшы рамка болсо).

Сиз Go экосистемасындагы көптөгөн түрдүү пакеттерди браузердин өзгөчөлүктөрүнө ылайыкташтыра аласыз (мисалы, Template мотору). Алар мурунтан эле иштейт, сиз мазмунду түздөн-түз браузерде оңой көрсөтүү үчүн ыңгайлуу байланыштарды жасай аласыз. Мындан тышкары, сиз, мисалы, бир эле кодду колдонуп, серверде жана фронтто бир эле нерсени көрсөтө ала турган кызматты түзө аласыз - фронталдык программаны иштеп чыгуучуларга жагат (азыр Go'до гана).

Сиз оюн жаза аласыз! Жөн гана көңүл ачуу үчүн…

Меники бүттү.

Алексей Грачев: Фронттон өт

суроолор

Суроо (мындан ары - С): – Мен Go же Js менен жазамбы?

AG: – Сиз процедураларды, каналдарды, структураларды, кыстаруу – бардыгын Go программасында жазасыз... Окуяга жазыласыз, ал жерде функцияны өткөрөсүз.

IN: – Демек, мен “жылаңач” Js менен жазам?

AG: – Жок, сиз Go программасындагыдай жазып, API браузерине туташып жатасыз (API өзгөргөн жок). Билдирүүлөр каналга жөнөтүлүшү үчүн өзүңүздүн байланыштарыңызды жазсаңыз болот - бул кыйын эмес.

IN: – Уюлдук телефон жөнүндө эмне айтууга болот?

AG: – Мен анык көрдүм: Js иштеткен Cordova патчынын байланыштары бар. React Native'де - мен билбейм; балким бар, балким жок (мен өзгөчө кызыккан эмесмин). N-go оюн кыймылдаткычы мобилдик тиркемелерди тең колдойт - iOS жана Android да.

IN: – Веб Ассамблея жөнүндө суроо. Кысылганга жана "сырыктоого" карабастан, барган сайын көбүрөөк орун ээленип жатат... Биз алдыңкы дүйнөнү ушинтип өлтүрбөйбүзбү?

AG: – Веб ассамблея – бул бинардык формат жана экилик демейки боюнча акыркы релизде тексттен ашык боло албайт... Сиз иштөө убактысына тартылдыңыз, бирок бул стандарттуу Javascript китепканасын ал жок болгондо сүйрөп чыгуу менен бирдей, ошондуктан биз кээ бир Lodash колдон. Лодаш канча алып жатканын билбейм.

IN: – Албетте, иштөө убактысынан азыраак...

AG: – “Таза” Javascript мененби?

IN: - Ооба. Биз аны жөнөтүүдөн мурун аны кысып алабыз...

AG: – Бирок бул текст... Жалпысынан алганда, мегабайт көп окшойт, бирок ушуну менен (сизде бүт иштөө убактысы бар). Андан кийин, сиз өзүңүздүн бизнес логикаңызды жазасыз, бул сиздин бинардык 1% га көбөйөт. Азырынча мен бул фронтонду өлтүргөн жокмун. Андан тышкары, Web Assembly Javascriptке караганда тезирээк иштейт - аны талдап чыгуунун кереги жок.

IN: – Бул дагы эле талаш-тартыштуу жагдай... «Васманын» (Веб-Ассамблея) эч кандай маалымдама ишке ашырылышы азырынча жок, ошондуктан бир жактуу баа берүүгө болот. Концепция боюнча, ооба: биз баарыбыз бинардык ылдамыраак болушу керек экенин түшүнөбүз, бирок ошол эле V8дин учурдагы ишке ашырылышы абдан натыйжалуу.

AG: - Ооба.

IN: – Ал жерде компиляция чындыгында абдан сонун иштейт жана чоң артыкчылык болот деген чындык эмес.

AG: – Веб ассамблеяны да чоңдор жасашат.

IN: – Менимче, Веб Ассамблеяны соттош дагы деле кыйын болуп жатат. Көп жылдардан бери сүйлөшүүлөр жүрүп жатат, бирок сезиле турган реалдуу жетишкендиктер аз.

AG: - Болушу мүмкүн. Көрөбүз.

IN: – Бизде көйгөйлөр жок... Балким, бул көйгөйлөрдү фронтондо калтырыш керекпи? Эмне үчүн ал жакка барышат?

AG: – Биз алдыңкы катардагы жумушчулардын штатын кармашыбыз керек.

Кээ бир жарнамалар 🙂

Биз менен болгонуңуз үчүн рахмат. Биздин макалалар сизге жагабы? Көбүрөөк кызыктуу мазмунду көргүңүз келеби? Буйрутма берүү же досторуңузга сунуштоо менен бизди колдоңуз, иштеп чыгуучулар үчүн булут VPS 4.99 доллардан, биз сиз үчүн ойлоп тапкан баштапкы деңгээлдеги серверлердин уникалдуу аналогу: VPS (KVM) E5-2697 v3 (6 өзөктүү) 10 ГБ DDR4 480 ГБ SSD 1 Гбит/с 19 доллардан же серверди кантип бөлүшүү керектиги жөнүндө бардык чындык? (RAID1 жана RAID10 менен жеткиликтүү, 24 өзөккө чейин жана 40 ГБ DDR4 чейин).

Dell R730xd Амстердамдагы Equinix Tier IV маалымат борборунда 2 эсе арзанбы? Бул жерде гана 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ 199 доллардан баштап Нидерландыда! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 доллардан! Жөнүндө окуу Инфраструктураны кантип куруу керек. бир тыйынга 730 евро турган Dell R5xd E2650-4 v9000 серверлерин колдонуу менен класс?

Source: www.habr.com

Комментарий кошуу