preloadRouteComponents
preloadRouteComponents は、Nuxt アプリ内で個々のページを手動でプリロードすることを可能にします。
ルートのプリロードは、ユーザーが将来的に移動する可能性のある特定のルートのコンポーネントを読み込みます。これにより、コンポーネントが早期に利用可能になり、ナビゲーションを妨げる可能性が低くなり、パフォーマンスが向上します。
NuxtLink コンポーネントを使用している場合、Nuxt は必要なルートを自動的にプリロードします。
例
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 が便利です。
※このページは Nuxt.js 公式ドキュメントの翻訳ページです。
公式ドキュメントの該当ページはこちら:
https://nuxt.com/docs/3.x/api/utils/preload-route-components