「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」
背景
最近一直在探讨学习,vscode插件在效能提升上的应用场景。并且在团队(40+前端团队)输出了一些正向的实战应用型的小产品,帮助团队成员减少重复性的工作,能够更专注于代码质量以及业务,并且得到了广大组员的认可。趁着最近火热,输出些文章记录下,大体章节如下(后续会增加):
- 创建一个Hello World应用
- 插件模板代码如何生成的?
- 插件机制以及vscode插件能力边界
- vscode树结构详解
- vscode虚拟文档详解
- vscode配置监听以及如何实现自定义监听?
- 实战:vscode插件提效:代码片段生成器
- 实战:vscode插件提效:根据swagger api生成接口typescript声明
- 实战:vscode插件提效:根据swagger api生成接口请求模板service
- vscode构建和发布
正文
聊到编辑器的插件,我们容易想到曾经的编辑器老大哥Eclipse,它也具备了丰富的插件,能够定制个性化的功能,这款编辑器做过JAVA开发的人应该都知道。当然现在用它的人不多了,主要因为它太重了。之所以重,是因为插件使用过多,并且插件运行在主进程之上,容易干扰到核心功能。可谓是成也插件,败也插件,因此可以看出,编辑器的架构设计是重中之重。
首先,VS Code它的定位是做一款高性能的轻量级的编辑器,所以它们很注重核心功能的性能,对于性能消耗大、资源消耗大的一些特性功能,则交由其他进程来处理。那么对于设计的插件系统,要保证核心功能的性能,那只能让它运行在独立的插件进程。并且进程之间相互隔离,同时又能通过IPC进行通信,因此这也保证了主进程的安全稳定。
其次,VS Code是通过Electron实现跨平台的,而Electron是基于Chromium和Node.js。那VS Code自然继承了Electron的一些核心能力,具体能力如上图。
上面是VS Code进程的核心架构图了。可以看出VS Code是多进程架构,启动后会创建一个主进程,然后每个窗口都会创建一个渲染进程。同时,也会为每个窗口创建一个插件进程来执行插件程序。图中绿色的部分是插件进程,它实际上是一个Electron实例。
然后,VS Code还内置了对TypeScript和Node.js的支持。书写TypeScript能获得智能提示,并且无需任何配置即可调试Node.js代码。当然对于其他语言,它同时提供了统一的APILanguage Server Protocol 和 Code Debugging Protocol,每种语言能够通过它获取到类似IDE对开发和调试体验。
最后,VS Code对视图这块暴露到能力是非常有限的,插件无法访问DOM以及操作UI,并且它提供的UI插槽(component slot)也非常少,要绘制UI只能通过官方提供的一些内置组件,比如Tree View的能力。当然这可能是为了保持稳定的交互和视觉设计了。