Basic Svelte
Bindings
Classes and styles
Advanced Svelte
Advanced reactivity
Motion
Advanced bindings
Advanced transitions
Context API
Special elements
<script module>
Next steps
Basic SvelteKit
Introduction
Routing
Loading data
Headers and cookies
Shared modules
API routes
$app/state
Errors and redirects
Advanced SvelteKit
Page options
Link options
Advanced routing
Advanced loading
Environment variables
Conclusion
この演習では、/slow-a と /slow-b の両方のルートにわざと遅延を設けています (load 関数でそれを行っています)。つまり、そこに移動しようとすると時間がかかるようになっています。
データの読み込みをいつも速くできるとは限りません — コントロールできないこともあります — しかし、SvelteKit は事前読み込みをすることで、ナビゲーションを高速化することができます。<a> 要素に data-sveltekit-preload-data 属性を付けると、デスクトップの場合はリンクをホバーしたとき、モバイルの場合はリンクをタップしたとき、すぐにナビゲーションを開始します。これをリンクに付けてみましょう:
<nav>
<a href="/">home</a>
<a href="/slow-a" data-sveltekit-preload-data>slow-a</a>
<a href="/slow-b">slow-b</a>
</nav>/slow-a へのナビゲーションが格段に速くなるはずです。click イベントの登録を待つのではなく、ホバーやタップでナビゲーションで開始するのは、あまり違いがないように聞こえるかもしれませんが、実際には、通常 200ms 以上短縮することができ、遅いか速いか違いを感じるのに十分な差となります。
この属性は、個々のリンクに付けることもできますし、リンクを含む任意の要素に付けることもできます。デフォルトのプロジェクトテンプレートでは、<body> 要素に付いています:
<body data-sveltekit-preload-data>
%sveltekit.body%
</body>この属性に以下の値のいずれかを指定すると、この動作をさらにカスタマイズすることができます:
"hover"(デフォルト。モバイルでは"tap"にフォールバックする)"tap"— タップしたときのみプリロードを開始する"off"— プリロードを無効にする
data-sveltekit-preload-data を使用すると、偽陽性(false positives)になることがあります。つまり、ナビゲーションを先読みしてデータを読み込むもののそのあと実際にはナビゲーションしないことがあり、それが望ましくない場合もあるということです。代わりに data-sveltekit-preload-code を使用すると、データを読み込むことなくそのルートに必要な JavaScript をプリロードすることができます。この属性は以下の値を持つことができます:
"eager"— ナビゲーションに続いてページ上の全てをプリロードする"viewport"— viewport に表示されているものを全てプリロードする"hover"(デフォルト) 上記の通り"tap"— 上記の通り"off"— 上記の通り
$app/navigation からインポートできる preloadCode と preloadData を使うと、プログラムでプリロードを開始することができます:
import { preloadCode, preloadData } from '$app/navigation';
// preload the code and data needed to navigate to /foo
preloadData('/foo');
// preload the code needed to navigate to /bar, but not the data
preloadCode('/bar');<h1>home</h1>