
Sasha
05.09.2017
10:21:37
Забыл

Roman
05.09.2017
10:22:02

Максим
05.09.2017
10:22:09

Sasha
05.09.2017
10:22:20
Лол

Google

Sasha
05.09.2017
10:22:31
Да, поставить vuex на серваки
И гонять по ним данные

Yaroslav
05.09.2017
10:22:44
Синхронить сервера это проблема.

Sasha
05.09.2017
10:22:47
Ахахахах

Максим
05.09.2017
10:23:05
В следующий раз буду перечитывать историю, прежде чем написать ?

Roman
05.09.2017
10:24:18
Синхронить сервера это проблема.
ну как я уже говорил, либо центральный сервис сессий
- single point of failure
- scales vertically
- higher round-trip time
либо локальный флаг инвалидации сессий
- distributed synchronisation problem
- scales horizontally
- negligible round-trip time

Sasha
05.09.2017
10:25:34
Давайте уж полностью на английском говорить, а то сейчас язык сломаю

Roman
05.09.2017
10:26:53
однако если использовать WSS вместо HTTPS подключений то round-trip time неважно, ибо аутентификация происходит лишь раз при создании связи в то время как с HTTPS она происходит при каждом запросе

Yaroslav
05.09.2017
10:28:09
Ну и возвращаемся к ситуации. Которая звучит примерно так:
Если у тебя маленькое приложение и сколько-то там юзеров. То храни хоть по фазе луны.
Если микросервисов много, то дабы не застрять в болоте синхронизаций валидации и боязни получить разрыв (а ведь до этого не было ни единого разрыва!), то все велосипеды уже придуманы до нас.

Roman
05.09.2017
10:30:44
в таком случае WSS + Sessions Service

Yaroslav
05.09.2017
10:32:23
можно даже и без вебсокетов, преждевременная оптимизация это глобальная проблема наряду с инвалидацией кеша и неправильными названиями переменных

Google

Roman
05.09.2017
10:34:13
лучше через один WSS канал и API и notifications пушать и аутентифицироваться лишь раз, чем API по HTTPS а notifications по WSS и в каждом HTTPS запросе по разу аутентифицировать

Yaroslav
05.09.2017
10:40:32
Тоесть я правильно понимаю, что ты и апи хочешь гонять по сокетам?

Roman
05.09.2017
10:43:18

Rafael
05.09.2017
10:44:10
Wss требует скурпулезной работы над системой ивентов
Согласен с Ярославом что это преждевременная оптимизация

Yaroslav
05.09.2017
10:46:38
Ну у меня веб это просто фан а не работа, да и ковыряю я его по настроению, так что могу ошибаться. Но..
Ты можешь закинуть запрос и никогда не получить ответ. Так и ждать.
Туда же пробемы с статусом, и то что написал Рафик.
Ты не можешь на коленке склепать curl.
И если твое апи становится хоть немного открытым, даже в закрытом круге ты превращаешь работу не твоих приложений с твоим сервисом в такой сбе местечковый ад
Могу ошибаться. Поправте если чего не так

Rafael
05.09.2017
10:47:42
На самом деле я уверен, что это всё решено, если это модификация crud и под это дело уже сделали свой apipie/apicase

Roman
05.09.2017
10:47:49
никто не мешает предоставлять и HTTPS и WSS, не вижу проблемы... просто интерфейсы разные, а функционал на сервере один и тот-же
просто с WSS все данные по одному каналу идут и аутентификация лишь одна
нам не нужен CRUD


Rafael
05.09.2017
10:49:33
Типо у них коннекторы написаны, чтобы абстрагироваться от слоя запросов
Козуля рассказывал про фронтэнд Финама.
Стек
Очень core-части пишутся на Java, гоняются в GWT и closure compiler. Потому что кроссплатформенность. Protobuf, TypeScript.
Архитектура
Разбито по модулям: ПАПКА (господи, я же просил) со всем, что относится к модулю (иконки, хелперы, etc).
Сначала пытались класть по src/{components, reducers, actions}, но решили группировать по модулям src/{module}/{reducers|components|actions|helpers}.
Логично — так намного удобнее работать, сам в какой-то момент пришёл к этому.
Нейминг
Сначала было Form, потом SuperFormOfSubmitUserData, но затем из-за модульной архитектуры (см. выше) откатились к Form — когда импортишь форму из какого-то модуля, всё и так семантично становится.
Про архитектуру, pt. 2
В проекте есть куча мапперов, куча форматтеров, коннекторов. Всё в модулях.
Маппер: функция преобразующая одну структуру в другую
Форматтер: форматирует значение по правилам
Коннекторы: HoC, в который пробрасываются данные с сервера. Абстрагирует работу с сервером от рендера
Датафлоу
Источник данных → коннектор → маппер → форматтер → интерфейс. Из интерфейса данные отправляются в источник данных через редакс.
Способы оптимизации рендера
Самые тупые: sCU, PureComponent
Поумнее: recompose, reselect
Если не помогло: выпилить Редакс
Если и это не помогло: выпилить Реакт
Переходите на ХТМЛ! Мораль: Редакс или Реакт не всегда нужны для каких-то вещей, иногда можно тултип сделать через атрибут title.
В Редаксе хранят данные, которые отправят в локалсторейдж, чисто данные. Интерфейсные вещи хранятся в локальном стейте (открыто/закрыто меню, показан тултип, etc).
Лайфсайкл вывода продукта
Выходят много спецпроектов, много релизов, поэтому есть четкий флоу.
1. прототип — create-react-app, все компоненты в одной куче, плюс material-ui
2. релиз — вставляют редакс потому что нужно систематизировать (минутка рекламы: редакс )
3. рефакторинг — бьют на модули, разбивают на подкомпоненты, етц
4. оптимизация — кладут по пакетам бизнес-логику, помогает jFrog Artifactory, самое сложное — ридми и ченджлог
В итоге когда всё в пакетах, то разработка продукта превращается в конфигурацию и шаблон.
Вот выжимка


Yaroslav
05.09.2017
10:50:33
я не вижу кабздец проблемы в том чтобы использовать Rest и гонять в хедере куку или токен приложеньки
Выпилить реакт - вот там подгорело наверно у смузи-фронтов)

Rafael
05.09.2017
10:53:02

Yaroslav
05.09.2017
10:54:42
Кстати о похожем говорил Умпутун в послднем подкасте. Но фин, в частности банки и трейдинг, а так же игры на деньги это отдельно стоящая немного в стороне часть веба.

Google

Rafael
05.09.2017
10:55:25

Yaroslav
05.09.2017
10:57:00
Обычно все пишут лендосы, максимум с калькуляторами и воронкой заказв. Магазины с базой товаров которая вся поместиться в 30% памяти средней паршивости вдс-ки. Блоги котигов. Админки и внутри корпоративные приложеньки.
Почему?
Почему трейдинг стоит в стороне?

Roman
05.09.2017
10:58:53

Yaroslav
05.09.2017
11:00:08

Roman
05.09.2017
11:00:29
угу)

Alisher
05.09.2017
11:02:13
У кого есть проект на продакшн стоят уже , на vue , можно посмотреть ?

Владимир
05.09.2017
11:04:02

Ivan
05.09.2017
11:04:02

Stanislav
05.09.2017
11:04:10

Yaroslav
05.09.2017
11:05:59
рынок хавает)
Самое главное что у меня есть знакомый с вебстудией и людьми которые натурально а не виртуально берут заказы в штатах, эмиратах и так по мелочи дальше.
В лофте сидит пачка прогреров на вордпресе. Я хз штук 50. В среднемпо штуке $ зп.
Они просто мега пачками по своим шаблонам клепают разного рода такую утварь и летит у него. Летит очень.
И человек который разрабатывает сложны сервис. Оптимизированный, по канонам сделанный может и доли не иметь от вала того что клепает первый.

Stanislav
05.09.2017
11:06:42
Да так оно и есть)

Roman
05.09.2017
11:07:16
this.$nextTick попробуй

Stanislav
05.09.2017
11:08:17
this

Владимир
05.09.2017
11:09:08

Stanislav
05.09.2017
11:09:38

Roman
05.09.2017
11:10:14

nikolay
05.09.2017
11:12:46
изучаю vuex, из одного видео я сделал заключение. что все будет через computed - что мне совсем не нравится. из второго видео - все изменения нужно делать через dispatch?
мне кажется я что-то не понимаю.

Google

Roman
05.09.2017
11:13:16

Roman
05.09.2017
11:13:33

Stanislav
05.09.2017
11:13:36

nikolay
05.09.2017
11:17:12
мы работаем над SPA, сторона сервера - АПАЧ, PHP. все построено на динамических компонентах (которые погружаются аяксом через роутер). немножко трудно, что везде примеры на node.JS и не всегда понятно как оно должно работать. я хочу использовать VUEX что бы был один источник данных, в случае если у меня страница состоит из нескольких компонентов. действительно ли правильный метод. все данные передавать в компонент из VUEX через computed?

Rai
05.09.2017
11:18:27
Слушайте, генерю форму в ручную тоесть отправляю запрос получаю json с типами инпутов сохранил допустим в formData.
отображаю в темплейте фориком. Problem -> v-model does not support dynamic input types. Use v-if branches instead. Как быть?

Stanislav
05.09.2017
11:18:55

Roman
05.09.2017
11:19:23

Rai
05.09.2017
11:20:15

Roman
05.09.2017
11:21:30

Rai
05.09.2017
11:22:52

Stanislav
05.09.2017
11:24:23

Владимир
05.09.2017
11:31:21

Rai
05.09.2017
11:32:08
https://jsfiddle.net/c01nd01r/mm9szqvy/1/
не у меня не все так просто
получаю я что-то ввиде
{
"username": {
"model": "String",
"title": "Имя пользователя",
"value": "Имя",
"type": "text"
},
}
по этому форик выглядит так
<div class="form-group" v-for="(form, key) in formData">
и если делать v-model=formData[key] не катит

Alex
05.09.2017
11:32:30

Stanislav
05.09.2017
11:33:15

Rai
05.09.2017
11:33:56

Roman
05.09.2017
11:34:55

Владимир
05.09.2017
11:36:24

Rai
05.09.2017
11:36:46
а я и не знал v-model="username" == @input="username = $event.target.value"?

Alex
05.09.2017
11:36:56
Без стрелочной функции тоже можно) просто сохранять ссылку, это обычный js

Google

Alex
05.09.2017
11:37:25

Владимир
05.09.2017
11:37:38

Alex
05.09.2017
11:37:55

Stanislav
05.09.2017
11:38:11

Roman
05.09.2017
11:38:33

Yaroslav
05.09.2017
11:39:31
Та блин народ, я уважаю ответы здесь и отвечающих. Но если человек недогоняет this он тратит ваше время.

Roman
05.09.2017
11:40:26

Владимир
05.09.2017
11:40:37
Я из примера сразу вспомнил о чем речь)

Stanislav
05.09.2017
11:40:56

Rafael
05.09.2017
11:42:02

Yaroslav
05.09.2017
11:42:41

Владимир
05.09.2017
11:43:25
Зато столько плюсов ему в карму!)

Rafael
05.09.2017
11:43:54

Владимир
05.09.2017
11:45:00
Не страшно) Зато прокачаюсь, смогу сам помогать и компенсирую)

Kelin
05.09.2017
11:57:22

Roman
05.09.2017
11:57:25

Kelin
05.09.2017
11:57:42
Обычно те, кто больше гуглит и меньше задаёт глупых вопросов, добиваются большего
Потому что сами ковыряются и лучше разбираются, нежели им какой-нибудь дядя готовое решение написал
Вот