精华 Deno不是下一代Node.js!
发布于 6 年前 作者 i5ting 10955 次浏览 来自 分享

Deno不是下一代Node.js!

见到说deno是下一代node的,我都会骂一顿。go的人借机宣传go,可以理解,毕竟人家要做营销,利益相关。对于前端开发来说,也乱下结论,不是打自己脸吗?

前端之巅的知乎号,竟然还发一篇文章《为什么我仍然认为deno是下一代node》https://zhuanlan.zhihu.com/p/37803424

作者说

我就是那个在前端之巅最早报道这个项目并且把标题起做“下一代node”的人,然后被jjc大佬狂批,我没什么资格评价deno,就在这里解释下我认为什么认为deno是下一代node,并且现在仍然坚持这么认为吧。

最近比较忙,我完全不认可这个观点。所以忍不住想聊聊这个问题

从名字来看,deno是node名字的倒置,说明deno和node存在关联

明明是新东西,名字倒置,也叫存在关联,不觉得牵强么?这是什么逻辑

如果有关联,那么在node上改,比如iojs和node,这个大家都认同。 可是你说deno和node有关联,那就只能是v8和runtime(还不敢哪种语言)了。

deno和fibjs是类似的,不基于node源码,看到弊端,想有不一样的玩法。

这是值得尊重的和被鼓励的,node发展到今天,已经超过了9年时间,确实存在很多弊端,代码已经很难重构了, 好处是稳定,大家除了优化性能,想的都是怎么兼容老的api

在readme文档里,也多次提到node和npm,并且部分特性特别有针对性,就是针对node生态的现存的问题

这话更是笑话。

README里原话:No package.json, no npm. Not explicitly compatible with Node.

在deno世界里,完全否定package.json,npm,也不考虑兼容node。

关于模块管理,貌似就那几种方案,npm v2和npm v3等基本都尝试过。从没有一个社区生态见过这么大量的模块,到目前为止 虽然有很多弊端,但没有更好的解决方案。其他语言里也没有,不服你列一下,恕我孤陋寡闻。

ry在回答“Deno vs Node.js”的时候,说它们最大的区别就是一个可以run,一个不可以,虽然是玩笑话,另外还提到“it is much easier to add high-level functionality than it was in Node”

deno发布后ry在JSConf做了一次演讲谈node设计的缺陷,在PPT的第18页,他说“With this in mind, I have long thought about how it could be done better.... ”,后面紧接着介绍deno。
从上面可以看出deno的设计很多地方都是针对node,是对node的改进。

我要说的是deno可能才15天,node已经9年了。确实一个可以线上run,一个不可以。 甚至deno只是一个demo,只是一个概念而已。

deno并不是对node的改进,最多可以说是v8和各种runtime的一个尝试。

ry创造node的时候是一个创举,ry在2012年离开社区,ry在最近半年又回归node,然后ry最近15天开源deno。这样一个神级人物,对node挑剔是正常的。 如果他非常满意,那么2012年为什么要离开社区呢?

说到这里,我想起一个段子,每个人接受别人的代码都有不适感,甚至说大部分会重构,为什么呢?

deno对node的替代

谁说deno是下一代node?为啥不是下一代go呢?

至少deno文档上没有提下一代node,一个15天的项目就上升到下一代,也是没sei的了。ry这么喜欢go,我不敢去揣测,你们来吧

自媒体不能说不负责的话,前端之巅这样的大号更不该如此。

node今天已经成为大前端的基础设施,绝对的霸主,你们是羡慕嫉妒吗?日常黑node,也是无聊至极,不怕黑,但请黑到点上。

从node现在被广泛使用的场景,来看deno是否能用:

1. 跨平台:electron等,Golang本身就是跨平台的,deno肯定也将是跨平台的,甚至single exucutable在我看来主要就是为了改进这个的体验的
1. 本地:小工具/工作流或构建的核心等,我想deno能用在这些方面是毫无疑问的,deno不是不能用文件系统和网络,只是需要flag开启而已。
1. 服务端:web服务器。作为web服务器你需要响应HTTP Request,这一点在文档里没有很好的说明,也是争议最大的地方,但我在deno的roadmap里找到这两句:
Add ability to open TCP sockets and listen for connections.
Add ability to receive HTTP connections (using net/http to parse) should try to use the same Request/Response types as fetch()

我想deno能用作web服务器是没有争议的。

因此,在Node的主要使用场景,deno都将可以替代。
  • 1)不向后兼容,能完全替代,node用了9年,deno要用多久呢?那时你还写前端吗?不好说吧
  • 2)换个角度,deno能替代node,deno是不是也能替代java,php,py,ruby呢?如果是,那么这句话就有颜色的屁话!
  • 3)node的web完善做到今天这地步,还有很多bug,一个完全不想兼容node的deno能做web服务器,是没啥争议,呵呵呵,rust/haskell也可以能做web服务器,真的,没开玩笑

node代码量已经很大了,那么多逻辑,思考,pr,不是一朝一夕就能迁移过去。更何况npm生态呢?

deno存在颠覆可能,但绝不是下一代node。比如koa当时号称是下一代Node web框架,相对于express等来说,它在异步流程控制,中间件机制上的颠覆 不为过,都是基于node的,都是web框架,有重大改进,当时还过于新,从0.12到node 7.6开始发布koa正式版。。。。

如此对比,deno是下一代node的说法不是明显有问题吗?问题都不在一个维度上,不知道造谣的人是出于啥目的,呵呵呵。

如何理解deno兼容浏览器

这个也是我之前没有想清楚的,兼容浏览器是要渲染HTML和CSS吗?那是不是还要加个WebKit?
不过现在我认为这里指的其实是兼容之前的ES5,现在的ES6等等各种版本的JavaScript,因为在简介里deno说自己是TypeScript运行时,对于不了解TS和JS关系的吃瓜群众也许还以为它不能运行JS了,但实际上是可以的,所以特别加上这句说明一下。

没想清楚就瞎逼逼,还用前端之巅大号,这是让我去怀疑前端之巅的水平么?

看评论里说webassembly,参加Googleio看到autocad在wa上的实现是很震撼的。参加giac看到全面直播在wa上视频编解码的实践,确实很有意思

浏览器只是宿主环境而已,用啥写并不重要!

不能证明是下一代,你们这帮无良媒体说下一代,不是自己打脸么?

deno不能继承node的生态不能证明不是下一代,各种ng不兼容上一代太正常了,正因为node生态本身不能诞生node ng,才需要重开炉灶造个新轮子;
deno的功能和node不是1:1对应也不能说明不是下一代,做到相似就够了,即使deno缺点什么,我相信很快会有插件或者wrapper来补全的。
我的理解当然有缺失和不对的地方,欢迎各位大佬来教育,不过不要把我们和其它标题党并列,谢谢。

不能证明是下一代,你们这帮无良媒体说下一代,不是自己打脸么?

前面说了,有颠覆的可能,但和node无关,新东西如果真的好,大家都喜欢用的。只是未来能补上的成本有点大。想想node早起那帮大神,和早起写ts的人

“采坑踩到高潮,痛并快乐着。。。”

node的问题

今天的node的问题

  • 是否需要改?

现在的node足够用,稳定,高效,学习成本低,跨端,未来前景无限。 现在除了追赶v8特性外,几乎无大改版,也不需要。

  • 能不能改?

已经很难做改变了,无论是原理,还是历史包袱,我想都是很难的,响马大哥在fib做了很多尝试,是很成功的,但很难将fiber加到node代码里 牵一发,很可能动全身。

fibjs 在框架层使用 fiber 隔离了异步调用带来的业务复杂性,将 io 的异步处理封装为更加直观的同步调用,工程师只需要按照通常的同步业务逻辑编写代码,即可享有异步处理带来的巨大便利。

有更多的分支,有更多的选择是好事

  • 关于deno

关于deno是反node,还是demo,都不重要,是v8 on go,还是ts on v8也不重要,毕竟才十五天,观望就好。

之前osc有一篇Ryan Dahl:Node 失误太多无力回天,Deno 前景明朗 .https://www.oschina.net/news/96767/design-mistakes-in-node 这篇是标题党,请处理,别误导他人

qianduandaquan.jpg

ry是反思node的问题,他是为了介绍(推广)deno,当初node设计没法落地的点,不代表node现在的前景

ry的ppt里是design-mistakes-in-node,看不懂英文单词么?

    1. 什么叫node无力回天,这话明显不合适,deno和node思考的问题不是同一维度,这话说的不合适
  • 2)deno明朗也不合适,一个半个月左右的开源项目,直接说明朗,不是标题党是什么?
  • 3)社区不该带主观态度的去评论

最后标题改成了《Ryan Dahl:Node 设计失误值得反思,Deno 将汲取经验》

oschina.jpg

希望大家都能有自己的判断力,别以讹传讹,被利用了都不知道。jjc大神的几篇文章还是做了深入研究的。

deno的出现,对node不会有任何影响,如果deno真的很好,大家从node转过去,也未尝不是好事。只是在局势明朗前,切勿乱下结论,耽误他人,也同时拉低了自己的格调。

今年前端大会开始有node专场,招聘用人生态依然很好,大家放心玩

14 回复

赞!给力!!!

deno 和 TypeScript 必将成为主流,node终将成为历史,Ryan Dahl看透问题核心,再次引领潮流,JavaScript再上新高度,拭目以待🍻!

@fuxingZhang 别混淆概念,ts我们也看好,但node是node,deno是deno,别乱下结论就好。

js前途大家都看好

@i5ting deno的目标太棒了,Ry洞察力太好了,解决了node目前的module过大、API陈旧直接promise化、引入TS等一系列优点,势必大火,现在下结论看似太早,实则不然,看清问题本质,deno就是未来,当然,时间证明一切 deno => destroy node

@fuxingZhang 我看就算node要被取代,也未必是deno。 讲真,我本来对是不是下一代这样的争论毫无兴趣,也不想回复。但看到你的回复,我还是想忍不住说一句,deno目前真没你想象的好。 以前fibjs出来的时候,也很多人说node废了,说他们是下一代js运行时,有很多人甚至比你更确信,这几年下来的结果呢? 难说ry过几年又出一个项目叫dede。

来自酷炫的 CNodeMD

@zy445566 我并不是盲目的崇拜Ry,当然,我确实很崇拜他,我认为他总是那个关键人物。
你说的对,争论是没有意义的,留下自己的观点,让时间来检验

不论如何Node.js是成功的,也很好用。另外,我们也要尊重创新,任何新东西刚出来都是不完善很脆弱的,但是没关系,以后会逐渐壮大(也可能逐渐消亡)。最后,我是想说一个永远正确的逻辑就是,凡是现存的,都是有问题的,也都会被淘汰的。这是客观规律,后浪推前浪。 我喜欢用Node,也很佩服ry的创新和勇气,就一个字“干”!

来自✨ Node.js开源项目精选

@fuxingZhang 希望ry能再造奇迹!

来自✨ Node.js开源项目精选

感谢狼叔、JJC 给我们带来更深度认识和探讨, 目前争论主要是什么是 “下一代的node” 这个定义是有差异的上。 我想说关注学习 deno 一定会有大收获的; 赚钱养家还是先用着node 吧 ,至于 deno 是什么、能做什么还要再看看现在还不好说,毕竟目前的版本也能 demo 下,将来能成什么样,要看大神怎么造、周边生态怎么样、包括各厂商的态度和支持程度。

@vellengs赞成你的看法, node出来到现在都快10个年头了,deno还是刚出生。 目光放远点,还是挺期待deno的发展。

蹭热闹而已,贼烦,这些人 来自PWACNode.js社区

回到顶部