Web Worker 不需要註冊,Service Worker 才需要
new Worker(url)就是啟動——沒有 DI container、沒有 provider、沒有登記處。要register()的是 Service Worker。
| Service Worker | Web Worker | |
|---|---|---|
| 建立 | navigator.serviceWorker.register('/sw.js') | new Worker(url) |
| 生命週期 | 跟分頁無關,關掉瀏覽器再開還在 | 綁在建立它的分頁 |
| 安裝 | 有 install / activate 階段與版本更新 | 沒有這些概念 |
| 作用範圍 | 有 scope,一個 origin 一份 | 沒有 scope,想開幾個開幾個 |
| 為什麼要註冊 | 它要在沒有分頁時也能被瀏覽器喚醒,必須登記在 origin 層級 | 不需要——它只為這個分頁活著 |
那一行執行的當下:瀏覽器抓那個 JS 檔 → 開一條新執行緒 → 執行檔案內容 → worker 裡的 self.onmessage 掛上去 → 開始等訊息。
打包器的 worker 設定不是註冊,是 build 期的字串改寫 → 打包器靠 AST 形狀認出 worker,改寫法會靜默失效。
記憶體上兩者都不會另外拿到配額 → Worker 與分頁共用同一份記憶體配額。