Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GraphQLの オフライン対応した話 Takanori Oki @PWA Beginners 勉強会 #4
Slide 2
Slide 2 text
自己紹介 • 大木尊紀(オオキタカノリ / @takanorip) • 株式会社スマートドライブ フロントエンドエンジニア • Nuxt.js、Polymer、React、など • Polymer Japan 翻訳チーム
Slide 3
Slide 3 text
「イヌでもわかる〜」シリーズ Boothで好評発売中!
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
GraphQL?
Slide 6
Slide 6 text
GraphQL / Apollo Client • GraphQL • APIへリクエストするためのクエリ言語 • apollo-client • フロントエンドからGraphQLへリクエスト するためのツール
Slide 7
Slide 7 text
GraphQLのリクエスト結果は ServiceWorkerだけだと キャッシュされない
Slide 8
Slide 8 text
なぜ?
Slide 9
Slide 9 text
GraphQLは すべてのリクエストが POSTメソッド だから!
Slide 10
Slide 10 text
Cache.put と、Cache.add、 Cache.addAll は、 GET リクエストのみ cache に保存できます。 出典:MDN
Slide 11
Slide 11 text
別途、GraphQLの オフライン対応が必要
Slide 12
Slide 12 text
じゃあどうするの? • リクエスト結果をIndexedDBなどに保存 • オフラインエラーのときはIndexedDBに 保存したキャッシュに向けて再度リクエストを 投げる • その結果を使ってViewを表示
Slide 13
Slide 13 text
apollo-cache-persist • GraphQLのキャッシュをオフラインストレージ に入れることで永続化するライブラリ • localStorage、sessionStorage、 localForageに対応してる • https://github.com/apollographql/ apollo-cache-persist
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
補足:localForage • 非同期ストレージ(IndexedDBやWebSQL) をlocalStorageライクなAPIで使えるように してくれる • IndexedDBやWebSQLがサポートされてな いブラウザだとlocalStorageを使う • (localStorageは同期的)
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
apollo-link-retry • ネットワーク接続がオフラインのとき、リクエスト を保持し、オンラインに戻るまで再試行する • オフラインのときにすぐこけない • 間隔や遅延などをコントロールできる
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
Optionの設定 • apollo-clientの設定でキャッシュを優先的に 参照するようにする
Slide 20
Slide 20 text
No content
Slide 21
Slide 21 text
まとめ
Slide 22
Slide 22 text
• GraphQLはServiceWorker だけじゃオフライン対応できない • localForageが有能 • キャッシュに対してクエリを投げる
Slide 23
Slide 23 text
おわり (フォント:BIZ UDフォント)