跳轉到主要內容
不必自訂 bundler 設定,就能在擴充功能中使用 WebAssembly。 Extension.js 在 Rspack pipeline 中內建 WebAssembly(Wasm)的預設配置,常見的 Wasm 流程無需額外設定即可運作。

什麼情況下適合使用 WebAssembly

  • 你的擴充功能會執行運算吃重的工作(剖析、媒體、光學字元辨識(OCR)、各種轉換)。
  • 你需要對經常執行的程式碼路徑取得接近原生的效能。
  • 你想沿用 web 專案中既有的 Wasm 模組。

WebAssembly 能做到的事

能力帶來什麼好處
內建的 Wasm pipeline 預設值不必手動串接 bundler,即可執行常見的 Wasm 流程
非同步 Wasm 支援在擴充功能情境下載入 .wasm 模組
執行期相容性輔助處理常見 Wasm 生態的資源模式
一般指令工作流程以一般的 devbuild 指令使用 Wasm

範本範例

sidebar-transformers-js template screenshot 以 Transformers.js 結合 WebAssembly 推論能力的 AI/ML sidebar 擴充功能。
npx extension@latest create my-extension --template=sidebar-transformers-js
Repository: extension-js/examples/sidebar-transformers-js

Extension.js 啟用了什麼

Wasm plugin 會設定:
  • experiments.asyncWebAssembly = true
  • 模組解析中加入 .wasm 副檔名
  • 為常見 Wasm 函式庫設定路徑別名(例如處理媒體的 ffmpeg、影像處理的 imagemagick,以及做 OCR 的 tesseract),讓執行期能正確解析 import。
這能減少從擴充功能 script/頁面匯入 Wasm 模組時的樣板程式碼。

使用方式

在一般的開發/建置流程中使用擴充功能裡的 Wasm 模組:
npx extension dev ./my-extension
你也可以用一個已知的公開 Wasm 範例來測試:
npx extension@latest dev https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.wasm-helloworld-print

典型用途

  • 運算吃重的剖析/轉換。
  • 媒體處理 pipeline。
  • OCR/影像處理流程。
  • 對效能敏感、會在 web 與 runtime 情境共用的演算法。

最佳實務

  • 讓 Wasm 模組專注在效能熱點,把協調邏輯留在 JavaScript/TypeScript。
  • 驗證輸出體積與載入時機在各擴充功能情境(background、content script、頁面)的表現。
  • 在你會發佈的所有瀏覽器目標(chromeedgefirefox)上測試 Wasm 吃重的流程。

下一步