Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL でネストしたクエリを書いたら Apollo Client が無限に計算し続ける...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for whatasoda whatasoda
November 02, 2023
640

GraphQL でネストしたクエリを書いたら Apollo Client が無限に計算し続けるようになった話

Hasura User Group Tokyo Meetup #3 で登壇した際のスライドです

こちらの記事に同じ内容が動く動画つきで載っています https://zenn.dev/whatasoda/articles/c79e71b74db9e2

Avatar for whatasoda

whatasoda

November 02, 2023
Tweet

Transcript

  1. 自己紹介 Shota Hatada (whatasoda) Digital Hollywood University (日本の大学) mercari (2020/04

    - 2022/09) フロントエンドチーム dinii (2022/10 -) Platform Team フロントエンドの基盤部分の実装を触ったりたまにインフラを触ったり色々 趣味:スキー お酒 アニソン
  2. なぜ起きるの…? • 受け取ったデータを クエリの形状通りにキャッシュに書き込む ために検証っぽいことをしている ◦ キャッシュを使わなければ特に計算しない • クエリのフィールドの端の端までの丁寧な検証を 一つの同期処理上でやっている

    ◦ 他のあらゆる処理をブロックしてしまってフリーズしていた • 計算コストはざっくり『受け取るデータの数』 ×『クエリの複雑度』と言えそう ◦ 今回 paragraph の中身には id と text があるので paragraph の数 × 2 回検証するイメージ 『GraphQL クエリの形状が複雑』 AND 『受け取るデータの数が多い』 THEN フリーズの危険性がある
  3. 対策は…? • データを分割して取得する(ページネーションとか) • クエリの複雑度を抑える(一部を JSON Text として返す…?) マスターデータを全部取っておきたいので全件取得のほうが楽 …

    Hasura の Relationship を使っているのでクエリの複雑度はなかなか抑えられない … というか、そもそもキャッシュの検証って必要? 実は必要ないのでは …?