0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

useAsyncData 機能(Nuxt3)の重複リクエスト(HTTP)を排除する仕組みを解説

Posted at

Nuxt 3 の useAsyncData 機能がバックエンド(サーバーサイドレンダリング)とクライアントサイドでの重複HTTPリクエストを排除する仕組みは、データのキャッシュと再利用を活用しています。以下の流れで実現されています:


1. サーバーサイドでデータを取得

  • サーバーサイドレンダリング(SSR)の際、useAsyncData を利用して非同期データを取得します。
  • サーバーサイドでデータを取得すると、その結果が HTML と一緒に生成され、レスポンスとしてクライアントに送信されます。
  • データは Nuxt payload としてページの HTML 内に埋め込まれます。このデータは <script> タグ内に JSON フォーマットでシリアライズされ、クライアント側で直接利用可能になります。

2. クライアントサイドでのデータ利用

  • クライアントがページを受け取ると、useAsyncData はまずサーバーから埋め込まれた Nuxt payload を確認します。
  • useAsyncData は、リクエストしたデータが既に payload に存在している場合、新たにHTTPリクエストを送らず、そのデータを直接再利用します。
  • この仕組みによって、クライアントでの同じデータに対する重複リクエストが排除されます。

3. 再利用のキー(Key)管理

  • useAsyncData は、データ取得のリクエストごとに一意のキー(デフォルトでは useAsyncData に渡された名前)を使用します。
  • このキーを基に、サーバーサイドで取得されたデータが payload に保存され、クライアントでの参照時に利用されます。

具体的な流れをコードで説明

export default defineComponent({
  async setup() {
    const { data } = useAsyncData('exampleData', () =>
      fetch('https://api.example.com/data').then(res => res.json())
     );
    return { data };
  },
});

コードをコピーする

サーバーサイドでの流れ

  1. サーバーが fetch を実行してデータを取得。
  2. データをページの Nuxt payload に埋め込む。
    • 例:
      <script type="application/json" id="__NUXT_DATA__">
        {"data":{"exampleData":{...}}}
      </script>
      

クライアントサイドでの流れ

  1. ページロード時、useAsyncData はまず __NUXT_DATA__ の内容を確認。
  2. exampleData が既に存在していれば、再度リクエストを送らずにそのデータを利用。

4. キャッシュの利用とフレッシュデータの取得

  • キャッシュはデフォルトで有効ですが、必要に応じてリフレッシュ可能です。
  • useAsyncData のオプションで lazydefault を設定することで、データの取得タイミングやキャッシュ戦略を制御できます。

例:

useAsyncData('exampleData', fetchFunction, { lazy: true, default: () => [] });

結果的なメリット

  1. 効率的なデータ取得: SSR で一度取得したデータをクライアントでも再利用。
  2. 重複リクエストの排除: サーバーとクライアント間でデータを共有する仕組みによって不要なHTTPリクエストを防止。
  3. シームレスな体験: ユーザーはサーバーとクライアントのデータ取得プロセスの違いを意識せず、高速なデータ提供を享受。

この仕組みが、Nuxt 3 の強力なデータ管理能力の基盤となっています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?