Webpack 會將您匯入的所有檔案合併,並封裝成一或多個稱為「組合」的輸出檔案。套件很方便,但隨著應用程式成長,套件也會增加。您需要監控套件大小,以確保組合大小不會過大,並影響應用程式的載入時間。Webpack 支援根據素材資源大小設定效能預算,並可隨時留意套件大小。
以下是應用程式計算新年到來前的剩餘天數,讓您瞭解這項功能的運作方式。這個應用程式是使用 React 和 moment.js 建構而成。(就像現實世界中的應用程式,越來越依賴架構和程式庫。😉?)。
測量
本程式碼研究室已包含與 webpack 捆綁的應用程式。
- 按一下「Remix to Edit」,即可編輯專案。
- 按一下「Terminal」 (注意:如果沒有顯示「Terminal」按鈕,您可能需要使用「Fullscreen」選項)。
- 如要取得以顏色編碼的素材資源清單及其大小,請在控制台中輸入
webpack
。
webpack
主要套件超過 244 KiB (250 KB),因此會以黃色醒目顯示。
根據預設,實際工作環境模式會啟用這類警告,且預設門檻為 244 KiB (未壓縮) 和進入點 (在頁面初始載入期間使用的所有素材資源組合)。
Webpack 不僅會發出警告,還會提供如何縮減套件大小的建議。如要進一步瞭解建議的技術,請參閱「Web 基礎知識」。
設定自訂成效預算
適當的效能預算取決於專案性質。建議您自行研究。經驗法則:提供壓縮/精簡的關鍵路徑資源,大小不超過 170 KB。
在這個簡單的示範中,我們會設定更保守的預算,將預算設為 100 KB (97.7 KiB)。在 webpack.config.js
中新增以下內容:
module.exports = {
//...
performance: {
maxAssetSize: 100000,
maxEntrypointSize: 100000,
hints: "warning"
}
};
新的成效預算以 bytes 為單位:
- 個別素材資源 (maxAssetSize) 為 100000 位元組
- 進入點的 100000 個位元組 (maxEntrypointSize)
在本例中,只有一個套件也是進入點。
提示可能的值包括:
warning
(預設):顯示黃色警告訊息,但建構作業會通過。建議在開發環境中使用。error
:顯示紅色錯誤訊息,但建構作業仍會通過。建議將這項設定用於正式版版本。false
:不會顯示警告或錯誤。
最佳化
效能預算的目的是在效能問題變得難以修正前,先向您發出警告。建構應用程式的方式不只一種,有些技巧可加快載入時間。(許多最佳化技巧都收錄在「最佳化 JavaScript」一文中。🤓?)
雖然架構和程式庫可讓開發人員的工作更輕鬆,但使用者並不在乎應用程式如何建構,只在乎應用程式是否實用且速度快。如果您發現自己超出成效預算,就該考慮可行的最佳化方式了。
在實際環境中,大型用戶端架構通常很難更換,因此謹慎使用這類架構非常重要。只要稍微研究一下,您通常就能找到熱門程式庫的較小替代方案,而且功能也一樣強大 (date-fns 是 moment.js 的絕佳替代方案)。有時,如果架構或程式庫會對效能造成重大影響,不使用這些架構或程式庫會更合理。
移除未使用的程式碼,是針對包含大型第三方程式庫的應用程式進行最佳化處理的好方法。「移除未使用的程式碼指南」詳細說明這個程序,以下是快速方法,可在不使用 moment.js 的情況下重新編寫倒數程式碼。
在 app/components/Countdown.jsx 中移除:
const today = moment();
const yearEnd = moment().endOf('year');
const daysLeft = yearEnd.diff(today, 'days');
並刪除這行:
const moment = require('moment');
這需要一點數學知識,但您可以使用一般 JavaScript 實作相同的倒數功能:
const today = new Date();
const year = today.getFullYear();
const yearEnd = new Date(year,11,31); //months are zero indexed in JS
const timeDiff = Math.abs(yearEnd.getTime() - today.getTime());
const daysLeft = Math.ceil(timeDiff / (1000 * 3600 * 24));
接著從 package.json
中移除 moment.js
,然後再次在控制台中執行 webpack,以建構經過最佳化的套件。
好啊!您已減少 223 KiB (230KB),應用程式已符合預算。🎉?
監控
如要在 Webpack 中設定效能預算,只需使用幾行程式碼即可,如果您 (意外) 新增了重要的依附元件,系統便會顯示警告。有句話說「眼不見,心不煩」,但 webpack 可確保您隨時瞭解成效影響。