欢迎大家来到IT世界,在知识的湖畔探索吧!
记录、分享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的不足!」
- 不信守Promise:NodeJS实际上有本机的Promise支持,但是几个月后,它被删除了。因此,NodeJS必须使用变通方法来实现Promise。
- 安全:V8本身就是一个非常好的安全沙箱。NodeJS删除了所有这些安全功能,并为应用程序提供了访问所有内容的权限。
- 构建系统:Chrome开始将GYP用于构建系统,因此NodeJS也进行了切换。但是后来Chrome放弃了GYP并采用GN作为他们的构建系统,因为它更快,更简单。根据Ryan Dahl的说法,继续使用GYP可能是NodeJS核心最大的失败。
- npm和package.json:所有npm软件包都包含一个文件,通常在项目根目录中,名为package.json-该文件包含与项目相关的各种元数据。顾名思义,npm或Node Package Manager用来管理项目中的依赖包,从而使您的生活更轻松。package.json文件具有一些不必要的信息,只有npm注册表才需要。Ryan将此描述为“样板噪声”,因为它没有给项目增加任何噪声。npm是集中式的,由私人控制。如果您已经在浏览器中完成了一些项目,您将知道如何链接到依赖项。与JQuery,Bootstrap等类似。您可以将任何链接添加到HTML,并且可以直接使用它。在Node中,您不能在npm之外的任何地方安装依赖项表单。
- 没有扩展名“ .js”的require(“module”) :这是您导入外部库的方式,这还不够具体。例如,如果要在项目中安装JQuery,则应首先使用npm通过install命令将其安装在项目文件夹中:npm install jquery。然后,如果要在文件中使用它,则可以在要使用JQuery的文件中添加“ require()”语句:require(“JQuery”)。这种整洁的语法起作用所需的算法非常复杂且效率低下。模块加载器必须在多个位置查询文件系统,以猜测用户的意图。
- node_modules:在项目中安装依赖项时,它们将下载到“ node_modules”文件夹中。问题是每个项目一个,假设您要创建两个不同的项目,但是它们都使用JQuery,则可以下载“ JQuery.js”文件,并将其保存在共享文件夹中,您可以从两个项目链接到该文件夹。当您准备发布项目时,只需更改指向远程文件的链接并发布它们。您甚至可以将本地文件重新用于将来的任何项目。这在Node中是不可能的。
- 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";
欢迎大家来到IT世界,在知识的湖畔探索吧!
另外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 只关注三件事:
- 启动速度
- 语言性能
- 工具链
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##热门#
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22665.html