4

Deno不是下一代Node.js!

 3 years ago
source link: https://zhuanlan.zhihu.com/p/37824107
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 这篇是标题党,请处理,别误导他人

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

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

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK