擴充套件宿主
擴充套件宿主負責執行擴充套件。
擴充套件宿主配置
根據 VS Code 的配置,會有多個擴充套件宿主執行,它們具有不同的執行時,位於不同的位置。
- 本地 – 一個 Node.js 擴充套件宿主,在本地執行,與使用者介面在同一臺機器上。
- Web – 一個 Web 擴充套件宿主,在瀏覽器或本地執行,與使用者介面在同一臺機器上。
- 遠端 – 一個 Node.js 擴充套件宿主,在容器或遠端位置遠端執行。
下表顯示了 VS Code 各種配置中可用的擴充套件宿主
配置 | 本地擴充套件宿主 | Web 擴充套件宿主 | 遠端擴充套件宿主 |
---|---|---|---|
桌面版 VS Code | ✔️ | ✔️ | |
帶遠端的 VS Code (容器、SSH、WSL、GitHub Codespace、隧道) | ✔️ | ✔️ | ✔️ |
Web 版 VS Code (vscode.dev, github.dev) | ✔️ | ||
帶 Codespaces 的 Web 版 VS Code | ✔️ | ✔️ |
擴充套件宿主執行時
- Node.js - 擴充套件在 Node.js 執行時中執行。由本地和遠端擴充套件宿主使用。擴充套件需要一個
main
入口檔案才能在其中執行。 - 瀏覽器 - 擴充套件在 瀏覽器 WebWorker 執行時中執行。由 Web 擴充套件宿主使用。擴充套件需要一個
browser
入口檔案才能在其中執行。有關更多詳細資訊,請參閱Web 擴充套件指南。
首選擴充套件位置
載入擴充套件的擴充套件宿主取決於
- VS Code 配置提供的可用擴充套件宿主。
- 擴充套件的功能:它能否在 Node.js 和/或 Web 中執行,或者如果沒有指明,它提供了哪些貢獻?
- 擴充套件的安裝位置:在本地機器上、在遠端機器上,或兩者兼有。
- 擴充套件首選的位置:
extensionKind
屬性。
extensionKind
是擴充套件清單中的一個屬性。它允許擴充套件指定首選的執行位置。這可以是包含工作區(workspace
)的機器或使用者介面(ui
)的機器。如果一個擴充套件可以在兩者上執行,它可以指定一個優先順序順序。
"extensionKind": ["workspace"]
— 表示擴充套件需要訪問工作區內容,因此需要在工作區所在的位置執行。這可以在本地機器、遠端機器或 Codespace 上。大多數擴充套件屬於此類別。"extensionKind": ["ui", "workspace"]
— 表示擴充套件傾向於作為 UI 擴充套件執行,但對本地資產、裝置或功能沒有硬性要求。使用 VS Code 時,如果擴充套件存在於本地,它將執行在 VS Code 的本地擴充套件宿主中,這意味著使用者無需在遠端安裝該擴充套件。否則,如果擴充套件存在於 VS Code 的工作區擴充套件宿主中,它將執行在那裡。當使用帶 Codespaces 的 Web 版 VS Code 時,它將始終執行在遠端擴充套件宿主中(因為沒有本地擴充套件宿主可用)。"extensionKind": ["workspace", "ui"]
— 表示擴充套件傾向於作為工作區擴充套件執行,但對訪問工作區內容沒有硬性要求。使用 VS Code 時,如果擴充套件存在於遠端工作區中,它將執行在 VS Code 的工作區擴充套件宿主中,否則如果擴充套件存在於本地,它將執行在 VS Code 的本地擴充套件宿主中。當使用帶 Codespaces 的 Web 版 VS Code 時,它將始終執行在遠端擴充套件宿主中(因為沒有本地擴充套件宿主可用)。"extensionKind": ["ui"]
— 表示擴充套件必須在靠近 UI 的地方執行,因為它需要訪問本地資產、裝置或功能,或者因為需要低延遲。在帶 Codespaces 的 Web 版 VS Code 的情況下,由於沒有本地擴充套件宿主可用,此類擴充套件無法載入,除非它也是一個Web 擴充套件。然後它將載入到 Web 擴充套件宿主中,但有一個限制,即它無法例項化 Web Worker。
注意: 以前的 VS Code 版本(<1.40)允許擴充套件將單個位置指定為字串,但這已被棄用,取而代之的是將多個位置指定為陣列。
如果一個擴充套件可以在 Node.js 和瀏覽器中執行,如果可用,將選擇 Node.js 擴充套件宿主。有一個例外,當配置是帶 Codespaces 的 Web 版 VS Code 且 extensionKind
設定為 ui
時,Web 擴充套件宿主優先於遠端擴充套件宿主。
如果一個擴充套件是純 Web 的,它將始終在 Web 擴充套件宿主上執行,無論 extensionKind
設定如何。在這種情況下,我們建議不要定義 extensionKind
。
穩定性與效能
VS Code 旨在為使用者提供穩定且高效能的編輯器,表現不佳的擴充套件不應影響使用者體驗。VS Code 中的擴充套件宿主阻止擴充套件
- 影響啟動效能
- 減慢 UI 操作
- 修改 UI
此外,VS Code 允許擴充套件宣告它們的啟用事件並延遲載入它們。例如,Markdown 擴充套件只應在使用者開啟 Markdown 檔案時載入。這確保了擴充套件不會消耗不必要的 CPU 和記憶體。