2年过去了,有谁还记得曾想取代Node.js的他?

news2024/12/27 2:26:27

大家好,我卡颂。

22年11月14日,Deno发布了v1.28,距离他第一个稳定版本v1.0.0发布(2020年5月13日)已过去2年。

作为Node.js的竞争者,Deno似乎并没有达到取代前者的目标。

甚至,他在前端社区的声量也越来越小。

那么,这两年Deno都经历了什么,未来他会取代Node.js么?

与Node.js的不同

同为js运行时环境DenoNode有什么不同呢?

抛开各种细枝末节,他们最大的不同在于 —— Deno开放放在很重的地位。

什么平台是最开放的呢?答案是web

所以,在Deno设计的方方面面都能看到web的影子。比如:

  • 原生支持很多web API(比如fetchURLSearchParamsWeb Workers…)* 全局变量是与浏览器一样的window对象* 原生支持浏览器标准的ESM规范那么,这些API标准开放有什么关系呢?这里讲个小故事。

Deno的作者Ryan Dahl同时也是Node的作者。

在实现Node之初,他将工作重心放在事件驱动模型的实现上。这时,有个项目中引入的模块该如何解析的问题亟待解决。

他接受了NPM提出的package.json建议。简单的说,Node中的require方法会去package.json中寻求如何解析模块(dependenciesdevDependencies等字段)。

后来,NPM逐渐成为Node中最流行的包管理器与事实上的标准,两者逐渐深度捆绑。

NPM是一家私人公司,且之后被Github收购。Github又在微软旗下。

可以说,占领导份额的Node第三方依赖管理是受私人大公司(微软)控制的。

反观Deno,原生采用ESM规范,最初有两种模块引入方式:

  • 从本地路径引入

比如:

import xxx from './a.ts'; 
  • 从远端url引入

比如:

import * as utils from "https://deno.land/std@0.166.0/io/util.ts"; 

相比于Node中引入一个模块就等于引入一个npm包,Denourl的方式引入模块显然是更开放的。

毕竟,web最不缺的就是url链接了。

Ryan的理想

从上面的故事也能看出,Ryan Dahl离开Node团队,创立Deno是充满了理想主义色彩的。

在为Deno预热的JS ConfEU 2018中,他也明确表示:

Deno不会和Node兼容,不这样的话开发者最终实现的还是Node模块

在最初的正式版本中,Deno也确实践行了自己与Node不同的风格,针对Node众多缺陷提出了解决方案,比如:

  • 针对Node的安全性问题,加强了原生API访问文件系统与网络的限制* 舍弃了package.json* 原生支持TS这些特立独行确实引起了开发者热议,但并未达到很好的市场反响。

毕竟,Deno首个正式版发布时,Node已经问世11年了。

Node问世时,Node团队只需要持续、稳定的迭代Node核心API,就会有大量的JS开发者为Node生态贡献优质第三方模块。

而在Deno面世时,又会有多少开发者愿意为Deno贡献第三方模块呢,用Node现成的包不香么?

于是,Deno亲自上阵,满足了开发者的一些刚需,比如:

  • 开箱即用的工具链工具(linterformattertest-runnerbundle

再加上原生支持TS,可以说一个Deno初始项目就具备了一整套工程化最佳实践。

对比同为Rust编写的工具链工具Rome(迭代了2年,发布了一个linter,一个formatter)就能发现,Deno的迭代速度可以说是非常快了。

  • 应用框架

比如受koa启发的oak,以nobundle为卖点的全栈框架fresh

  • 发布系统

Deno深度整合的Deno Deploy

这些努力似乎并没有取得预期的效果,对比Deno(蓝色)与Node(红色)的Google趋势

Node的趋势整体走高,而Deno的走势极为平坦(只在20年5月v1.0发布时有一点起伏):

现实

今年6月,Deno获得由红杉领投的2100w刀的A轮融资,用于发展Deno Deploy

资本为了获得更好的回报,势必需要更大的用户基数。而Deno最大的潜在用户群体,就是Node开发者了。

理想主义的Ryan不得不面对现实。

在最近的v1.28中,Deno宣布已显著提高对NPM包的兼容性,现在开发者可以在Deno中使用超过130w个NPM包。

在这背后,Deno做了大量的Node.js适配工作(在Deno中实现Node原生API的适配层)。

曾经替代Node.js的目标,也逐渐变为成为更好的Node.js

这2年的经历对Deno来说,就像一个初入职场的热血大学生被社会磨平棱角的过程。

总结

  • Deno凉了么?

不仅没有,而且已经发展为融资2600w刀,拥有17名员工的公司。

  • Deno会取代Node么?

在可预见的未来,Deno都会是小而美的状态。在某些细分领域逐渐蚕食Node的市场份额。

  • 我应该使用Deno么?

如果你要写个小脚本或者搞个小项目,相比于NodeDeno的开发体验直接拉满。而且白嫖Deno Deploy不香么?

  • 还有什么推荐Deno的理由么?

有,你看看隔壁Go那凸眼睛火腿肠。再看看Deno的小恐龙敲可爱有木有~

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离散数学数理逻辑部分【1】

前言 本文创作的起因是,经历了离散数学的学习,深感学习离散之艰辛。所以产生了写一些内容帮助大家期末复习。虽然在csdn发表本文,有些不太合适,但是还是相信本文的质量和内容,可以给正在学习离散数学的大学生提供一些…

【数据结构】—— 队列(有序队列及环形队列的数组实现)

目录 队列的一个使用场景 什么是队列? 数组模拟队列 实现思路: 编写一个ArrayQueue类的代码实现过程 判断队列是否满和空 入队出队 显示队列数据 问题 用数组模拟队列你会发现使用一次之后就不能使用了 ,没有达到复用的效果。 数组…

yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别

今天刚发表的一篇论文提出来了针对小目标和低分辨率图像检测性能提升的技术SPD-Conv,感觉还是挺有意义的,今天主要是基于这项技术融合进yolov5s模型中来开发对应的目标检测模型,实现五子棋的检测,本身五子棋就是比较密集的小目标检…

RV1126笔记十五:吸烟行为检测及部署<二>

若该文为原创文章,转载请注明原文出处。 PC下yolov5环境搭建 我使用的训练环境是Windows10+MiniConda 接下来记录搭建全过程 备注:条件允许就使用ubuntu物理机,最好要有显卡,训练有显卡速度会快很多,没有显卡,训练300轮,亲测大概40小时,不值得。 一、miniconda 安装…

Linux常用操作(上)

目录 快捷键 设置别名 通配符 重定向 进阶查找 打包压缩 压缩(gz) 压缩(zip) 快捷键 设置别名 通配符 重定向 进阶查找 打包压缩 压缩(gz) touch {0..10}.txt tar -cvf my.tar [0-10].txt tar -…

2022圣诞代码合集(圣诞树+圣诞老人)

文章目录前言使用方法圣诞树圣诞老人前言 圣诞节里的喜悦,飘扬万里;圣诞树上的星星,璀璨耀眼;圣诞星空绽放的烟花,迎来吉祥;圣诞钟声奏响的旋律,传递欢乐;圣诞老人送给你的礼物&…

实现安卓PWM-LED设备驱动:不写一行代码

文章目录一、前言二、系列文章三、准备工作3.1 查找PWM引脚3.2 原理图:确认引脚位置3.3 PWM Controller四、查阅PWM bindings五、编写设备树节点5.1 实现节点:pwm-leds5.2 测试命令六、后语一、前言 在完成了基于GPIO的LED设备驱动的文章后,…

软件定义网络SDN(计算机网络-网络层)

目录 软件定义网络SDN 数据平面和控制平面 SDN 最重要的三个特征 控制平面与数据平面分离 SDN 的数据平面 软件定义网络SDN SDN的本质特点是控制平面和数据平面的分离以及网络的可编程性,从而实现了网络流量的灵活控制,方便用户管理和配置网络以及部…

2022(一等奖)B1014基于深度学习与街景图像的城市色彩感知与分析——以深圳市罗湖区为例

小组编号:B1014(一等奖) 作品名称:基于深度学习与街景图像的城市色彩感知与分析——以深圳罗湖区为例 作者单位:深圳大学建筑与城市规划学院 小组成员:吴若楠,曾绿,廖童欣,李丁一祺 指导老师:涂伟 作品视频 ,时长14:53 作品介绍 1 应用背景 城市色彩是指城市外部空…

云服务器安装Tomcat并设置域名解析

文章目录一、操作环境二、安装Tomcat服务器1.上传并解压压缩包2.配置Java环境3.启动Tomcat服务三、设置域名解析一、操作环境 操作系统版本:Ubuntu 20.04 64位 jdk版本:jdk-8u211-linux-x64(版本尽量不要太高) Tomcat版本&#x…

SpringFrameWork最基本框架场景及其原理

Hook扩展点 Hook钩子是一种编程思想,也是监听者模式的一种实现。在控制中心的执行过程(可理解也模板方法)中,会调用分阶段或者分层次来调用用户注册进来的Hook方法,用来修改或者监听控制中心的逻辑。如果需要将控制中心的内容暴露出来&#…

node.js+uni计算机毕设项目二手物品交易论坛小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

第10章_索引优化与查询优化

第10章_索引优化与查询优化 都有哪些维度可以进行数据库调优?简言之: 索引失效、没有充分利用到索引——索引建立关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。数据过多――分库分表 关于数据库调优的…

C++ 配置opencv 4.5.0开发环境

C++ 配置opencv 4.5.0开发环境 一、安装包下载二、安装过程三、VS环境配置一、安装包下载 这里提供两种下载方法:   1. opencv官网   2. csdn资源下载 二、安装过程 2.1 下载opencv-4.5.0安装包  2.2 双击开始安装,选择要安装目录,点击Extract。  2.3 等待解压完成…

包教包会——Cookie、Session、Token、JWT

前言 最近在做一个登陆注册的功能,这个功能要用到JWT鉴权。提到鉴权又想到自己直接学的Cookie,Session,Token。就想干脆也用一篇文章小小的概括一下。 😋😋 用文章输出这种方式来记录学习过程,并且日后可…

初识Node.js与内置模块

文章目录目标一、初识 Node.js1、回顾与思考(1)已经掌握了哪些技术(2)浏览器中的 JavaScript 的组成部分(3)思考:为什么 JavaScript 可以在浏览器中被执行(4)思考&#x…

Python图像处理【6】通过哈希查找重复和类似的图像

通过哈希查找重复和类似的图像0. 前言1. 哈希函数2. 使用哈希函数查找重复图像3. 使用感知哈希函数查找相似图像3.1 感知哈希函数3.2 查找相似图像4.3 查找指定目录中的相似图像小结系列链接0. 前言 在本节中,我们将讨论图像搜索中的两个相关问题,即使用…

node.js+uni计算机毕设项目贵州苗族文化展播微信小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

IP多播(计算机网络-网络层)

目录 一对多通信的应用需求 单播 vs 多播 多播路由器(Multicast Router) IP 多播的一些特点 D 类 IP 地址与以太网多播地址的映射关系 IP多播需要两种协议 互联网组管理协议 IGMP 多播路由选择协议 两种多播路由选择方法 建议的IP多播路由选择协…

后渗透操作(一)

在通过木马或者漏洞获得靶机的远程控制权后接下来就是后渗透的过程了,meterpreter可以看作一个支持多操作平台的高级后门工具,可以实现特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性。 一、访问文件系统 对于文件系统的访问有如…