分机主机

扩展主机负责运行扩展。

扩展主机配置

根据 VS Code 的配置,有多个扩展主机在不同位置以不同的运行时运行。

  • local – 本地运行的 Node.js 扩展主机,与用户界面位于同一台计算机上。
  • web – 在浏览器或本地运行的 Web 扩展主机,与用户界面位于同一台计算机上。
  • 远程 – 在容器或远程位置远程运行的 Node.js 扩展主机。

下表显示了 VS Code 的各种配置中可用的扩展主机:

配置 本地分机主机 网络扩展主机 远程分机主机
VS Code on the desktop ✔️ ✔️
VS Code with remote (Container, SSH, WSL, GitHub Codespace, Tunnel) ✔️ ✔️ ✔️
VS Code for the Web (vscode.dev, github.dev) ✔️
VS Code for the Web with Codespaces ✔️ ✔️

扩展主机运行时

  • 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 的工作区扩展主机中运行(如果存在)。当将 VS Code for the Web 与 Codespaces 结合使用时,它将始终在远程扩展主机中运行(因为没有可用的本地扩展主机)。
  • "extensionKind": ["workspace", "ui"]— 表示扩展更愿意作为工作区扩展运行,但对访问工作区内容没有任何硬性要求。使用 VS Code 时,如果远程工作区中存在该扩展,则该扩展将在 VS Code 的工作区扩展主机中运行;如果本地存在,则该扩展将在 VS Code 的本地扩展主机中运行。当将 VS Code for the Web 与 Codespaces 结合使用时,它将始终在远程扩展主机中运行(因为没有可用的本地扩展主机)。
  • "extensionKind": ["ui"]— 表示扩展必须靠近 UI 运行,因为它需要访问本地资产、设备或功能,或者需要低延迟。对于带有 Codespaces 的 VS Code for the Web,如果没有可用的本地扩展主机,则无法加载此类扩展,除非它也是Web 扩展。然后它将被加载到 Web 扩展主机中,但有一个限制,即它无法实例化 Web Worker。

注意:之前的 VS Code 版本 (<1.40) 允许扩展将单个位置指定为字符串,但不推荐使用此扩展,而是将多个位置指定为数组。

如果扩展可以在 Node.js 和浏览器中运行,则将选择 Node.js 扩展主机(如果可用)。有一个例外,当配置为带有 Codespaces 的 VS Code for the Web 且extensionKind设置为 时ui,则 Web 扩展主机优先于远程扩展主机。

如果扩展程序仅适用于 Web,则无论设置如何,它将始终在 Web 扩展主机上运行extensionKind。我们建议在这种情况下不要定义extensionKind

稳定性和性能

VS Code 旨在为用户提供稳定且高性能的编辑器,行为不当的扩展不应影响用户体验。VS Code 中的扩展主机可防止扩展:

  • 影响启动性能
  • 减慢 UI 操作速度
  • 修改用户界面

此外,VS Code 允许扩展声明其激活事件并延迟加载它们。例如,仅当用户打开 Markdown 文件时才应加载 Markdown 扩展。这可确保扩展不会消耗不必要的 CPU 和内存。