Size: a a a

GraphQL — русскоговорящее сообщество

2021 August 30

AK

Alexandr K in GraphQL — русскоговорящее сообщество
спасибо
источник

I

Ilya in GraphQL — русскоговорящее сообщество
А кто что использует для SSR фетчинга данных с graphql? смущает, что варианты, которые предлагает аполло, делают лишний рендер дерева
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
не замечал ререндер лишний, есть пример?
источник

AK

Alexandr K in GraphQL — русскоговорящее сообщество
introspection - а вот этот раздел доки, оч нужный или можно на первых порах без него?(т.к. не оч врубился)))
источник

I

Ilya in GraphQL — русскоговорящее сообщество
под рукой нету, могу как-нибудь собрать

но в целом getDataFromTree от аполло же примерно этим занимается как раз - обходит дерево и выполняет все запросы)

https://www.apollographql.com/docs/react/performance/server-side-rendering/#executing-queries-with-getdatafromtree
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Ну не совсем так, он берет серилизованные данные и вносит их в дерево
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Так любой SSR работает
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Он не выполняет доп запросы, только при смене состояния и недостатка данных в дереве
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
я просто вручную запросы делал пока что, но с ssr мало работал.
Вот так делал (типы генерятся через graphql-code-generator).
Всё это на базе nextjs
источник

I

Ilya in GraphQL — русскоговорящее сообщество
не, я не совсем про то, там же получается что тебе надо по сути все твое реакт дерево дважды обойти, один раз во время сбора квери, второй раз чтобы уже отрендерить с данными
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Не совсем понимаю, что не так. Лучше разделить объяснение на бфф и фронт.
1 бфф получает данные и вносит их в дерево
2 фронт скачивает html с отрендеренными компонентами (что важно) и состоянием
3 фронт заносит состояние в дерево (стейт) аполло

На этом все. Нет ререндеров лишних на фронте, на беке одно получение данных, из которых наполняют состояние и генерируют html. Для чего заполняется состояние на фронте? Для, того, чтобы при переходе на другую страницу использовать это состояние и отрисовывать уже SPA
источник

I

Ilya in GraphQL — русскоговорящее сообщество
вот меня интересует именно bff часть -

1) чтобы понять какие данные нужны для страницы - надо сначала построить страницу

то есть это уже 1 обход реакт дерева со всеми внутренними вычислениями

2) потом bff выполняет эти квери (один скопом, чтобы сделать оптимально)

3) потом реакт еще раз рендерит html уже с данными - это 2 обход
источник

I

Ilya in GraphQL — русскоговорящее сообщество
мы вот концептуально к чему-то похожему пришли, только вообще квери по факту только сервер выпонляет
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
ну вообще чтобы понять какие данные нужны, используются gql, на странице. А построения дерева нужно, чтобы понять в какой момент получать их. Без построения увы, этого не понять. Есть квери, которые имеются на странице, но в состоянии их не будет.
2 и 3 пункт выполняются в один момент времени при построении, это не считается повторным рендером, можете даже в devtools увидеть, что они конкурентно выполняются. В любом случае SSR дорогой, да, но более оптимально никак не построить. Есть небольшой лайфхак и аполло в 3 версии уже вроде умеет с ним работать, когда networkPolicy network-only, состояние в SSR прилетает пустым.
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
И запросы выполняются только на клиенте при этом
источник

I

Ilya in GraphQL — русскоговорящее сообщество
> состояние в SSR прилетает пустым.

такое к сожалению для всяких seo-проектов не работает, у меня во всех проектах надо уметь роботам отдавать осмысленные html

ок, спс за опыт, а у вас о чем приложуха?

меня вот оттолкнул аполло этой неоптимальностью немного, так как такие углы стараемся срезать
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Тогда увы никак, кроме отдачи состояния и отрендеренных компонентов, как небольшое решение, используйте кеш, спасает, особенно на публичных страницах.
У меня никакой приложухи нет) Просто работал плотно с gql, сейчас не работаю
источник

АД

Андрей Дарюшин... in GraphQL — русскоговорящее сообщество
Всем привет, есть ли способ запросить например последние 10 элементов с бека?
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
graphql это всего лишь ФОРМАТ взаимодействия клиента и сервера, а уже что можно запрашивать зависит от того как написан бэк. А так - да, можно отдавать бэком массив на фронт
источник

АД

Андрей Дарюшин... in GraphQL — русскоговорящее сообщество
Просто есть стандартный способ как взять из начала, первые 10 элементов например) а есть ли такой именно с конца? Или тут уже именно особенность бека?
источник