当前位置: 首页 > 后端技术 > Node.js

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

时间:2023-04-03 13:13:02 Node.js

技术编辑:徐玖丨来自侏罗纪公园SegmentFault思考报告丨公众号:SegmentFault最近发布了Deno1.0。这是Node之父RyanDahl继Node.js之后的又一力作。Deno是一个通用的JavaScript/TypeScript编程环境。它汇集了许多最好的开源技术,并在一个小的可执行文件中提供了一个全面的解决方案。Deno和Node作为“同父异母的兄弟”,不仅名字相似,解决的问题也相似。那么Ryan推出Deno的目的是什么?它们之间有什么相同点和不同点?既然诞生了Node,为什么还要Deno?Dahl曾在JSConfBerlin发表过题为《10 THINGS I REGRET ABOUT NODE.JS》的演讲,总结了自己在Node设计上的失误。其中一个遗憾是没有使用JavaScriptPromises,它于2009年添加到Node,但在2010年被删除。其结果是Node的许多异步API都“严重老化”。另一个失误是安全性和缺少Node沙盒。Dahl表示,使用GYP(GenerateYourProjects)构建系统对用户来说是一种“糟糕的体验”。与早期对平衡I/O的关注相反,模块系统本质上是事后才想到的。如果考虑到这一点,您可以在早期阶段做得更好。这也是Dahl想要搞Deno的原因,但是Deno的定位并不是Node的替代品。从整体功能来看,Deno有更大的野心。根据业内人士的分析和讨论,推测其是想取代目前过时的前后端开发模式,让Deno统一前后端开发的全流程。Deno和Node的区别它建立在V8(Chromium和Node.js使用的JavaScript引擎)之上,但与Node不同的是,它利用了V8沙箱的安全优势。除非明确启用,否则不得访问文件、网络或环境。与用C++编写的Node.js不同,Deno是用Rust编写的。Deno_core是一个Rust包,任何人都可以使用它来将JavaScript运行时嵌入到Rust中,而Deno构建在deno_core之上。另一个包Rusty_v8提供Rust绑定到V8C++API;它“试图成为一个安全的界面”,但还不是100%安全。“能够以安全的方式与像V8这样复杂的VM进行交互是非常了不起的,这让我们发现了Deno本身的许多棘手的错误,”Dahl的帖子解释道。Deno的调度由Tokio处理,Tokio是Rust的异步运行时。另一个关键组件是TypeScript,它是Deno中的主要语言。您可以直接运行TypeScript文件,而无需将它们编译为JavaScript。Deno本身就是一个完整的生态系统,具有运行时和自己的模块/包管理系统。这为所有工具的内置提供了更多空间,并成功消除了JavaScript开发中的许多缺点。例如:通过使用网络标准,Deno可以对其API进行过时的验证;除了JavaScript之外还有TypeScript可以消除编译负担并允许更紧密的集成;内置工具意味着无需浪费时间寻找开箱即用的产品;去中心化的包管理将用户从npm中解放出来,ECMAScript模块与已被削弱的CommonJS相比是一股清新的空气;Deno会取代Node吗?不管怎样,有达尔光环的加持,再加上“面向未来”的设计,Deno一定会成为热门话题。不过,虽然这次Deno的版本号标为1.0,但仍处于非常早期的阶段。DenoAPI的某些部分仍然不稳定。根据文档,Deno的标准模块还不稳定。该团队还表示,内部使用的TypeScript编译器非常慢。他们的意图是将TypeScript编译器移植到Rust,尽管这是一个大项目。如果完成,对所有TypeScript开发者都有帮助,所以Deno团队也呼吁大家帮助他们。因此,现在讨论Deno是否会取代Node还为时过早。但多了一个轮子,多了一条路,Deno的出现对于前端领域来说一定是一件好事。相关资料:官方文档:https://deno.land/GitHub地址:https://github.com/denoland/deno