辟谣:Deno不是下一代Node.js!

辟谣:Deno不是下一代Node.js!

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

640?wx_fmt=jpeg

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

作者说

 
  
  1. 我就是那个在前端之巅最早报道这个项目并且把标题起做“下一代node”的人,

  2. 然后被jjc大佬狂批,我没什么资格评价deno,就在这里解释下我认为

  3. 什么认为deno是下一代node,并且现在仍然坚持这么认为吧。

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

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

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

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

deno和fibjs是类似的,不基于node源码,看到弊端,想有不一样的玩法。可以说是node不擅长领域的探索,但和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. 1. 跨平台:electron等,Golang本身就是跨平台的,deno肯定也将是跨平台的,

  2. 甚至single exucutable在我看来主要就是为了改进这个的体验的

  3. 1. 本地:小工具/工作流或构建的核心等,我想deno能用在这些方面是毫无疑问的,


  4. deno不是不能用文件系统和网络,只是需要flag开启而已。

  5. 1. 服务端:web服务器。作为web服务器你需要响应HTTP Request

  6. 这一点在文档里没有很好的说明,也是争议最大的地方,
    但我在deno的roadmap

  7. 里找到这两句:

  8. Add ability to open TCP sockets and listen for connections.

  9. Add ability to receive HTTP connections

   (using net/http to parse) should try to use the same Request/Response types as fetch()

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

  2. 因此,在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兼容浏览器

 
  
  1. 这个也是我之前没有想清楚的,兼容浏览器是要渲染HTML和CSS吗?

  2. 那是不是还要加个WebKit

  3. 不过现在我认为这里指的其实是兼容之前的ES5,

  4. 现在的ES6等等各种版本的JavaScript

  5. 因为在简介里deno说自己是TypeScript运行时,

  6. 对于不了解TS和JS关系的吃瓜群众也许还以为它不能运行JS了,

  7. 但实际上是可以的,所以特别加上这句说明一下。

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

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

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

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

 
  
  1. deno不能继承node的生态不能证明不是下一代,各种ng不兼容上一代太正常了,

  2. 正因为node生态本身不能诞生node ng,才需要重开炉灶造个新轮子;

  3. deno的功能和node不是1:1对应也不能说明不是下一代,做到相似就够了,

  4. 即使deno缺点什么,我相信很快会有插件或者wrapper来补全的。

  5. 我的理解当然有缺失和不对的地方,欢迎各位大佬来教育,

  6. 不过不要把我们和其它标题党并列,谢谢。

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

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

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

node的问题

今天的node的问题

  • 是否需要改?

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

  • 能不能改?

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

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

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

  • 关于deno

关于deno是反node,还是demo,都不重要,是v8 on go,还是ts on v8也不重要,毕竟才十五天,观望就好。deno 更像是做了 node 不太好做的事情,反而不像要全盘接替 node,虽然有这个能力,但是还要大量的人力耕耘个 10 年。

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

640?wx_fmt=jpeg

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

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

  • 1) 什么叫node无力回天,这话明显不合适,deno和node思考的问题不是同一维度,这话说的不合适

  • 2)deno明朗也不合适,一个半个月左右的开源项目,直接说明朗,不是标题党是什么?

  • 3)社区不该带主观态度的去评论

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

640?wx_fmt=jpeg


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


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

640?wx_fmt=jpeg


今年前端大会开始有node专场,狼叔已升级成为大会出品人(GIAC、GMTC、GITC),招聘、用人、生态依然很好,大家放心玩


640?wx_fmt=jpeg


少抱怨,多思考,未来更美好


全文完

欢迎关注Cnode官方公众号【node全栈】

640?wx_fmt=bmp

如果想参与评论,请点击阅读原文链接,进入国内最专业的cnode论坛

你身边如果有朋友对Node.js或全栈感兴趣,可以转发给他们看看哦,O(∩_∩)O先谢过



猜你喜欢

转载自blog.csdn.net/hIZ255enyGT1O4b8/article/details/80649817