brand logo

ドキュメント

preloadRouteComponents

preloadRouteComponents は、Nuxt アプリ内で個々のページを手動でプリロードすることを可能にします。

ルートのプリロードは、ユーザーが将来的に移動する可能性のある特定のルートのコンポーネントを読み込みます。これにより、コンポーネントが早期に利用可能になり、ナビゲーションを妨げる可能性が低くなり、パフォーマンスが向上します。

NuxtLink コンポーネントを使用している場合、Nuxt は必要なルートを自動的にプリロードします。

こちらも参照 api > components > nuxt-link

navigateTo を使用する際にルートをプリロードします。

// この非同期関数を待機しないことで、レンダリングをブロックしないようにします
// このコンポーネントの setup 関数
preloadRouteComponents('/dashboard')

const submit = async () => {
  const results = await $fetch('/api/authentication')

  if (results.token) {
    await navigateTo('/dashboard')
  }
}
こちらも参照 api > utils > navigate-to

サーバー上では、preloadRouteComponents は効果を持ちません。

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

NuxtのpreloadRouteComponentsとは?〜高速なページ遷移を実現するプリロード機能〜

Nuxtアプリケーションでユーザーがページを移動する際、遷移先のページコンポーネントを事前に読み込んでおくことで、表示までの待ち時間を短縮できることをご存知でしょうか?
preloadRouteComponents は、特定のルートのコンポーネントを手動でプリロード(事前読み込み)するためのAPIです。これにより、ユーザーが実際にそのページに遷移した際の読み込み遅延を減らし、スムーズなナビゲーション体験を提供できます。

公式の NuxtLink コンポーネントは自動的にリンク先のルートをプリロードしますが、動的にルートを切り替える場合や、ユーザーの行動を予測して先回りしたい場合には、preloadRouteComponents を使うことでより細かい制御が可能です。


まず結論:preloadRouteComponentsのポイント

  • 特定のルートのコンポーネントを手動でプリロードできる
    ユーザーが将来訪れる可能性のあるページを先に読み込むことで、遷移時の待ち時間を減らせる。

  • NuxtLinkの自動プリロードと併用可能
    自動プリロードではカバーしきれないケースでの補完に最適。

  • サーバーサイドでは効果がない
    クライアントサイドでのみ動作し、SSRフェーズでは無視される。

  • 非同期処理をブロックしないように呼び出すのがベスト
    プリロードはレンダリングの妨げにならないよう、非同期で実行する。


いつ使うべき?使わない方がよいケースは?

使うべきケース

  • ユーザーの操作に応じて遷移先が動的に決まる場合
    例:ログイン後に特定のダッシュボードへ遷移する際、事前にコンポーネントを読み込んでおく。

  • ページ遷移のレスポンスを極力速くしたい場合
    重要なUX改善として、遷移先のコンポーネントを先に読み込むことで体感速度を向上。

  • 複数のページをまとめてプリロードしておきたい場合
    例えば、ユーザーがよく訪れるページ群をまとめてプリロードし、スムーズな操作感を実現。

使わない方がよいケース

  • すでに NuxtLink を使っていて自動プリロードが十分な場合
    不必要にプリロードを増やすと帯域やメモリを無駄に消費する可能性がある。

  • サーバーサイドレンダリング中に呼び出しても効果がないため、SSRフェーズでの使用は意味がない。

  • ユーザーがほぼ訪れないページをプリロードするとパフォーマンス悪化の原因になる。


実務でよくあるユースケースとサンプルコード

1. ログイン後のリダイレクト先を事前にプリロード

ユーザー認証後に遷移するダッシュボードページを先に読み込んでおく例です。

export default {
  setup() {
    // setup内で非同期にプリロードを開始(レンダリングはブロックしない)
    preloadRouteComponents('/dashboard')

    const submit = async () => {
      const results = await $fetch('/api/authentication')
      if (results.token) {
        await navigateTo('/dashboard')
      }
    }

    return { submit }
  }
}

2. ユーザーの行動予測に基づくプリロード

例えば、フォーム入力が完了したら次のステップのページをプリロードしておくことで、遷移を高速化します。

const onFormComplete = () => {
  preloadRouteComponents('/next-step')
}

3. 複数の関連ページをまとめてプリロード

ユーザーがよく閲覧する複数のページをまとめてプリロードし、UXを向上させる例です。

const preloadCommonPages = () => {
  ['/profile', '/settings', '/notifications'].forEach(route => {
    preloadRouteComponents(route)
  })
}

よくある落とし穴・注意点

SSR環境での無効性

preloadRouteComponents はクライアントサイドでのみ効果を発揮します。サーバーサイドレンダリング中に呼び出しても何も起こりません。したがって、SSRフェーズでの副作用を期待しないようにしましょう。

Hydrationとの関係

プリロードはあくまでコンポーネントの読み込みを先行させるだけで、VueのHydration(サーバーから送られたHTMLに対するクライアント側の再活性化)とは別の処理です。プリロードしたからといってHydrationが高速化するわけではありませんが、コンポーネントの読み込み遅延が減るため、結果的に体感速度は向上します。

過剰なプリロードはパフォーマンス悪化の原因に

必要以上に多くのルートをプリロードすると、ネットワーク帯域やメモリを圧迫し、逆にパフォーマンスが低下することがあります。ユーザーの行動をよく分析し、本当に必要なルートだけをプリロードすることが重要です。

非同期呼び出しでレンダリングを妨げない

プリロードは非同期で呼び出し、レンダリングのブロックを避けるのがベストプラクティスです。setup関数内でawaitせずに呼び出すなど、UIの初期表示を遅らせない工夫が必要です。


まとめ

preloadRouteComponents は、Nuxtアプリのページ遷移をよりスムーズにするための強力なツールです。ユーザーの行動を予測して必要なページを先に読み込むことで、UXの向上やパフォーマンス改善に役立ちます。
ただし、SSR環境では効果がなく、過剰なプリロードは逆効果になるため、適切なタイミングと範囲での利用が重要です。
公式の NuxtLink の自動プリロードと組み合わせて、実務での最適なナビゲーション体験を目指しましょう。


NuxtLink コンポーネントは自動的にリンク先のルートをプリロードしますが、動的な遷移やユーザー行動に応じた先回りプリロードには preloadRouteComponents が便利です。