オプションのプロパティ
<Script />
コンポーネントは、必須プロパティ以外にも多くの追加プロパティを受け入れます。
スクリプトの読み込み戦略。使用できる戦略は4つあります。
beforeInteractive
: Next.jsのコードとページのハイドレーションが行われる前に読み込みます。
afterInteractive
: (デフォルト) ページのハイドレーションが一部行われた後、早期に読み込みます。
lazyOnload
: ブラウザのアイドル時間中に読み込みます。
worker
: (実験的) ウェブワーカーで読み込みます。
beforeInteractive
戦略で読み込まれるスクリプトは、サーバーから初期HTMLに挿入され、Next.jsモジュールよりも前にダウンロードされ、ページでいかなるハイドレーションが発生するよりも前に、配置された順序で実行されます。
この戦略で指定されたスクリプトは、ファーストパーティのコードよりも前にプリロードおよびフェッチされますが、その実行はページのハイドレーションの発生をブロックしません。
beforeInteractive
スクリプトは、ルートレイアウト(app/layout.tsx
)内に配置する必要があり、サイト全体で必要なスクリプトを読み込むように設計されています(つまり、アプリケーションのいずれかのページがサーバーサイドで読み込まれたときにスクリプトが読み込まれます)。
この戦略は、ページのどの部分がインタラクティブになる前にフェッチする必要がある重要なスクリプトにのみ使用してください。
import Script from 'next/script'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body>
{children}
<Script
src="https://example.com/script.js"
strategy="beforeInteractive"
/>
</body>
</html>
)
}
知っておくと良いこと:beforeInteractive
を持つスクリプトは、コンポーネント内のどこに配置されていても、常にHTMLドキュメントのhead
内に挿入されます。
beforeInteractive
でできるだけ早く読み込むべきスクリプトの例としては、以下のようなものがあります。
afterInteractive
戦略を使用するスクリプトは、クライアントサイドのHTMLに挿入され、ページでハイドレーションの一部(または全部)が発生した後に読み込まれます。これはScriptコンポーネントの**デフォルトの戦略**であり、できるだけ早く読み込む必要があるが、ファーストパーティのNext.jsコードよりも前に読み込む必要がないスクリプトに使用してください。
afterInteractive
スクリプトは、任意のページまたはレイアウト内に配置でき、ブラウザでそのページ(またはページのグループ)が開かれたときにのみ読み込みと実行が行われます。
import Script from 'next/script'
export default function Page() {
return (
<>
<Script src="https://example.com/script.js" strategy="afterInteractive" />
</>
)
}
afterInteractive
の適切な候補となるスクリプトの例としては、以下のようなものがあります。
lazyOnload
戦略を使用するスクリプトは、ブラウザのアイドル時間中にクライアントサイドのHTMLに挿入され、ページ上のすべてのリソースがフェッチされた後に読み込まれます。この戦略は、早期に読み込む必要のないバックグラウンドまたは優先度の低いスクリプトに使用してください。
lazyOnload
スクリプトは、任意のページまたはレイアウト内に配置でき、ブラウザでそのページ(またはページのグループ)が開かれたときにのみ読み込みと実行が行われます。
import Script from 'next/script'
export default function Page() {
return (
<>
<Script src="https://example.com/script.js" strategy="lazyOnload" />
</>
)
}
すぐに読み込む必要がなく、lazyOnload
でフェッチできるスクリプトの例としては、以下のようなものがあります。
- チャットサポートプラグイン
- ソーシャルメディアウィジェット
警告: worker
戦略はまだ安定しておらず、app
ディレクトリではまだ機能しません。注意して使用してください。
worker
戦略を使用するスクリプトは、メインスレッドを解放し、重要なファーストパーティのリソースのみが処理されるようにするために、Webワーカーにオフロードされます。この戦略はあらゆるスクリプトに使用できますが、すべてのサードパーティスクリプトをサポートすることが保証されていない高度なユースケースです。
戦略としてworker
を使用するには、next.config.js
でnextScriptWorkers
フラグを有効にする必要があります。
module.exports = {
experimental: {
nextScriptWorkers: true,
},
}
worker
スクリプトは**現在、pages/
ディレクトリでのみ使用できます**。
import Script from 'next/script'
export default function Home() {
return (
<>
<Script src="https://example.com/script.js" strategy="worker" />
</>
)
}