近日 GitHub 公布计划,将在今年 12 月 15 日正式关停 Atom 项目。作为一款开源文本编辑器,Atom 启发并影响了众多商业应用程序,包括微软 Visual Studio Code、Slack 以及 GitHub Desktop 等等。

image.png
近日网上冲浪的时候突然刷到了这么一条消息,让我觉得大受震撼。 Atom 曾经是非常先进的产物,在我从 Java 转到 前端的过程中使用最多的就是 Atom。当时优雅的界面,炫酷的动效,还有各种牛逼的插件让我这个被 eclipse 界面折磨的人感觉到了这个世界上还有这么棒的编辑器。当时火的一时无俩,经过短短四年时光,Atom 就陷入了停滞。除了维护和安全更新之外,Atom 项目几年来没有发布过任何重大新功能 。怎么就这么快就失败了呢?

Atom 的历史

Atom 创立之初就想做一个 可深入定制、又易于使用的文本编辑器,并且敲定了以 web 为基础的技术栈。2015 年,GitHub 发布了 Atom 1.0 版本。在此前的 18 个月里,Atom 预览版的下载量超过了 130 万,每个月服务超过 35 万活动用户。Atom 允许用户安装第三方包和主题来自定义编辑器的功能和外观,在 1.0 版本时其用户社区发布了 2090 多个 Atom 扩展和 660 个主题,发展是真的非常好。
image.png
他也实现了他的初心开发者拥有编辑器完全的控制权,成为未来很多工作的基础。启发了很多 webview 为核心的 APP。但是成也定制败也定制,这也为他的衰落埋下了伏笔。

hackable 一把锋利的双刃剑

提起 Atom ,卡顿一直是他被诟病最严重的点,以我的 windows 为例,i7 32g 跑 Atom 都会占用 百分之 45 的 CPU,让我的电脑发出了巨大的声浪。

image.png

为什么 Atom 这么卡呢?Atom 最大优势就是基于 web 的技术栈,web 的低门槛让其获得了巨大的增长和庞大的社区,短时间就获得了 2090 多个 Atom 扩展和 660 个主题。Atom 不愧于一个 hackable 的IDE,你可以控制他的任何行为,甚至通过插件让它编程另外的编辑器,这完全是有可能的。

  • 整个应用的界面都开放成能用 CSS 样式配置,什么 buttons、panels、tabs、status bar、tooltips……都不例外
  • 整个编辑器状态就建模在页面所在 JS 环境的 editor 对象上,可以给它按不同事件类型绑回调,属于从 jQuery 时代开始就存在的 CommandRegistry 模式。
  • 虽然平时没必要,但只要想要就可以直接拿到页面中的 DOM。 ae33055e-2396-11eb-b308-964718266243.mp4 (551.93KB) 但是这套过于灵活的技术栈也让 Atom 的性能变得不可接受,插件的质量 良莠不齐 他们可以无限制的控制IDE。为了保证开放性,开出了无数的API,从工程角度来说这种这样的开放是违反软件开发原则的,也让开发团队无法大胆的进行性能优化,虽然每次发布都会说 性能提升了几倍。但是用户使用起来仍然还是很卡,当第一方无能为力的时候,也是噩梦开始的时候。当然这些问题的核心原因还是没有进程隔离,这个问题比较复杂就不展开说了。

最后我们可以总结出来:
性能表现是真的能影响一款编辑器产品成败的。

但是性能问题是什么造成的?

技术架构 vs 语言差异

Atom 社区中长期有这么一种声音,Atom 的卡顿是因为使用了 js 的原因,如果用 rust 来写就不会有现在这样的卡顿。xray 就是其中最有野心 的,打算用 Rust(又是你rust) 重写掉 Atom 的中卡顿的地方,打开只需要 50ms,听起来是不是很棒。但是呢,只要使用 Electron 渲染这个性能瓶颈仍然无法解决,同时还失去了 hackable 带来的生态繁荣。

这时候 vscode 出来给 Atom 狠狠的来了一击,都是 Electron + web 的技术栈,为什么 vscode 很流畅?Electron 原来叫 Atom-shell 呀?

image.png

vscode 性能超级棒(不要乱装插件),良好的技术架构,控制得当的权限,低调朴实的 UI,基于 LSP 的语言高亮,让 Atom 无地自容。除了不如 Atom 狂拽酷炫,但是真的重要吗?用户真的需要打字的时候屏幕抖一抖吗?
image.png
vscode 也有丰富的插件,但是它的限制也是非常大的,你不能随心所欲做所有事情,比如 写个 webview。但是这并不是编辑的核心体验。这同时也给前端们一个教训: 语言不是银弹,一部分优秀并不能解决技术架构的问题。
不然也不会有 VSCode 这种成功的不像微软产品的项目。

image.png

最后总结

  • 建议遵守最小权限原则,非必要不扩展。
  • 技术架构设计往往比语言差异重要,不是你换 Rust 重写就能自带极致优化。
  • 对编辑器来说,虽然战术上要看重开发体验,但战略上更要看重用户体验。

最后让我们记住 Atom 给前端带来的贡献 ,Electron ,vscode, slack 和满地开花的 webview 架构的应用。Atom 的落幕也说明客户端的 IDE 已经走到了尽头,未来输入 Figma 和 github CodeSpace,协作和渲染才是最重要的。

image.png