Node 之父重构的 Deno 正式发布了,它会取代 Node 吗?

clipboard.png

技术编辑:徐九丨发自 侏罗纪公园
SegmentFault 思否报道丨公众号:SegmentFault前端


近日,Deno 1.0 正式发布了。这是 Node 之父 Ryan Dahl 继 Node 以后的又一大做。git

Deno 是一个通用的 JavaScript / TypeScript 编程环境。它聚集了许多最佳的开源技术,并在一个小的可执行文件中提供了全面的解决方案。github

Deno 和 Node 做为“同父异母”的亲兄弟,不只名字很像,就连要解决的问题也很像。那么 Ryan 推出 Deno 的目的什么?它们之间又有哪些异同?npm

既生 Node,何生 Deno?

clipboard.png

Dahl 曾经在 JS Conf Berlin 上作了一个题为《10 THINGS I REGRET ABOUT NODE.JS》的演讲,在这个演讲中他总结了本身当初在 Node 设计中的失误。编程

其中的遗憾之一是没有使用 JavaScript Promises,这些东西在 2009 年被添加到 Node 中,但在 2010 年被移除。这致使的结果是不少 Node 的 Async API "老化严重"。后端

另外一个失误是安全性和缺少 Node 沙盒。Dahl 表示使用 GYP(Generate Your Projects)的构建系统对用户来讲是"可怕的体验"。安全

与早期关注均衡 I/O 的状况相反,模块系统本质上是过后考虑的。若是考虑到这一点,那么在早期阶段就能够作的更好。网络

这也是 Dahl 为何要搞 Deno 的缘由,但 Deno 并不定位为 Node 的替代品,从总体功能来看,Deno 有更大的野心。据业内人士分析讨论,推测是想要取代如今陈旧的先后端开发模式,让 Deno 一统先后端开发全流程。异步

Deno 和 Node 的区别

clipboard.png

它创建在V8(Chromium和Node.js所使用的JavaScript引擎)上,但与Node不一样的是,它利用了V8沙盒的安全优点。除非明确启用,不然没有文件、网络或环境访问权限。工具

clipboard.png

与用 C++编写的 Node.js 不一样,Deno 用 Rust 编写。

Deno_core 是一个 Rust 包,任何人均可以用它将 JavaScript 运行时嵌入到 Rust 中,而 Deno 就是创建在 deno_core 之上。

另外一个包 Rusty_v8,提供了 Rust 与 V8 C++ API 的绑定;它 "试图成为一个安全的接口",但还不是百分之百的安全。"可以以安全的方式与 V8 这样复杂的虚拟机进行交互是至关惊人的,这让咱们发现了 Deno 自己的许多困难的 bug,"Dahl 发布的帖子解释道。

Deno 的调度是由 Tokio 处理的,它是 Rust 的异步运行时。另外一个关键组件是 TypeScript,它是 Deno 中的主要语言。你能够直接运行 TypeScript 文件,不须要将其编译成 JavaScript。

Deno自己就是一个完整的生态系统,具备运行时和其本身的模块/软件包管理系统。这为内置全部工具提供了更大的空间,而且成功地消除了 JavaScript 开发中的许多缺点。好比:

  • 经过使用 Web 标准,Deno 能够对其 API 进行过期的验证;
  • 除 JavaScript 以外还拥有 TypeScript,消除了编译负担并容许更紧密的集成;
  • 内置工具意味着无需浪费时间寻找开箱即用的产品;
  • 分散式软件包管理使用户从 npm 中解放出来,与使用递减的 CommonJS 相比,ECMAScript 模块带来了新鲜的空气;

Deno 会取代 Node 么?

clipboard.png

不管如何,由 Dahl 大神光环加持,再加上“面向将来”的设计,Deno 确定会成为一个热议的话题。

不过虽然此次 Deno 的版本号标为了 1.0,但也仍处于很是早期的阶段,Deno API 的某些部分还不稳定,根据文档所说,Deno 的标准模块也还不太稳定。该团队还表示内部使用的 TypeScript 编译器速度很是慢。

他们的意图是将 TypeScript 编译器移植到 Rust 上,尽管这是一个大项目。若是完成的话,对全部的 TypeScript 开发者都会有帮助,因此 Deno 团队也在呼吁你们为他们提供帮助。

因此,对于 Deno 是否会取代 Node 这件事,如今讨论还为时尚早。但多一个轮子多一条路,Deno 的出现,对于前端这个领域来讲,必定是一个好事情。

相关资料:

官方文档:https://deno.land/
GitHub 地址:https://github.com/denoland/deno

clipboard.png

相关文章
相关标签/搜索