【VSCode插件开发】第3篇 | 插件机制以及vscode插件能力边界

1,488 阅读3分钟

「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

背景

最近一直在探讨学习,vscode插件在效能提升上的应用场景。并且在团队(40+前端团队)输出了一些正向的实战应用型的小产品,帮助团队成员减少重复性的工作,能够更专注于代码质量以及业务,并且得到了广大组员的认可。趁着最近火热,输出些文章记录下,大体章节如下(后续会增加):

  1. 创建一个Hello World应用
  2. 插件模板代码如何生成的?
  3. 插件机制以及vscode插件能力边界
  4. vscode树结构详解
  5. vscode虚拟文档详解
  6. vscode配置监听以及如何实现自定义监听?
  7. 实战:vscode插件提效:代码片段生成器
  8. 实战:vscode插件提效:根据swagger api生成接口typescript声明
  9. 实战:vscode插件提效:根据swagger api生成接口请求模板service
  10. vscode构建和发布

正文

聊到编辑器的插件,我们容易想到曾经的编辑器老大哥Eclipse,它也具备了丰富的插件,能够定制个性化的功能,这款编辑器做过JAVA开发的人应该都知道。当然现在用它的人不多了,主要因为它太重了。之所以重,是因为插件使用过多,并且插件运行在主进程之上,容易干扰到核心功能。可谓是成也插件,败也插件,因此可以看出,编辑器的架构设计是重中之重。

首先,VS Code它的定位是做一款高性能的轻量级的编辑器,所以它们很注重核心功能的性能,对于性能消耗大、资源消耗大的一些特性功能,则交由其他进程来处理。那么对于设计的插件系统,要保证核心功能的性能,那只能让它运行在独立的插件进程。并且进程之间相互隔离,同时又能通过IPC进行通信,因此这也保证了主进程的安全稳定。

vscode插件能力.png

其次,VS Code是通过Electron实现跨平台的,而Electron是基于ChromiumNode.js。那VS Code自然继承了Electron的一些核心能力,具体能力如上图。 插件架构.png 上面是VS Code进程的核心架构图了。可以看出VS Code是多进程架构,启动后会创建一个主进程,然后每个窗口都会创建一个渲染进程。同时,也会为每个窗口创建一个插件进程来执行插件程序。图中绿色的部分是插件进程,它实际上是一个Electron实例。

然后,VS Code还内置了对TypeScriptNode.js的支持。书写TypeScript能获得智能提示,并且无需任何配置即可调试Node.js代码。当然对于其他语言,它同时提供了统一的APILanguage Server ProtocolCode Debugging Protocol,每种语言能够通过它获取到类似IDE对开发和调试体验。

最后,VS Code对视图这块暴露到能力是非常有限的,插件无法访问DOM以及操作UI,并且它提供的UI插槽(component slot)也非常少,要绘制UI只能通过官方提供的一些内置组件,比如Tree View的能力。当然这可能是为了保持稳定的交互和视觉设计了。