腳本優化
佈局腳本
若要為多個路由載入第三方腳本,請導入 next/script
並直接在您的佈局元件中包含腳本:
當用戶訪問資料夾路由(例如 dashboard/page.js
)或任何嵌套路由(例如 dashboard/settings/page.js
)時,第三方腳本會被獲取。Next.js 會確保腳本僅載入一次,即使用戶在同一個佈局中的多個路由之間導航。
應用程式腳本
若要為所有路由載入第三方腳本,請導入 next/script
並直接在您的根佈局中包含腳本:
當應用程式中的任何路由被訪問時,此腳本將會載入並執行。Next.js 會確保腳本僅載入一次,即使用戶在多個頁面之間導航。
建議:我們建議僅在特定頁面或佈局中包含第三方腳本,以最小化對效能的任何不必要影響。
策略
雖然 next/script
的預設行為允許您在任何頁面或佈局中載入第三方腳本,但您可以使用 strategy
屬性來微調其載入行為:
beforeInteractive
:在 Next.js 的任何程式碼和頁面水合作用發生之前載入腳本。afterInteractive
:(預設)在頁面部分水合作用發生後早期載入腳本。lazyOnload
:在瀏覽器空閒時間較晚載入腳本。worker
:(實驗性)在 web worker 中載入腳本。
請參閱 next/script
API 參考文件,以了解每種策略及其使用案例的更多資訊。
將腳本卸載至 Web Worker(實驗性)
警告:
worker
策略尚未穩定,且尚不適用於app
目錄。請謹慎使用。
使用 worker
策略的腳本會被卸載並在 Partytown 的 web worker 中執行。這可以通過將主線程專用於應用程式的其餘程式碼來提高網站效能。
此策略仍處於實驗階段,只有在 next.config.js
中啟用了 nextScriptWorkers
標誌時才能使用:
然後,執行 next
(通常是 npm run dev
或 yarn dev
),Next.js 將引導您完成安裝所需套件的設定:
您將看到類似以下的指示:請通過執行 npm install @builder.io/partytown
來安裝 Partytown。
設定完成後,定義 strategy="worker"
將自動在您的應用程式中實例化 Partytown 並將腳本卸載至 web worker。
在 web worker 中載入第三方腳本時需要考慮許多權衡。請參閱 Partytown 的 權衡 文件以獲取更多資訊。
內聯腳本
Script 元件也支援內聯腳本,或非從外部文件載入的腳本。可以通過將 JavaScript 放在大括號中來編寫:
或使用 dangerouslySetInnerHTML
屬性:
警告:必須為內聯腳本分配
id
屬性,以便 Next.js 追蹤和優化腳本。
執行額外程式碼
事件處理程序可以與 Script 元件一起使用,以在特定事件發生後執行額外程式碼:
onLoad
:在腳本完成載入後執行程式碼。onReady
:在腳本完成載入後以及每次元件掛載時執行程式碼。onError
:如果腳本載入失敗,則執行程式碼。
這些處理程序僅在 next/script
被導入並在 客戶端元件 中使用時有效,其中 "use client"
被定義為程式碼的第一行:
請參閱 next/script
API 參考,以了解每個事件處理程序的更多資訊並查看範例。
其他屬性
有許多 DOM 屬性可以分配給 <script>
元素,這些屬性未被 Script 元件使用,例如 nonce
或 自訂資料屬性。包含任何其他屬性將自動將其轉發到最終優化的 <script>
元素,該元素包含在 HTML 中。