169 похожих чатов

Во вторник (2 ноября в 17:15 Мск) я выступаю на

holyjs с докладом "Докручиваем ApolloClient до энтерпрайзной разработки".

Есть видео с прогоном секции лайф-коддинга из моего доклада:
https://www.youtube.com/watch?v=uXBr6IHDsvY&list=PLnieus7KgTVFRMDvVc0H4TMnv5CORMig0&index=1

Посмотрите кому интересен АполлоКлиент 3. Зацените как мы у себя на работе его используем (уже года полтора). Вы наверняка, что-то новое и интересное найдете для себя. Репо на гитхабе - https://github.com/nodkz/example-apollo3

Хотелось бы получить от вас фидбек, чтоб я успел до выступления поправиться:
- что было непонятно
- оговорок по видео конечно было много, но что прям я сказал такого, что можно назать "Соврал с большой буквы"
- что вызвало у вас Вау-эффект? (вдруг был такой момент)
- если вы с аполло более 2 лет: что вы нового узнали? (когда уже вроде все знаете, а тут раз и свежак)
- что бы посевотовали добавить или убрать
- ну и в целом как вам видосик?

Мой доклад будет на час (и наверное выйдет в паблик через полгода). Ну и потом еще будет дискуссионка часа на полтора (она к сожалению будет не под запись). Если подумываете купить билет, вот промокод со скидкой 10% – NODKZ2021JRGpc

20 ответов

61 просмотр

Привет, а где фидбек оставлять?

Pavel-@nodkz Автор вопроса

норм, сжато и четко. у нас на проекте такой же подход на процентов 80-90%. Автоматизация 1 в 1

Pavel-@nodkz Автор вопроса
Dm K
норм, сжато и четко. у нас на проекте такой же под...

Может что добавить есть? Интересно в чем разница - в лкчшую или худшую сторону?

Pavel @nodkz
Может что добавить есть? Интересно в чем разница -...

у нас достаточно тяжелые запросы, мы создаем еще один уровень хуков, где прячем всю логику - апдейт, ремув, апдейт кеша и тд. вотчера на генерацию типов и хуков не добавляли нету необходимости. yну и мы еще сидим на 2 аполло)

Мы у себя используем typed document node. Вопрос почему вы не используете? Ещё мы все запросы и мутации врапаем в хуки ручками и возвращаем нормализованные данные. Это упрощает нам жизнь если что-то меняется в схеме. Также гораздо проще рефакторить код. Полностью отказались от локального стейта аполло. Есть гараздо проще альтернативы и работают гараздо быстрее, аполло кэш ну очень медленный, когда запросов становится много.

Alex
Мы у себя используем typed document node. Вопрос п...

плюсую за typed document node, именно эти и юзаем. а что для стейта используете?

Pavel-@nodkz Автор вопроса
Alex
Мы у себя используем typed document node. Вопрос п...

typed-document-node вы скорее всего с urql используете. С аполло клиентом он менее удобен. У нас все запросы и фрагменты уникальны. К каждой компоненте идет свой набор "запчестей" графкуэль запросов. И эти запчасти всегда лежат рядом с компонентой, чтоб открывая папку сразу видеть насколько компонента и как зависит от сервера. Ну и изменения любой запчасти, не повлияет на другие компоненты, поэтому у нас рефакторинг тоже достаточно простой. Аполло действительно тормознутый, но для большинства задач его хватает с лихвой. Там где большие таблицы, или идет частое обновление мы без кеша и нормализации юзаем. Но таких мест раз два и обчелся. У вас я так понимаю urql используется?

Alex
Jotai

интересно. удобна ли такая атомность для хранения больших данных с графкл?

Dm K
интересно. удобна ли такая атомность для хранения ...

Нет мы не дублируем данные из кеша в локальный стейт. Только локальные поля. Могу привести реальный пример: есть массив из тысячи статей. Нам необходимо добавить чекбоксы к каждой статье. Самый очевидный вариант просто расширить тип статьи полем checked, но при таком подходе аполло кеш очень медленный когда нужно выделить все статьи или несколько статей. Что мы делаем, храним ids с клиентскими полями в jotai, пишем локальный резолвер в typePolicies - getArticleById. Каждый компонент статьи получает id и checked и вызывает getArticleById для получения данных с кеша. Убиваем 2 зайцев, убрали проблему с перформансом, переререндер происходит только там где надо. Раньше так делали на редаксе.

Pavel @nodkz
typed-document-node вы скорее всего с urql использ...

У тебя в видео есть кусок про improtReactHooksFrom. Где можно глянуть на твою имплементацию?

Pavel @nodkz
typed-document-node вы скорее всего с urql использ...

Вы не шарите фрагменты в приложении? Т.е. все фрагменты у вас уникальны?

Alex
Нет мы не дублируем данные из кеша в локальный сте...

отличнй пример, локальный резолвер в смысле через филд резолвер и @client директивой? Мы конечно с резолверами не заморачиваемся, у нас в кеше нету больших листов максимум 50 айтемов, но да, если надо селектить айтемы то в редаксе храним айдис

Alex
У тебя в видео есть кусок про improtReactHooksFrom...

https://github.com/nodkz/example-apollo3/blob/master/src/utils/extendApolloHooks.ts

Alex
Да да филд резолвер

хмм, так зачем вообще резолвер на чекед, если хранить айдихи в атоме. на бек отправляется скорее всего что-то типа {action: ‘remove’, ids: […]}

Pavel-@nodkz Автор вопроса
Alex
У тебя в видео есть кусок про improtReactHooksFrom...

Вот репка с примером из видео https://github.com/nodkz/example-apollo3

Pavel-@nodkz Автор вопроса
Alex
Нет мы не дублируем данные из кеша в локальный сте...

Отличный кейс. У нас ребята похожим образом обходили проблему через readFragment

Pavel-@nodkz Автор вопроса
Alex
Вы не шарите фрагменты в приложении? Т.е. все фраг...

Да у нас квери и фрагменты привязаны строго к компонентам. Это именно то место, гле я ребятам говорю, что copy-paste это хорошо. Т.е. при редактировании требований к данным к компоненте, мы уверены, что ничего по соседству не сломаем. И не начнем тянуть где не надо лишние данные, когда добавим новое поле для доугой компоненты.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта