Ալեքսեյ Գրաչև. Գնացեք ճակատ

Kyiv Go Meetup մայիս 2018.

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Կապար: - Բարեւ բոլորին! Շնորհակալություն այստեղ լինելու համար: Այսօր մենք ունենք երկու պաշտոնական խոսնակ՝ Լյոշան և Վանյան։ Եվս երկուսը կլինեն, եթե բավական ժամանակ ունենանք։ Առաջին բանախոսը Ալեքսեյ Գրաչովն է, նա մեզ կպատմի GopherJS-ի մասին։

Ալեքսեյ Գրաչև (այսուհետ՝ Ա.Գ.). – Ես Go-ի ծրագրավորող եմ և գրում եմ վեբ ծառայություններ Go-ում: Երբեմն դուք պետք է գործ ունենաք ճակատային մասի հետ, երբեմն պետք է ձեռքով մտնեք դրա մեջ: Ես ուզում եմ խոսել իմ փորձի և Go on the frontend հետազոտության մասին:

Լեգենդը հետևյալն է. նախ մենք կխոսենք այն մասին, թե ինչու ենք ուզում գործարկել Go-ն առաջին պլանում, այնուհետև կխոսենք այն մասին, թե ինչպես կարելի է դա անել: Երկու ճանապարհ կա՝ Web Assembly և GopherJS: Տեսնենք, թե ինչ վիճակում են այս լուծումները և ինչ կարելի է անել։

Ի՞նչն է սխալ ճակատային մասի հետ:

Բոլորը համաձա՞յն են, որ ճակատային մասի հետ ամեն ինչ կարգին է:

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Բավարար թեստեր չկա՞ն: Դանդաղ կառուցո՞ւմ: Էկոհամակարգ? Լավ:

Ինչ վերաբերում է ճակատին, ինձ դուր է գալիս այն մեջբերումը, որն իր գրքում ասել է frontend-ի մշակողներից մեկը.

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Javascript-ը չունի տիպային համակարգ։ Հիմա կնշեմ այն ​​խնդիրները, որոնց հանդիպել եմ իմ աշխատանքի ընթացքում և կբացատրեմ, թե ինչպես են դրանք լուծվում։

Տիպի համակարգը Javasript-ում դժվար թե կարելի է անվանել տիպային համակարգ. կան տողեր, որոնք ցույց են տալիս օբյեկտի տեսակը, բայց իրականում սա կապ չունի տեսակների հետ: Այս խնդիրը լուծվում է TypeScript-ում (Javasript-ի հավելում) և Flow-ում (ստատիկ տիպի ստուգիչ Javascript-ում): Փաստորեն, frontend-ն արդեն հասել է Javascript-ում վատ տիպի համակարգի խնդիրը լուծելու կետին։

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Բրաուզերում որպես այդպիսին չկա ստանդարտ գրադարան. կան որոշ ներկառուցված օբյեկտներ և «կախարդական» գործառույթներ բրաուզերներում: Բայց Javascript-ում չկա ստանդարտ գրադարան, որպես այդպիսին: Այս խնդիրը մեկ անգամ արդեն լուծվել է jQuery-ի կողմից (բոլորն օգտագործում էին jQuery բոլոր նախատիպերով, օգնականներով, գործառույթներով, որոնք անհրաժեշտ էին աշխատելու համար): Այժմ բոլորն օգտագործում են Lodash:

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Հետ կանչի դժոխք. Կարծում եմ, բոլորը տեսել են Javascript կոդը մոտ 5 տարի առաջ, և այն նման էր զանգերի անհավանական բարդության «լապշայի»: Այժմ այս խնդիրը լուծված է (ES-15 կամ ES-16-ի թողարկումով), Javascript-ում խոստումներ են ավելացվել, և բոլորը կարող են որոշ ժամանակով ավելի հեշտ շնչել։

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Մինչև Պրոմիսի դժոխքի ժամանումը... Ես չգիտեմ, թե ինչպես է հաջողվում առաջատար արդյունաբերությունը, բայց նրանք միշտ իրենց քշում են ինչ-որ տարօրինակ ջունգլիներում: Մեզ հաջողվեց նաեւ խոստումների վրա դժոխք անել։ Այնուհետև մենք լուծեցինք այս խնդիրը՝ ավելացնելով նոր պարզունակ՝ async/await:

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Ասինխրոնիայի հետ կապված խնդիրը լուծված է։ Async/wait-ը բավականին տարածված պարզունակ է տարբեր լեզուներով: Python-ը և մյուսներն ունեն այս մոտեցումը. դա բավականին լավ է: Խնդիրը լուծված է.

Ի՞նչ խնդիր չի լուծվում. Շրջանակների էքսպոնենցիալ աճող բարդությունը, էկոհամակարգի և հենց ծրագրերի բարդությունը:

Ալեքսեյ Գրաչև. Գնացեք ճակատ

  • Javascript-ի շարահյուսությունը մի փոքր տարօրինակ է: Մենք բոլորս գիտենք զանգված և օբյեկտ ավելացնելու հետ կապված խնդիրները և այլ կատակներ:
  • Javascript-ը բազմակողմանի պարադիգմ է: Սա հատկապես հրատապ համակարգ է այժմ, երբ էկոհամակարգը շատ մեծ է.
    • բոլորը գրում են տարբեր ոճերով՝ ոմանք գրում են կառուցվածքային, ոմանք՝ ֆունկցիոնալ, տարբեր մշակողներ՝ տարբեր;
    • տարբեր փաթեթներից, տարբեր պարադիգմներից, երբ դուք օգտագործում եք տարբեր փաթեթներ;
    • Javasript-ում ֆունկցիոնալ ծրագրավորման հետ կապված շատ «զվարճանք» կա. հայտնվել է rambda գրադարանը, և այժմ ոչ ոք չի կարող կարդալ այս գրադարանում գրված ծրագրերը:

  • Այս ամենը մեծ ազդեցություն է թողնում էկոհամակարգի վրա, և այն անհավատալիորեն աճել է։ Փաթեթներն անհամատեղելի են միմյանց հետ. որոշները հիմնված են խոստումների վրա, որոշները հիմնված են async/wait-ի վրա, որոշները հիմնված են հետադարձ զանգերի վրա: Նրանք նաև գրում են տարբեր պարադիգմներով։
  • Սա դժվարացնում է նախագծի պահպանումը: Դժվար է սխալ գտնել, եթե չկարողանաք կարդալ կոդը:

Ի՞նչ է Վեբ ժողովը:

Mozilla Foundation-ի և մի շարք այլ ընկերությունների խիզախ տղաները հայտնվեցին Web Assembly-ի մասին: Ինչ է սա?

Ալեքսեյ Գրաչև. Գնացեք ճակատ

  • Սա բրաուզերի մեջ ներկառուցված վիրտուալ մեքենա է, որն աջակցում է երկուական ձևաչափին:
  • Երկուական ծրագրերը հասնում են այնտեղ և կատարվում են գրեթե բնիկ կերպով, այսինքն՝ զննարկիչը կարիք չունի ամեն անգամ վերլուծելու javascript կոդի բոլոր «արիշտաները»:
  • Բոլոր բրաուզերները հայտարարել են աջակցություն:
  • Քանի որ սա բայթկոդ է, կարող եք կոմպիլյատոր գրել ցանկացած լեզվի համար:
  • Չորս խոշոր բրաուզերներ արդեն մատակարարվում են Web Assembly աջակցությամբ:
  • Մենք շուտով ակնկալում ենք հայրենական աջակցություն Go-ում: Այս նոր ճարտարապետությունն արդեն ավելացվել է՝ GOARCH=wasm GOOS=js (շուտով): Առայժմ, ոնց հասկացա, ֆունկցիոնալ չէ, բայց հայտարարություն կա, որ Go-ում անպայման կլինի։

Ի՞նչ անել հիմա: GopherJS

Թեև մենք չունենք Web Assembly-ի աջակցություն, կա GopherJS-ի նման տրանսպիլյատոր:

Ալեքսեյ Գրաչև. Գնացեք ճակատ

  • Go կոդը փոխակերպվում է «մաքուր» Javascript-ի:
  • Գործում է բոլոր բրաուզերներում. չկան նոր հնարավորություններ, որոնք աջակցվում են միայն ժամանակակից բրաուզերների կողմից (սա Vanilla JS-ն է, որն աշխատում է ցանկացած բանի վրա):
  • Աջակցություն կա գրեթե այն ամենին, ինչ Go-ն ունի, ներառյալ գորուտիններն ու ալիքները... այն ամենը, ինչ մենք շատ ենք սիրում և գիտենք:
  • Գրեթե ամբողջ ստանդարտ գրադարանը աջակցվում է, բացառությամբ այն փաթեթների, որոնք անիմաստ է աջակցել բրաուզերում՝ syscall, net փոխազդեցություններ (կա net/http հաճախորդ, բայց ոչ սերվեր, և հաճախորդը նմանակվում է XMLHttpRequest-ի միջոցով): Ընդհանուր առմամբ, ամբողջ ստանդարտ գրադարանը հասանելի է. այստեղ այն բրաուզերում է, ահա Go-ի stdlib-ը, որը մենք սիրում ենք:
  • Ամբողջ փաթեթային էկոհամակարգը Go-ում, բոլոր երրորդ կողմի լուծումները (կաղապարներ և այլն) կարող են կազմվել GopherJS-ի միջոցով և գործարկել բրաուզերում:

GopherJS-ը շատ հեշտ է ձեռք բերել, դա պարզապես սովորական Go փաթեթ է: Մենք գնում ենք ստանալ, և մենք ունենք GopherJS հրաման՝ հավելվածը ստեղծելու համար.

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Սա այնքան փոքրիկ բարև աշխարհ է...

Ալեքսեյ Գրաչև. Գնացեք ճակատ

...Հերթական Go ծրագիր, սովորական ստանդարտ գրադարանային fmt փաթեթ և Binding Js՝ բրաուզերի API-ին հասնելու համար: Println-ը ի վերջո կվերածվի կոնսոլի մատյան, և զննարկիչը կգրի «Բարև գոֆերներ»: Դա այնքան պարզ է. մենք անում ենք GopherJS-ի կառուցումը, մենք գործարկում ենք այն բրաուզերում, ամեն ինչ աշխատում է:

Ի՞նչ ունեք այս պահին։ Ամրացումներ

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Բոլոր հայտնի js շրջանակների համար կան պարտադիր կապեր.

  • JQuery;
  • Angular.js;
  • D3.js մեծ տվյալների գծագրման և աշխատանքի համար;
  • React.js;
  • VueJS;
  • նույնիսկ կա աջակցություն Էլեկտրոնին (այսինքն, մենք արդեն կարող ենք Էլեկտրոնի վրա գրել աշխատասեղանի հավելվածներ);
  • և ամենազվարճալին WebGL-ն է (մենք կարող ենք կատարել ամբողջական գրաֆիկական հավելվածներ, այդ թվում՝ խաղեր 3D գրաֆիկայով, երաժշտությամբ և բոլոր բարիքներով);
  • և շատ այլ կապեր բոլոր հայտնի javascript շրջանակների և գրադարանների համար:

Շրջանակ

  1. Գոյություն ունի վեբ շրջանակ արդեն մշակված հատուկ GopherJS - Vecty-ի համար: Սա React.js-ի ամբողջական անալոգն է, բայց մշակվել է միայն Go-ում՝ GopherJS-ի առանձնահատկություններով:
  2. Կան խաղային պայուսակներ (անակնկալ): Ես գտա երկու ամենահայտնիները.
    • Էնգո;
    • Էբիթեն.

Ես ձեզ ցույց կտամ մի քանի օրինակ, թե ինչ տեսք ունի այն և ինչ կարող եք արդեն գրել Go-ում.

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Կամ այս տարբերակը (ես չկարողացա գտնել 3D հրաձիգ, բայց միգուցե այն գոյություն ունի).

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Ի՞նչ եմ ես առաջարկում:

Այժմ ճակատային արդյունաբերությունը այնպիսի վիճակում է, որ բոլոր լեզուները, որոնք նախկինում լաց էին լինում Javascript-ից, շտապելու են այնտեղ: Այժմ ամեն ինչ կկազմվի «Վեբ հավաքների» մեջ: Ի՞նչ է մեզ պետք, որպեսզի այնտեղ զբաղեցնենք մեր արժանի տեղը որպես Գոֆերներ:

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Go-ն ավանդաբար ենթադրում էր, որ դա System ծրագրավորման լեզու է, և գործնականում չկան գրադարաններ UI-ի հետ աշխատելու համար։ Ինչ-որ բան կա, բայց կիսով չափ լքված է, կիսով չափ անգործունակ։

Եվ հիմա լավ հնարավորություն է Go-ում ստեղծելու UI գրադարաններ, որոնք կաշխատեն GopherJS-ով: Դուք կարող եք վերջապես գրել ձեր սեփական շրջանակը: Սա այն ժամանակն է, երբ դուք կարող եք գրել շրջանակ, և այն կլինի առաջիններից մեկը և կստանա վաղ որդեգրում, և դուք աստղ կլինեք (եթե դա լավ շրջանակ է):

Դուք կարող եք շատ տարբեր փաթեթներ, որոնք արդեն գտնվում են Go էկոհամակարգում, հարմարեցնել բրաուզերի առանձնահատկություններին (օրինակ՝ Template engine): Նրանք արդեն կաշխատեն, կարող եք հարմար կապեր անել, որպեսզի հեշտությամբ կարողանաք բովանդակությունը մատուցել անմիջապես բրաուզերում։ Բացի այդ, դուք կարող եք ստեղծել, օրինակ, ծառայություն, որը կարող է նույն բանը մատուցել սերվերում և ճակատային մասում՝ օգտագործելով նույն կոդը՝ այն ամենը, ինչ դուր է գալիս ֆրոնտ-էնդ մշակողներին (միայն այժմ Go-ում):

Դուք կարող եք գրել խաղ! Պարզապես հաճույքի համար…

Այսքանն էի ուզում ասել։

Ալեքսեյ Գրաչև. Գնացեք ճակատ

Հարցեր

Հարց (այսուհետ՝ Հ). – Ես գրում եմ Go կամ Js-ով:

AG: – Դուք գրում եք ռեժիմներ, ալիքներ, կառուցվածքներ, ներկառուցում – ամեն ինչ Go-ում... Դուք բաժանորդագրվում եք որևէ միջոցառման, փոխանցում այնտեղ գործառույթը:

IN: – Այսինքն՝ ես գրում եմ «մերկ» Ջ-ներով։

AG: – Ոչ, դուք գրում եք այնպես, կարծես Go-ում և միանում եք բրաուզերի API-ին (API-ն չի փոխվել): Դուք կարող եք գրել ձեր սեփական կապերը, որպեսզի հաղորդագրությունները ուղարկվեն ալիքին, դա դժվար չէ:

IN: -Ի՞նչ կասեք բջջայինի մասին:

AG: – Ես միանշանակ տեսա. կան կապանքներ Cordova patch-ի համար, որն աշխատում է Js-ը: React Native-ում - չգիտեմ; գուցե կա, գուցե ոչ (ես առանձնապես հետաքրքրված չէի): N-go խաղի շարժիչն աջակցում է երկու բջջային հավելվածներին՝ և՛ iOS, և՛ Android:

IN: – Հարց Web Assembly-ի մասին: Ավելի ու ավելի շատ տեղ է գրավում, չնայած սեղմմանը և «zipping»-ին... Մի՞թե մենք այս կերպ ավելի շատ չենք սպանի ճակատային աշխարհը:

AG: – Web Assembly-ը երկուական ձևաչափ է, և երկուականը լռելյայն չի կարող լինել վերջնական թողարկման մեջ ավելին, քան տեքստը... Դուք ձգվում եք դեպի գործարկման ժամանակ, բայց դա նույնն է, ինչ ստանդարտ Javascript գրադարանը քաշելն այն դեպքում, երբ այն չկա, ուստի մենք օգտագործել որոշ Lodash: Ես չգիտեմ, թե որքան է Լոդաշը վերցնում:

IN: - Ակնհայտորեն ավելի քիչ, քան գործարկման ժամանակը ...

AG: – «Մաքուր» Javascript-ո՞վ:

IN: -Այո: Մենք սեղմում ենք այն ուղարկելուց առաջ...

AG: – Բայց սա տեքստ է... Ընդհանրապես, մեգաբայթը շատ է թվում, բայց դա բոլորն է (դուք ունեք ամբողջ գործարկման ժամանակը): Հաջորդը, դուք գրում եք ձեր սեփական բիզնես տրամաբանությունը, որը կավելացնի ձեր երկուականը 1% -ով: Առայժմ ես չեմ տեսնում, որ սա սպանում է ճակատին: Ավելին, Web Assembly-ը կաշխատի ավելի արագ, քան Javascript-ը հասկանալի պատճառով. այն վերլուծության կարիք չունի:

IN: – Սա դեռևս վիճելի կետ է... Դեռևս չկա «Վասմա»-ի (Վեբ ժողով) որևէ հղում, որպեսզի կարողանանք միանշանակ դատել: Հայեցակարգային առումով, այո. մենք բոլորս հասկանում ենք, որ երկուականը պետք է ավելի արագ լինի, բայց նույն V8-ի ներկայիս ներդրումը շատ արդյունավետ է:

AG: - Այո:

IN: – Այնտեղ հավաքումն իսկապես շատ լավ է աշխատում, և փաստ չէ, որ մեծ առավելություն կլինի:

AG: – Վեբ ժողովը նույնպես մեծ տղաներ են պատրաստում:

IN: – Ինձ թվում է, որ դեռևս դժվար է դատել Web Assembly-ը: Արդեն երկար տարիներ խոսակցություններ կան, բայց իրական ձեռքբերումները քիչ են, որոնք կարելի է զգալ։

AG: - Միգուցե. Կտեսնենք.

IN: – Մենք խնդիրներ չունենք հետին պլանում... Միգուցե այս խնդիրները թողնե՞նք առաջին պլանում: Ինչու՞ գնալ այնտեղ:

AG: «Մենք պետք է առաջին գծի աշխատողների աշխատակազմ պահենք.

Մի քանի գովազդ 🙂

Շնորհակալություն մեզ հետ մնալու համար: Ձեզ դուր են գալիս մեր հոդվածները: Ցանկանու՞մ եք տեսնել ավելի հետաքրքիր բովանդակություն: Աջակցեք մեզ՝ պատվիրելով կամ խորհուրդ տալով ընկերներին, ամպային VPS մշակողների համար $4.99-ից, մուտքի մակարդակի սերվերների եզակի անալոգ, որը հորինվել է մեր կողմից ձեզ համար. Ամբողջ ճշմարտությունը VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps 19 դոլարից կամ ինչպես կիսել սերվերը: (հասանելի է RAID1 և RAID10-ով, մինչև 24 միջուկով և մինչև 40 ԳԲ DDR4):

Dell R730xd 2 անգամ ավելի էժան Ամստերդամի Equinix Tier IV տվյալների կենտրոնում: Միայն այստեղ 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

Добавить комментарий