現已釋出!閱讀關於 11 月新增功能和修復的內容。

擴充套件宿主

擴充套件宿主 負責執行擴充套件。

擴充套件宿主配置

根據 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 和記憶體。

© . This site is unofficial and not affiliated with Microsoft.