擴充套件宿主
擴充套件宿主 負責執行擴充套件。
擴充套件宿主配置
根據 VS Code 的配置,有多個擴充套件宿主在執行,它們擁有不同的執行時、位於不同的位置。
- 本地 – 在使用者介面所在的同一臺機器上本地執行的 Node.js 擴充套件宿主。
- Web – 在瀏覽器或使用者介面所在的同一臺機器上本地執行的 Web 擴充套件宿主。
- 遠端 – 在容器或遠端位置遠端執行的 Node.js 擴充套件宿主。
下表顯示了 VS Code 的各種配置中可用的擴充套件宿主
| 配置 | 本地擴充套件宿主 | Web 擴充套件宿主 | 遠端擴充套件宿主 |
|---|---|---|---|
| 桌面版 VS Code | ✔️ | ✔️ | |
| 帶遠端連線的 VS Code (容器、SSH、WSL、GitHub Codespace、Tunnel) | ✔️ | ✔️ | ✔️ |
| 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 和記憶體。