擴充功能主機
擴充功能主機負責執行擴充功能。
擴充功能主機設定
根據 VS Code 的設定,會有多個擴充功能主機在不同的位置以不同的執行階段執行。
- local – 本機 Node.js 擴充功能主機在本機上執行,與使用者介面在同一部機器上。
- web – 網頁擴充功能主機在瀏覽器中或本機上執行,與使用者介面在同一部機器上。
- remote – 遠端 Node.js 擴充功能主機在容器或遠端位置遠端執行。
下表顯示在 VS Code 的各種設定中可用的擴充功能主機
設定 | 本機擴充功能主機 | 網頁擴充功能主機 | 遠端擴充功能主機 |
---|---|---|---|
桌面上的 VS Code | ✔️ | ✔️ | |
具有遠端功能的 VS Code (Container、SSH、WSL、GitHub Codespace、Tunnel) | ✔️ | ✔️ | ✔️ |
適用於網頁的 VS Code (vscode.dev、github.dev) | ✔️ | ||
適用於具有 Codespaces 的網頁的 VS Code | ✔️ | ✔️ |
擴充功能主機執行階段
- Node.js - 擴充功能在 Node.js 執行階段中執行。由本機和遠端擴充功能主機使用。擴充功能需要
main
進入檔案才能在其中執行。 - 瀏覽器 - 擴充功能在瀏覽器 WebWorker 執行階段中執行。由網頁擴充功能主機使用。擴充功能需要
browser
進入檔案才能在其中執行。請參閱網頁擴充功能指南以取得更多詳細資訊。
偏好的擴充功能位置
擴充功能載入的擴充功能主機取決於
- VS Code 設定提供的可用擴充功能主機。
- 擴充功能的功能:它是否可以在 Node.js 和/或網頁中執行,或者如果未指示,它提供哪些貢獻?
- 擴充功能安裝在哪裡:在本機、在遠端機器上,或兩者皆是。
- 擴充功能偏好的位置:
extensionKind
屬性。
extensionKind
是擴充功能資訊清單中的屬性。它允許擴充功能指定偏好的執行位置。可以是具有工作區的機器 (workspace
) 或使用者介面 (ui
)。如果擴充功能可以在兩者上執行,則可以指定偏好順序。
"extensionKind": ["workspace"]
— 指出擴充功能需要存取工作區內容,因此需要執行在工作區所在的位置。這可以在本機或遠端機器或 Codespace 上。大多數擴充功能都屬於此類別。"extensionKind": ["ui", "workspace"]
— 指出擴充功能偏好作為 UI 擴充功能執行,但對於本機資產、裝置或功能沒有任何硬性要求。當使用 VS Code 時,如果擴充功能在本機存在,則會在 VS Code 的本機擴充功能主機中執行,這表示使用者不必在遠端安裝擴充功能。否則,如果擴充功能在那裡存在,則會在 VS Code 的工作區擴充功能主機中執行。當使用具有 Codespaces 的適用於網頁的 VS Code 時,它將始終在遠端擴充功能主機中執行 (因為沒有可用的本機擴充功能主機)。"extensionKind": ["workspace", "ui"]
— 指出擴充功能偏好作為工作區擴充功能執行,但對於存取工作區內容沒有任何硬性要求。當使用 VS Code 時,如果擴充功能在遠端工作區中存在,則會在 VS Code 的工作區擴充功能主機中執行,否則如果擴充功能在本機存在,則會在 VS Code 的本機擴充功能主機中執行。當使用具有 Codespaces 的適用於網頁的 VS Code 時,它將始終在遠端擴充功能主機中執行 (因為沒有可用的本機擴充功能主機)。"extensionKind": ["ui"]
— 指出擴充功能必須靠近 UI 執行,因為它需要存取本機資產、裝置或功能,或者因為需要低延遲。在適用於具有 Codespaces 的網頁的 VS Code 的情況下,由於沒有可用的本機擴充功能主機,因此此類擴充功能無法載入,除非它也是網頁擴充功能。然後它將載入到網頁擴充功能主機中,但限制是它無法實例化網頁工作執行緒。
注意: 先前的 VS Code 版本 (<1.40) 允許擴充功能將單一位置指定為字串,但此方法已棄用,改為使用多個位置作為陣列。
如果擴充功能可以在 Node.js 和瀏覽器中執行,則如果可用,將會選取 Node.js 擴充功能主機。有一個例外,當設定為具有 Codespaces 的適用於網頁的 VS Code 且 extensionKind
設定為 ui
時,則網頁擴充功能主機優先於遠端擴充功能主機。
如果擴充功能僅限於網頁,則無論 extensionKind
設定為何,它都將始終在網頁擴充功能主機上執行。我們建議在這種情況下不要定義 extensionKind
。
穩定性與效能
VS Code 旨在為使用者提供穩定且高效能的編輯器,行為不當的擴充功能不應影響使用者體驗。VS Code 中的擴充功能主機可防止擴充功能
- 影響啟動效能
- 減慢 UI 操作速度
- 修改 UI
此外,VS Code 允許擴充功能宣告其啟用事件並延遲載入它們。例如,Markdown 擴充功能應僅在使用者開啟 Markdown 檔案時載入。這確保擴充功能不會消耗不必要的 CPU 和記憶體。