什么是Deno,它将取代Node.js?



美好的一天。我向您介绍“ Deno vs. Node.js-这是 Louis Petrik 最重要的区别

Deno是新的Node.js吗?还是一个很好的选择?在本文中,我将尝试回答这些问题。

迪诺的历史


Deno和Node.js是单人开发-Ryan Dahl。

Dahl从2009年开始从事Node.js的开发,但几年后离开了团队。在2018年,他做了一个演讲,“我为Node.js感到遗憾的十件事”。在这次演讲中,Dahl介绍了Deno-一种用于JavaScript和TypeScript的新“引擎”,

有趣的是:“ Deno”是“ Node”的字谜。

开发人员是否应该担心Deno在不久的将来会取代Node.js?

达尔本人不相信。



链接到视频。

正如Dahl在讲话中指出的那样,在完整性(稳定性)方面,Deno仍然不如Node.js。

但是,两者都是浏览器外部的JS代码运行时,例如在Web服务器上。但是几乎没有人可以说Node.js和Deno之间的“关系”将在几年后发展。

Deno和Node.js:内部设备


Node.js用C ++编写,并使用V8执行JS代码。 V8专为Google Chrome设计,可在浏览器中尽快运行JS代码。当前,几乎所有浏览器(包括Microsoft Edge)都已切换到V8。

Deno也是基于V8的,但它使用的不是Rust而是C ++,Rust是一种语言,其目标不仅是要具有不劣于C ++的良好性能,而且还要具有安全性:消除内存访问错误或缓冲区溢出。

安全性是Node.js的主要缺点之一,因为启动应用程序后,它可以访问文件系统或网络。

Deno尝试通过询问用户访问权限来解决此问题。

一个很好的例子是来自Deno官方网站的以下TS代码:

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

const s = serve({ port: 8000 })

for await (const req of s) {
	req.respond({ body: 'Hello World\n'})
}

如您所见,这是一个非常简单的Web服务器,其启动过程如下:

deno run app.ts

但是,由于未授予Deno访问网络的权限,因此我们收到以下消息:



要提供访问权限,我们需要执行以下操作:

deno run --allow-net app.ts

现在我们的服务器正在工作。但是,除非我们允许,否则应用程序将无法访问文件系统。

再见NPM,您好ES6导入


我们的应用程序的另一个安全问题是NPM:使用NPM不仅会创建一个巨大的“ node_modules”文件夹,而且使该应用程序正常工作的已安装软件包从理论上讲可能包含恶意代码。

Deno不使用NPM,而是通过URL导入库,如示例中所示。

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

该库在首次运行时加载并缓存:



这类似于我们复制Web服务器代码并将其分别存储在服务器或计算机上以供重用的方式。无需重新加载库。

浏览器外部的窗口对象


Window是浏览器中的全局对象,包含一些非常重要的JS函数。

一种这样的功能是获取。Fecth不能在Node.js中使用-有一些特殊的库,但是在Deno中可以。

这是由于Deno可以访问Window,如下文档所述

以下代码可以在浏览器和Deno中运行:

fetch('https://jsonplaceholder.typicode.com/todos/1')
	.then(response => response.json)
	.then(data => console.log(data))

开箱即用的TypeScript支持


当然,使用TypeScript只是一个问题。有些喜欢,有些则不喜欢。不管怎样,Deno开箱即用地支持TypeScript,当然,它也支持JavaScript。

您可以通过编写代码,将文件另存为.ts或.js并使用运行该文件来进行验证deno run我认为,这并不是一个明显的优势,因为可以轻松地将TypeScript支持添加到Node.js中。

感谢您的关注。

All Articles