所在的位置: js >> js前景 >> DenovsNodejs哪个更胜一筹

DenovsNodejs哪个更胜一筹

译者:布加迪

您在本文中将了解Node.js和Deno、CommonJS与ECMAScript模块之间的区别、将TypeScript与Deno结合使用,以及使用DenoDeploy进行更快的部署。末尾附有注释,帮助您决定下一个开发项目使用Node.js还是Deno。

Node.js简介

Node.js是跨平台的JavaScript运行时环境,对服务器应用程序和桌面应用程序都很有用。它运行向系统注册的单线程事件循环来处理连接,每个新连接都会触发JavaScript回调函数。回调函数可以使用非阻塞I/O调用处理请求。若有必要,它可以从池中生成线程,以执行阻塞型或CPU密集型操作,并在CPU核心之间平衡负载。

大多数竞争性架构使用线程进行扩展,包括ApacheHTTPServer、各种Java应用服务器、IIS和ASP.NET以及RubyonRails。相比之下,Node使用回调函数进行扩展,这种方法只需较少的内存就能处理更多的连接。

Node应用程序并不仅限于纯粹的JavaScript。您可以使用任何转译成JavaScript的语言,比如TypeScript和CoffeeScript。Node.js包含GoogleChromeV8JavaScript引擎,该引擎支持ECMAScript(ES6)语法,根本不需要Babel之类的ES6-to-ES5转译器。

Node的用途主要来自其庞大的软件包库,该库可通过npm命令来访问。NPM的全称是Node软件包管理器,是标准Node.js安装系统的一部分,不过它有自己的网站。

基于JavaScript的Node.js平台由RyanDahl于年推出。当初开发这个更具可扩展性的平台是为了替代面向Linux和MacOS的ApacheHTTPServer。NPM由IsaacSchlueter编写,于年推出。Node.js的原生Windows版本于年首次亮相。

Deno简介

Deno是面向JavaScript和TypeScript的安全运行时环境,已针对WebAssembly、JavaScriptXML(JSX)及其TypeScript扩展TSX进行了扩展。Deno由Node.js的创建者开发,试图重新构思Node,充分利用自年以来JavaScript方面的进步,包括TypeScript编译器。

与Node.js一样,Deno本质上是GoogleV8JavaScript引擎外面的外壳。与Node不同,它在其可执行映像中包含TypeScript编译器。创建了这两个运行时环境的Dahl曾表示,Node.js存在三个主要问题:基于集中式分发的设计欠佳的模块系统、必须支持的许多遗留API以及缺乏安全性。Deno全部解决了这三个问题。

Node的模块系统问题通过年年中的更新得到了解决。

CommonJS模块和ECMAScript模块

Node创建之时,JavaScript模块的事实标准是CommonJS,这是npm最初支持的。此后,ECMAScript委员会正式支持ECMAScript模块(又叫ES模块),它得到jspm软件包管理器的支持。Deno也支持ES模块。

对ES模块的实验性支持已添加在Node.js12.12中,从Node.js16版本成了稳定功能。TypeScript4.7也为Node.js16支持ES模块。

在JavaScript中加载CommonJS模块的方法是使用require语句。加载ECMAScript模块的方法是使用import语句以及匹配的export语句。

最新的Node.js拥有CommonJS和ES模块的加载器。它们有何不同?CommonJS加载器是完全同步的,负责处理require()调用;支持文件夹作为模块;如果在require()调用中省略了扩展名(.js、.json或.node),可以尝试添加扩展名。CommonJS加载器不能用于加载ECMAScript模块。ES模块加载器则是异步的,负责处理import语句和import()表达式;不支持文件夹作为模块(必须完整指定目录索引,比如./startup/index.js);不搜索扩展名;并且只接受JavaScript文本文件的.js、.mjs和.cjs扩展名。ES模块可用于加载JavaScriptCommonJS模块。

为什么Deno的安全性更高?

众所周知,Deno提高了Node.js的安全性。这主要是由于Deno在默认情况下不允许程序访问磁盘、网络、子进程或环境变量。如果您需要访问其中任何一项,可以使用命令行标志选择加入,这个标志的细粒度有多高就看您喜欢了,比如--allow-read=/tmp或--allow-net=google.


转载请注明:http://www.aierlanlan.com/cyrz/3609.html