这几天前端圈最火的事件莫过于 ry(Ryan Dahl) 的新项目 deno 了,不少 IT 新闻和媒体都用了标题:“下一代 Node.js”。这周末读了一遍 deno 的源码,特地写了这篇文章。长文预警(5000字,11图)。前端
这是我上周作的一张图,介绍了 JavaScript 的发展简史。刚才修改了一下,添加了对 Node.js 和 Deno 发布时间的标注。 Node.js 和 Deno 分别是 Ryan Dahl 在 2009 年和 2018 年,基于当年最新的前端技术开发的非浏览器 JavaScript 运行时。node
Ryan Dahl 开发 deno 并非由于 “just for fun”,也不是为了取代 node。下面慢慢解释。浏览器
这两天花时间看了 deno 的源码(好在是初级阶段,源码不多,也很容易理解),顺带看了全部的 issue 和 pr。不知道“从官方介绍来看,能够认为它是下一代 Node”是如何脑补出来的。性能
既然是 Node.js 之父的新做,在讨论中天然离不开 Node.js。而做者很皮的回复到:优化
The main difference is that Node works and Deno does not work : )spa
最大的区别就是:Node 能够工做,而 Deno 不行 : )code
目前 Deno 只是一个 Demo,甚至连二进制发行版都没有。好在从源码编译比较简单(若是你使用的不是 Windows 系统)。事件
在 high-level 层面,Deno 提供了一个尽量简单的 V8 到系统 API 的绑定。为何使用 Golang 替代 C++ 呢,由于相比 Node 而言,Golang 让咱们更加容易的添加新特性,好比 http2 等。ip
至于为何不选择 Rust,做者没有回答。开发
咱们再对比一下二者的启动性能。分别运行:
console.log('Hello world')
我以前写过一篇文章:Node.js 新计划:使用 V8 snapshot 将启动速度提高 8 倍,那若是咱们使用 --without-snapshot
参数编译 Node.js 呢?
依然是相差悬殊,毕竟 deno 须要加载一个 TypeScript 编译器。毕竟是一个 demo 版本,但愿之后用力优化。