百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Node.js v20 已发布,他的竞争对手都怎么样了?

bigegpt 2025-02-20 14:32 6 浏览

记录、分享IT相关知识和见闻!

想要了解更多软件相关知识的朋友!

记得添加【关注】,支持一下!

现在服务端语言竞争可谓是日益激烈;Nodejs也凭借着 v8 独居一别!

庞大的NPM库,简单灵活的语法,备受很多开发者的青睐!

Nodejs

Node.js v20是Node.js的最新版本,它带来了许多新的特性和改进。

以下是「Nodejs」 v20版本更新的特性:

1. 实验性权限模型:Node.js v20 引入了一个实验性的权限模型,可以更好地控制应用程序对敏感资源的访问。这可以提高应用程序的安全性。

2. 同步的 import.meta.resolve():Node.js v20 支持同步的 import.meta.resolve() 方法,可以帮助开发者更方便地解析模块路径。

3. 稳定的测试运行器:Node.js v20 引入了一个稳定的测试运行器,可以帮助开发者更方便地编写和运行测试用例。

4. V8 JavaScript 引擎更新到 11.3 版本,增加了 5 个新特性:Node.js v20 更新了 V8 JavaScript 引擎到 11.3 版本,增加了 5 个新特性,包括更好的性能和更好的调试支持。

5. 单个可执行文件应用程序:Node.js v20 支持单个可执行文件应用程序,可以在没有安装 Node.js 的系统上分发 Node.js 应用程序。

6. Ada 到 2.0:Node.js v20 更新了 Ada 到 2.0 版本,这可以提高应用程序的性能和稳定性。


当然 「Nodejs」 虽然很强大,但是也有很多问题!

「在2018年JsConf会议上,Nodejs 作者 Ryan Dahl 公开发表了关于Nodejs “7宗罪”的主题演讲,来抨击Nodejs的不足!」

  1. 不信守Promise:NodeJS实际上有本机的Promise支持,但是几个月后,它被删除了。因此,NodeJS必须使用变通方法来实现Promise。
  2. 安全:V8本身就是一个非常好的安全沙箱。NodeJS删除了所有这些安全功能,并为应用程序提供了访问所有内容的权限。
  3. 构建系统:Chrome开始将GYP用于构建系统,因此NodeJS也进行了切换。但是后来Chrome放弃了GYP并采用GN作为他们的构建系统,因为它更快,更简单。根据Ryan Dahl的说法,继续使用GYP可能是NodeJS核心最大的失败。
  4. npm和package.json:所有npm软件包都包含一个文件,通常在项目根目录中,名为package.json-该文件包含与项目相关的各种元数据。顾名思义,npm或Node Package Manager用来管理项目中的依赖包,从而使您的生活更轻松。package.json文件具有一些不必要的信息,只有npm注册表才需要。Ryan将此描述为“样板噪声”,因为它没有给项目增加任何噪声。npm是集中式的,由私人控制。如果您已经在浏览器中完成了一些项目,您将知道如何链接到依赖项。与JQuery,Bootstrap等类似。您可以将任何链接添加到HTML,并且可以直接使用它。在Node中,您不能在npm之外的任何地方安装依赖项表单。
  5. 没有扩展名“ .js”的require("module") :这是您导入外部库的方式,这还不够具体。例如,如果要在项目中安装JQuery,则应首先使用npm通过install命令将其安装在项目文件夹中:npm install jquery。然后,如果要在文件中使用它,则可以在要使用JQuery的文件中添加“ require()”语句:require("JQuery")。这种整洁的语法起作用所需的算法非常复杂且效率低下。模块加载器必须在多个位置查询文件系统,以猜测用户的意图。
  6. node_modules:在项目中安装依赖项时,它们将下载到“ node_modules”文件夹中。问题是每个项目一个,假设您要创建两个不同的项目,但是它们都使用JQuery,则可以下载“ JQuery.js”文件,并将其保存在共享文件夹中,您可以从两个项目链接到该文件夹?。当您准备发布项目时,只需更改指向远程文件的链接并发布它们。您甚至可以将本地文件重新用于将来的任何项目。这在Node中是不可能的。
  7. index.js:如果未指定,NodeJS将寻找“ index.js”文件。这是不必要的事情。它不必要地使模块加载系统复杂化。在“ require()”支持package.json之后,它变得特别不必要。

演讲中描述的这些问题都是NodeJS的核心功能,而试图解决这些问题将意味着创建一个全新的事物」。而且如果继续使用太多的NodeJS的代码,这些问题将很难解决。


Denojs

为了能解决Nodejs 存在的一些严重问题,于是 Ryan Dahl创建了Deno。

其目标是想提供一个更安全、更简单、更现代化的JavaScript运行时,以取代Node.js。

与Node(C ++)不同,它是用Rust编写的,这使它变得更快,更安全。

在Deno中,你可以开箱即用地使用Typescript,而无需设置或配置任何东西。

你可以使用ES模块语法从Web导入,就像在浏览器中一样:

import { bgBlue, red, bold } from "https://deno.land/std/colors/mod.ts";

另外Deno默认情况下,运行JavaScript文件,则除了对项目目录的读取权限外,它没有其他权限。您必须对要脚本具有的所有权限明确表示“是”。它甚至没有连接到互联网或本地网络的权限。您可以控制脚本要执行的操作。

从官方提供的一些示例来看,Deno在自己所说的几个方面,表现确实非常优秀。

相比Nodej,Deno是免安装依赖,直接运行:

另外Http创建Server的请求速度上也是优于Node:

Demo问世的目的很简单,那就是干掉Nodejs!

但是现在Nodejs已经发布到v20版本了,而Deno还在1.33!

另外Deno 目前的用户群体非常小,社区学习资料也偏少!

未来是否能够干掉Node还真不好说!

目前Denojs 已经更新到 v1.33.1 版本了。



Bunjs

因为Nodejs与Denojs都是同一作者,所以在看一些问题或者一些需求方面都会有一定的局限;

还是有人觉得Nodejs与Deno还是不够好!于是第三个JavaScript 运行时出现了!

Bunjs 与Nodejs、Denojs 功能类似,都是JavaScript 运行时;

但是Deno 只关注三件事:

  1. 启动速度
  2. 语言性能
  3. 工具链

Bunjs自称自己是一个“All in one” 的运行时,Deno 是使用 Zig 的语言编写而成的, Zig 是一门新的系统级编程语言,它可以在编译时就运行,相当于加强版 C 语言!

Bunjs 相对比测试其他两个运行时时:
Server 的运行速度要快3 ~ 7 倍:

WebSocket 运行时要快5 ~ 10倍:

SQLLite 数据读取速度快2x以上:

当然无论是Denojs还是Bunjs的一些测试,很多测试用例都是倾向自己的。

在亲自使用Bunjs,还是比较满意的, 启动速度简直惊掉下巴。

因为在创建项目的时候,就已经把所有依赖都安装完了;

在正式 启动时,仅仅用了11ms 就启动了。

用了Nodejs vite项目对比,Vite 启动时也需要870ms,这个速度相差还是非常厉害的。

同样的项目,再切换到Bunjs启动,仅仅需要9ms,速度快了将近80倍!

从这些实测数据来看,Bunjs 虽然没有打着干掉 Nodejs或者 Denojs的旗号!但是它的惊人效率真的令人想给他竖起大拇指!

与Nodejs不同的是 bunjs 拥有他自己的包公里工具;

bun install 可以在 bunfig.toml 配置文件中对其进行 registry, dev, cache 等配置;

bun install 对等依赖的处理方式与 yarn 类似;

不会自动安装对等依赖,会尝试选择一个现有的依赖;

虽然Bunjs目前看起来确实很优秀,但是Bunjs还存在以下几个问题:

Zig 的问题

Zig 是一个较新(2016 年)的语言, 他的生态,安全性值得考虑

同时如果底层出现什么问题, 会这门语言的人是非常少的, 就很容易卡主, 过于被动

Issue 的问题

目前存在了 300多个 Issue, 有一些是特别重要且影响性能的!

生态问题

很多常用的, 较为重要的功能还未支持, 例如:

  • treeShaking
  • Source maps
  • Code splitting


Nodejs 发展到现在,已经成为一种非常流行的服务端语言;很多公司已经将Nodejs作为后端主力语言!只要你懂Nodejs,去做一些Api开发的工作完全够用。

Denojs、Bunjs 还很年轻!虽然他们的理想很丰富,但还需要经过时间的考验。

假如你是一名全栈开发工程师,你会选择Nodejs、Denojs、还是Bunjs?

欢迎大家一起讨论!



说明:本文首发头条,欢迎转载!转载请标注来源即可,无需授权!创作不易,喜欢我的文章,记得添加【关注】哦!再次感谢你的支持!


? 长按【点赞】会有惊喜哦!?

~End~


#感谢头条我要上热门##Web##热门#

相关推荐

Linux 系统启动完整流程

一、启动系统流程简介如上图,简述系统启动的大概流程:1:硬件引导UEFi或BIOS初始化,运行POST开机自检2:grub2引导阶段系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器GRU...

超专业解析!10分钟带你搞懂Linux中直接I/O原理

我们先看一张图:这张图大体上描述了Linux系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。这篇文章就以这张图为基础,介绍Linux在I/O上做了哪些事情。文件系统什么是...

linux入门系列12--磁盘管理之分区、格式化与挂载

前面系列文章讲解了VI编辑器、常用命令、防火墙及网络服务管理,本篇将讲解磁盘管理相关知识。本文将会介绍大量的Linux命令,其中有一部分在“linux入门系列5--新手必会的linux命令”一文中已经...

Linux环境下如何设置多个交叉编译工具链?

常见的Linux操作系统都可以通过包管理器安装交叉编译工具链,比如Ubuntu环境下使用如下命令安装gcc交叉编译器:sudoapt-getinstallgcc-arm-linux-gnueab...

可算是有文章,把Linux零拷贝技术讲透彻了

阅读本文大概需要6.0分钟。作者:卡巴拉的树链接:https://dwz.cn/BaQWWtmh本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念...

linux软链接的创建、删除和更新

大家都知道,有的时候,我们为了省下空间,都会使用链接的方式来进行引用操作。同样的,在系统级别也有。在Windows系列中,我们称其为快捷方式,在Linux中我们称其为链接(基本上都差不多了,其中可能...

Linux 中最容易被黑客动手脚的关键目录

在Linux系统中,黑客攻击后常会针对关键目录和文件进行修改以实现持久化、提权或隐藏恶意活动。本文介绍下黑客最常修改的目录及其手法。一、/etc目录关键文件有:/etc/passwd和/et...

linux之间传文件命令之Rsync傻瓜式教程

1.前言linux之间传文件命令用什么命令?本文介绍一种最常用,也是功能强大的文件同步和传输工具Rsync,本文提供详细傻瓜式教程。在本教程中,我们将通过实际使用案例和最常见的rsync选项的详细说...

Linux下删除目录符号链接的方法

技术背景在Linux系统中,符号链接(symlink)是一种特殊的文件,它指向另一个文件或目录。有时候,我们可能需要删除符号链接,但保留其指向的目标目录。然而,在删除符号链接时可能会遇到一些问题,例如...

阿里云国际站注册教程:aa云服务器怎么远程链接?

在全球化的今天,互联网带给我们无以计数的便利,而云服务器则是其中的重要基础设施之一。这篇文章将围绕阿里云国际站注册、aa云服务器如何远程链接,以及服务器安全防护如Ddos防火墙、网站应用防护waf防火...

Linux 5.16 网络子系统大范围升级 多个新适配器驱动加入

Linux在数据中心中占主导地位,因此每个内核升级周期的网络子系统变化仍然相当活跃。Linux5.16也不例外,周一最新与网络相关的更新加入了大量的驱动和新规范的支持。一个较新硬件的驱动是Realt...

搭建局域网文件共享服务(Samba),手机电脑都能看喜欢的影视剧

作为一名影视爱好者,为了方便地观看自己喜欢的影视作品,在家里搞一个专门用来存放电影的服务器是有必要的。蚁哥选则用一台Ubuntu系统的电脑做为服务器,共享影音文件,其他同一个局域网内的电脑或手机可以...

分享一个实用脚本—centos7系统巡检

概述这周闲得慌,就根据需求写了差不多20个脚本(部分是之前分享过的做了一些改进),今天主要分享一个给平时运维人员用的centos7系统巡检的脚本,或者排查问题检查系统情况也可以用..实用脚本#!/bi...

Linux 中创建符号链接的方法

技术背景在Linux系统里,符号链接(SymbolicLink),也被叫做软链接(SoftLink),是一种特殊的文件,它指向另一个文件或者目录。符号链接为文件和目录的管理带来了极大的便利,比...

一文掌握 Linux 符号链接

符号链接(SymbolicLink),通常被称为“软链接”,是Linux文件系统中一种强大而灵活的工具。它允许用户创建指向文件或目录的“快捷方式”,不仅简化了文件管理,还在系统配置、软件开发和日...