Алексеј Грачев: Иди Фронтенд

Киив Го Меетуп, мај 2018:

Алексеј Грачев: Иди Фронтенд

Леад: - Здраво свима! Хвала вам што сте овде! Данас имамо два званична говорника - Љошу и Вању. Биће још два ако будемо имали довољно времена. Први говорник је Алексеј Грачев, он ће нам причати о ГопхерЈС-у.

Алексеј Грачев (у даљем тексту – АГ): – Ја сам Го програмер и пишем веб сервисе у Го. Понекад морате да се бавите фронтендом, понекад морате да уђете у њега ручно. Желим да причам о свом искуству и истраживању Го на фронтенду.

Легенда је следећа: прво ћемо разговарати о томе зашто желимо да покренемо Го на фронтенду, а затим ћемо разговарати о томе како се то може урадити. Постоје два начина - Веб Ассембли и ГопхерЈС. Да видимо какав је статус ових решења и шта се може учинити.

Шта није у реду са фронтендом?

Да ли се сви слажу да је све у реду са фронтендом?

Алексеј Грачев: Иди Фронтенд

Нема довољно тестова? Слов буилд? Екосистем? У реду.

Што се тиче фронтенда, свиђа ми се цитат који је један од програмера фронтенда рекао у својој књизи:

Алексеј Грачев: Иди Фронтенд

Јавасцрипт нема систем типова. Сада ћу навести проблеме са којима сам се сусрео у току свог рада и објаснити како се решавају.

Систем типова уопште се тешко може назвати системом типова у Јавасрипт-у - постоје линије које указују на тип објекта, али у ствари то нема никакве везе са типовима. Овај проблем је решен у ТипеСцрипт-у (додатак за Јавасрипт) и Флов (провера статичког типа у Јавасцрипт-у). У ствари, фронтенд је већ стигао до тачке решавања проблема лошег система типова у Јавасцрипт-у.

Алексеј Грачев: Иди Фронтенд

Не постоји стандардна библиотека у претраживачу као таква - постоје неки уграђени објекти и „магичне“ функције у претраживачима. Али у Јавасцрипт-у не постоји стандардна библиотека као таква. Овај проблем је већ једном решио јКуери (сви су користили јКуери са свим прототиповима, помоћницима, функцијама које су биле потребне за рад). Сада сви користе Лодасх:

Алексеј Грачев: Иди Фронтенд

Пакао повратног позива. Мислим да су сви видели Јавасцрипт код пре око 5 година, и изгледао је као „резанци“ невероватне замршености повратних позива. Сада је овај проблем решен (са издавањем ЕС-15 или ЕС-16), обећања су додата у Јавасцрипт и свако може лакше да дише неко време.

Алексеј Грачев: Иди Фронтенд

Док није стигао Промице пакао... Не знам како се фронт-енд индустрија сналази, али они се увек одвезу у неку чудну џунглу. Успели смо и да направимо пакао од обећања. Затим смо решили овај проблем додавањем новог примитива - асинц/аваит:

Алексеј Грачев: Иди Фронтенд

Проблем са асинхронијом је решен. Асинц/аваит је прилично популаран примитив на разним језицима. Питхон и други имају овај приступ - прилично је добар. Проблем решен.

Који проблем није решен? Експоненцијално растућа сложеност оквира, сложеност екосистема и самих програма.

Алексеј Грачев: Иди Фронтенд

  • Јавасцрипт синтакса је мало чудна. Сви знамо проблеме са додавањем низа и објекта и друге шале.
  • Јавасцрипт је мулти-парадигма. Ово је посебно хитан систем сада када је екосистем веома велики:
    • свако пише у различитим стиловима – неки пишу структурално, неки пишу функционално, различити програмери пишу на различите начине;
    • из различитих пакета, различите парадигме када користите различите пакете;
    • постоји много „забаве“ са функционалним програмирањем у Јавасрипт-у - појавила се рамбда библиотека и сада нико не може да чита програме написане у овој библиотеци.

  • Све ово има велики утицај на екосистем, и он је невероватно порастао. Пакети су некомпатибилни један са другим: неки су засновани на обећањима, неки су засновани на асинц/аваит, неки су засновани на повратним позивима. Они такође пишу у различитим парадигмама!
  • Ово отежава одржавање пројекта. Тешко је пронаћи грешку ако не можете да прочитате код.

Шта је веб скупштина?

Храбри момци из Мозилла фондације и низа других компанија смислили су такву ствар као што је Веб Ассембли. Шта је ово?

Алексеј Грачев: Иди Фронтенд

  • Ово је виртуелна машина уграђена у претраживач која подржава бинарни формат.
  • Бинарни програми стижу тамо и извршавају се скоро нативно, то јест, претраживач не мора сваки пут да анализира све „резанце“ јавасцрипт кода.
  • Сви претраживачи су декларирали подршку.
  • Пошто је ово бајткод, можете написати компајлер за било који језик.
  • Четири главна претраживача се већ испоручују са подршком за Веб Ассембли.
  • Ускоро очекујемо домаћу подршку у Го-у. Ова нова архитектура је већ додата: ГОАРЦХ=васм ГООС=јс (ускоро). За сада, колико сам схватио, није функционалан, али постоји изјава да ће сигурно бити у Го.

Шта сада да радимо? ГопхерЈС

Иако немамо подршку за Веб Ассембли, постоји транспилер као што је ГопхерЈС.

Алексеј Грачев: Иди Фронтенд

  • Го код се транспилира у „чисти“ Јавасцрипт.
  • Ради у свим претраживачима - нема нових функција које подржавају само модерни претраживачи (ово је Ванилла ЈС, који ради на било чему).
  • Постоји подршка за скоро све што Го има, укључујући горутине и канале... све што толико волимо и знамо.
  • Подржана је скоро цела стандардна библиотека, осим оних пакета које нема смисла подржавати у претраживачу: системски позив, мрежне интеракције (постоји нет/хттп клијент, али нема сервера, а клијент се емулира преко КСМЛХттпРекуест). Генерално, цела стандардна библиотека је доступна - ево је у претраживачу, овде је Го-ов стдлиб, који волимо.
  • Цео екосистем пакета у Го-у, сва решења независних произвођача (темплатинг, итд.) могу се компајлирати помоћу ГопхерЈС-а и покренути у претраживачу.

ГопхерЈС је веома лако набавити - то је само обичан Го пакет. Идемо да добијемо и имамо ГопхерЈС команду за прављење апликације:

Алексеј Грачев: Иди Фронтенд

Ово је тако мали здрав свет...

Алексеј Грачев: Иди Фронтенд

...Обичан Го програм, обичан фмт пакет стандардне библиотеке и Биндинг Јс да бисте дошли до АПИ-ја претраживача. Принтлн ће на крају бити конвертован у дневник конзоле и претраживач ће написати „Хелло гопхерс“! То је тако једноставно: радимо ГопхерЈС буилд – покрећемо га у претраживачу – све ради!

Шта имате у овом тренутку? Везови

Алексеј Грачев: Иди Фронтенд

Постоје везе за све популарне јс оквире:

  • ЈКуери;
  • Ангулар.јс;
  • Д3.јс за цртање и рад са великим подацима;
  • Реацт.јс;
  • ВуеЈС;
  • постоји чак и подршка за Елецтрон (то јест, већ можемо писати десктоп апликације на Елецтрон-у);
  • а најсмешнија ствар је ВебГЛ (можемо да правимо апликације са пуном графиком, укључујући игре са 3Д графиком, музиком и свим добротама);
  • и многе друге везе за све популарне јавасцрипт оквире и библиотеке.

Оквир

  1. Постоји веб оквир који је већ развијен посебно за ГопхерЈС - Вецти. Ово је потпуни аналог Реацт.јс-а, али развијен само у Го-у, са специфичностима ГопхерЈС-а.
  2. Постоје торбе за игру (изненађење!). Нашао сам две најпопуларније:
    • Енго;
    • Ебитен.

Показаћу вам неколико примера како то изгледа и шта већ можете да напишете у Го:

Алексеј Грачев: Иди Фронтенд

Или ова опција (нисам могао да пронађем 3Д пуцач, али можда постоји):

Алексеј Грачев: Иди Фронтенд

Шта ја нудим?

Сада је фронт-енд индустрија у таквом стању да ће сви језици који су раније вапили из Јавасцрипта похрлити тамо. Сада ће све бити састављено у „Веб Ассемблиес“. Шта нам је потребно да заузмемо место које нам припада као Гопхерс?

Алексеј Грачев: Иди Фронтенд

Го традиционално претпоставља да је системски програмски језик и практично не постоје библиотеке за рад са корисничким интерфејсом. Има нешто, али је пола напуштено, пола нефункционално.

А сада је добра прилика да направите УИ библиотеке у Го-у које ће радити на ГопхерЈС-у! Коначно можете написати свој оквир! Ово је време када можете да напишете оквир, и он ће бити један од првих и бити рано усвојен, а ви ћете бити звезда (ако је добар оквир).

Можете прилагодити много различитих пакета који се већ налазе у Го екосистему специфичностима претраживача (на пример, Темплате енгине). Они ће већ радити, можете направити згодне везе тако да можете лако да прикажете садржај директно у претраживачу. Плус, можете да направите, на пример, услугу која може да прикаже исту ствар на серверу и на фронт-енд-у, користећи исти код - све што воле фронт-енд програмери (само сада у Го).

Можете написати игру! Шале ради...

То је све што сам хтео да кажем.

Алексеј Грачев: Иди Фронтенд

pitanja

Питање (у даљем тексту П): – Да ли пишем на Го или Јс?

АГ: – Пишете рутине, канале, структуре, ембеддинг – све у Го... Претплатите се на догађај, проследите функцију тамо.

ИН: – Па пишем у „голи“ Јс?

АГ: – Не, пишете као у Го и повезујете се на АПИ претраживача (АПИ се није променио). Можете написати своје везе тако да се поруке шаљу на канал - није тешко.

ИН: – Шта је са мобилним?

АГ: – Дефинитивно сам видео: постоје везе за Цордова патцх који Јс покреће. У Реацт Нативе - не знам; можда има, можда не (нисам био посебно заинтересован). Н-го гаме енгине подржава обе мобилне апликације - и иОС и Андроид.

ИН: – Питање о Веб Ассембли. Заузима се све више простора, упркос компресији и „зипању“... Нећемо ли на овај начин још више убити фронт-енд свет?

АГ: – Веб Ассембли је бинарни формат, а бинарно подразумевано не може бити у коначном издању више од текста... Привлачи вас рунтиме, али ово је исто као да извлачите стандардну Јавасцрипт библиотеку када је нема, тако да ми користите неки Лодасх. Не знам колико Лодасх узима.

ИН: – Очигледно мање од времена рада...

АГ: – У „чистом“ Јавасцрипт-у?

ИН: - Да. Компримујемо га пре него што га пошаљемо...

АГ: – Али ово је текст... Генерално, мегабајт изгледа као много, али то је све (имате читаво време рада). Затим пишете сопствену пословну логику, која ће повећати вашу бинарност за 1%. За сада не видим да ово убија фронтенд. Штавише, Веб Ассембли ће радити брже од Јавасцрипт-а из очигледног разлога – не треба га рашчлањивати.

ИН: – Ово је још увек контроверзна тачка... Још увек нема референтне имплементације „Васме“ (Веб Ассембли) да би се могло недвосмислено судити. Концептуално, да: сви разумемо да би бинарност требало да буде бржа, али тренутна имплементација истог В8 је веома ефикасна.

АГ: - Да.

ИН: – Компилација тамо ради заиста веома кул и није чињеница да ће бити велика предност.

АГ: – Веб Ассембли такође праве велики момци.

ИН: – Чини ми се да је још увек тешко судити о Веб скупштини. Разговори се воде већ дуги низ година, али мало је правих достигнућа која се могу осетити.

АГ: - Можда. Видећемо.

ИН: – Немамо проблема на бекенду... Можда би ове проблеме требало да оставимо на фронтенду? Зашто ићи тамо?

АГ: – Морамо да задржимо кадар радника на фронту.

Неки огласи 🙂

Хвала вам што сте остали са нама. Да ли вам се свиђају наши чланци? Желите да видите још занимљивијег садржаја? Подржите нас тако што ћете наручити или препоручити пријатељима, ВПС у облаку за програмере од 4.99 УСД, јединствени аналог сервера почетног нивоа, који смо ми измислили за вас: Цела истина о ВПС (КВМ) Е5-2697 в3 (6 језгара) 10ГБ ДДР4 480ГБ ССД 1Гбпс од 19 долара или како делити сервер? (доступно са РАИД1 и РАИД10, до 24 језгра и до 40 ГБ ДДР4).

Делл Р730кд 2 пута јефтинији у Екуиник Тиер ИВ дата центру у Амстердаму? Само овде 2 к Интел ТетраДеца-Цоре Ксеон 2к Е5-2697в3 2.6ГХз 14Ц 64ГБ ДДР4 4к960ГБ ССД 1Гбпс 100 ТВ од 199 УСД у Холандији! Делл Р420 - 2к Е5-2430 2.2Гхз 6Ц 128ГБ ДДР3 2к960ГБ ССД 1Гбпс 100ТБ - од 99 долара! Читали о Како изградити инфраструктурну корпорацију. класе уз коришћење Делл Р730кд Е5-2650 в4 сервера у вредности од 9000 евра за пени?

Извор: ввв.хабр.цом

Додај коментар