コンテンツにスキップ

アセット、メタデータ、CSS

サードパーティ JavaScript

サードパーティ JavaScriptとは、サードパーティのソースから追加されたすべてのスクリプトを指します。通常、サードパーティスクリプトは、分析、広告、カスタマーサポートウィジェットなど、ゼロから記述する必要がない新しい機能をサイトに導入するために含まれます。

サードパーティ JavaScript の追加

Next.js ページにサードパーティスクリプトを追加する方法について詳しく見ていきましょう。

エディターで pages/posts/first-post.js を開き、次の行を見つけます

<Head>
  <title>First Post</title>
</Head>

メタデータに加えて、できるだけ早くロードして実行する必要があるスクリプトは、通常、ページの <head> 内に追加されます。通常の HTML <script> 要素を使用すると、外部スクリプトは次のように追加されます

<Head>
  <title>First Post</title>
  <script src="https://#/en_US/sdk.js" />
</Head>

このスクリプトには、Facebook ソーシャルプラグインやその他の機能の導入によく使用される Facebook SDK が含まれています。このアプローチは機能しますが、この方法でスクリプトを含めると、同じページでフェッチされた他の JavaScript コードとのロードタイミングが明確になりません。特定のスクリプトがレンダリングをブロックし、ページコンテンツのロードを遅らせる可能性がある場合、パフォーマンスに大きな影響を与える可能性があります。

Script コンポーネントの使用

next/script は HTML <script> 要素の拡張機能であり、追加のスクリプトがフェッチおよび実行されるタイミングを最適化します。

同じファイルで、ファイルの先頭に next/script から Script のインポートを追加します

import Script from 'next/script';

次に、FirstPost コンポーネントを更新して、Script コンポーネントを含めます

export default function FirstPost() {
  return (
    <>
      <Head>
        <title>First Post</title>
      </Head>
      <Script
        src="https://#/en_US/sdk.js"
        strategy="lazyOnload"
        onLoad={() =>
          console.log(`script loaded correctly, window.FB has been populated`)
        }
      />
      <h1>First Post</h1>
      <h2>
        <Link href="/">← Back to home</Link>
      </h2>
    </>
  );
}

Script コンポーネントで、いくつかの追加のプロパティが定義されていることに注意してください

  • strategy は、サードパーティスクリプトをロードするタイミングを制御します。lazyOnload の値は、Next.js に、この特定のスクリプトをブラウザーのアイドル時に遅延ロードするように指示します
  • onLoad は、スクリプトのロードが完了した直後に JavaScript コードを実行するために使用されます。この例では、スクリプトが正しくロードされたことを示すメッセージをコンソールに記録します

https://:3000/posts/first-post にアクセスしてみてください。ブラウザーの開発ツールを使用すると、上記のメッセージが Console パネルに記録されているはずです。さらに、window.FB を実行して、スクリプトがこのグローバル変数を設定したことを確認できます。

注: Facebook SDK は、サードパーティスクリプトをパフォーマンスの高い方法でアプリケーションに追加する方法を示すための、作為的な例としてのみ使用されました。Next.js にサードパーティ機能を含める基本的な方法を理解したので、先に進む前に、FirstPost から Script コンポーネントを削除できます。

Script コンポーネントの詳細については、ドキュメントを参照してください。

簡単な復習: next/script は、あなたにとって何を簡素化しますか?