Github Atom 编辑器浅析
目前的数据
- 发布五天内,官方网站上发布的package(插件,语言支持,主题等在Atom里面都算是package) 数目为450个左右(对比数据:sublime text package controls:2050)。以Atom账号官方发布的有87个。目前的发布主要都是从sublime和textmate迁移过来的主题和语言支持。
- 最热门的主题(Monokai theme)下载次数已经达到 6040。
- 搜索Atom目前Atom的搜索排行第三(注:Atom的意义也为“原子”,“intel的芯片型号”,“手冢治虫的有名漫画”)
- 开发团队18人,组件最早commit的时间为Feb 14, 2013,开源组件140个(包含fork)。
- 主力语言是coffeescript,其他的语言以及纯js的极少。部分模块使用了C,例如Ctags,可能借鉴于其他已有组件。
架构层面
运行环境
基于content shell 的atom framework。目前不开源,正在决定以哪种协议发布。会是node-webkit的竞争对手。
应用架构方面
- IPC & Remote,用来协助管理各个窗体的行为,以及窗体之间/组件之间的通讯。
- 整个系统的核心代码不多,最主要的就是他的扩展模式。UI,语法渲染,主题均是node module。包括welcome页面输出的文字内容,Atom package manager 也作为node module。大部分组件(包括APM)均以 MIT 协议发布(真*自信)。同时也不在乎代码重复的问题,APM就被两个部分依赖,但是两个部分分别包含了一套自己的modules。
- 具体到顶层,使用了类似Backbone的framework:theorist + space-pen。也使用了bootstrap来做界面。
- css部分采用的是less,js部分采用的是coffeescript。
优势和不足
优势
- 架构层面:整体上来看,Atom的这套架构的核心就是其Package系统。包括welcome页面,左边的文件树,设定页面,主题,语法,这些东西在其看来都是一个个的package。有特点的就是Atom package manager,从源码来看,它是基于NPM来做的,也就是说所有包管理实际上是用NPM做的,复用性非常好。从开发的角度来说,这样做的好处是:1.避免了使用git submodule带来的冲突问题,因为一般node module不会作提交项向repo提交,主要是修改依赖的版本号,而版本号可以写模糊匹配,而git submodule每次module升级之后必须要在主干上升级一次。2.开发者完全隔离,每个module开发者非常少,也不会给主干带来太多的log。3.module开源不代表主干开源,因此可以小批量的开源让其他贡献者先熟悉代码。4.复用NPM管理,不需要自己再写一套package manager代码。
- 运行环境方面,没有直接使用node-webkit,而是使用content shell自己来创建了一个Atom framework。由于现在尚未决定协议,不太确认它是否会对node-webkit产生冲击。由于github在开源界的影响力还是很巨大,未来可能会对node-webkit有一定的竞争力。
- 充分的利用了开源技术,也极大限度的进行了开源。大部分开发的组件在这几天都开源了出来。
- 使用习惯上完全照顾Sublime Text的用户,迁移主题、语言包均非常简单。尤其是theme,使用了less之后,切换主题只需要改几个参数即可。
- Github在开源界的号召力、口碑、用户基础都是其巨大的优势,尤其可以和Github紧密结合。
- 测试发布的时候就拥有良好的文档。
不足
- 速度尚不足以抗衡ST,慢。这个问题是web的通病,也没有比较好的动画效果。
- 使用下来UI方面不如Native的好,尤其是其黑色界面和白色滚动条,非常的不搭。
- 代码没有经过混淆,只是简单的从coffeescript转到js了。也没办法进行代码保护,可能是因为要开源所以不打算注意这些。
- 无法打开大文件。
- 语法还不齐全。
- 目前只支持 OSX,同时很多地方被写死了,必须放置在Application目录下面才能正常运行。