動態導入 (Dynamic Imports)
在本課程中,我們將減少初始頁面載入時從第三方函式庫載入的 JavaScript 數量。
Next.js 支援 ES2020 的 動態 import()
語法來載入 JavaScript。透過它,你可以動態導入 JavaScript 模組並使用它們。此功能也支援伺服器渲染 (SSR)。
你可以將動態導入視為另一種將程式碼拆分為可管理區塊的方式。
開啟 pages/index.js
檔案,並移除檔案開頭的這兩個導入語句,因為我們稍後會在檔案中動態導入它們。
import Fuse from 'fuse.js';
import _ from 'lodash';
目前我們還需要移除:
const fuse = new Fuse(countries, {
keys: ['name'],
threshold: 0.3,
});
現在我們已經移除了這段程式碼,讓我們設定搜尋輸入框來使用動態導入的函式庫。
我們可以用以下程式碼替換輸入框:
<input
type="text"
placeholder="Country search..."
className={styles.input}
onChange={async (e) => {
const { value } = e.currentTarget;
// 動態載入函式庫
const Fuse = (await import('fuse.js')).default;
const _ = (await import('lodash')).default;
const fuse = new Fuse(countries, {
keys: ['name'],
threshold: 0.3,
});
const searchResult = fuse.search(value).map((result) => result.item);
const updatedResults = searchResult.length ? searchResult : countries;
setResults(updatedResults);
// 模擬分析事件
console.info({
searchedAt: _.now(),
});
}}
/>
透過使用動態導入,這解決了頁面載入時「移除未使用的 JavaScript」的問題。同時也改善了我們的互動準備時間 (TTI),有助於提升 首次輸入延遲 (FID)。
讓我們在 Chrome DevTools 中再次執行 Lighthouse 報告來查看進展。
延伸閱讀
- Next.js: 動態導入文件