为什么 Node.js 很糟糕

王振威 发布于 2012/09/15 09:39
阅读 17K+
收藏 17

注:这是一篇翻译文章,不代表我们的观点!

Node.JS是一个非常糟糕的平台,他的糟糕之处体现在非常简单而重要的一个方面,就是他的核心工作机制:基于I/O的回调。

我想大家现在都知道。这种方式编写代码是很糟糕的。一段时间前我注意到了这个事情,在使用了Go语言几周后我喜欢上了他。使得,我承认Go语言比python少了一些动态特性,而导致做开发的时候可能会多出一些任务(主要是做一些样板)。Go比Python还少了一些“magic”的性质,从而代码具有明确性。

Go的这种明确性使得你更容易的阅读源代码。因为没有了这些“magic”特性,你就不需要像在阅读python代码时那样努力的去思考到底代码是怎么回事。我们可以这么说,这其中会有些权衡利弊,Python、和Go各有利弊,Python的开发速度要快,而Go的代码维护要容易。

可是,当你把这些事情往Node.JS上想的时候,你会发现没有了代码可维护性、没有了安心、得到了速度。可是我想说你真的得到了速度么?因为在此同时你同时失去了简易开发和简单维护。

我花费了很长时间去学习Node.JS,并试着做了一些东西,但是并没有成功,我是真的不知道从何开始。
通常我评价一个技术的好坏,是通过它自身的一些性质。是否容易上手、是否能帮助我提高生产力、文档做的好不好、有没有帮助资源。很显然Node.JS没能通过上面的测试。在我学习了那么久之后我仍然没有做出一个产品。API参考虽然已经文档化了,但是我想说他并没有描述清楚如何把这些零散的东西组合起来体现生产力。异步的编程风格会让我的大脑崩溃。

为什么我要在这上面浪费时间?
我看到HN(Hacker News)上的一些人说Node.JS有多好。我当时认为这些人都是很聪明的,Node.JS应该是一个不错的平台。很不幸,我花费了几个月时间最终发现这是一个非常糟糕的平台。我没能写出一点读起来很舒服的代码,(当然写起来也是很不舒服)

我开始怀疑我的编程能力!
当然,一些读者可能会说:我们将Node.JS用到的生产环境,所以这是你的无能。

也好,我接受,可能是我钻到某个牛角尖里了。但是我所说的权衡利弊的问题仍然成立,为了满足所承诺的可扩展性,你必须牺牲代码的可读性和可写性。而在Python下你可以非常方便的扩展。你可用gevent,一个基于网络库/服务器的并发框架。这就意味着IO阻塞将不再是问题,剩下的唯一问题是python的解释器,而这也可以通过分布式多服务器来解决负载均衡问题。

那么,你选择Node.JS作为后台程序的理由是什么呢?

现在只有一件事情是Node.js可以而Python不可以的,那就是websockets。实际上我不确定是不是python确实不能,在Google后也许会找到一些方案。当然 Go可以很容易的实现websockets(go get code.google.com/p/go.net/websocket)

即便你认为websocket就是你使用Node.js的原因,但是我想说你仍然可以选择使用Node.js实现websocket,而其余部分都是用Python来做。这里有个例子。是的,这个架构设计(联合Python和Node.js)可能是有点令人费解,但是还是要比使用Node.js开发整个web程序要好的多。

OSChina.NET原创翻译/原文链接


加载中
0
luwenhua
luwenhua
喜欢这样的反而言论。
0
resory
resory
. . . 坐等楼下围观。
0
铂金小鸟
铂金小鸟

为什么JAVA 很糟糕

为什么C 很糟糕

为什么C++ 很糟糕

为什么C# 很糟糕

为什么PHP 很糟糕

为什么Python 很糟糕

为什么html5 很糟糕

@铂金小猪 @皮总 求补充..

请问这些文章什么时候发?

 

算法与编程之美
算法与编程之美
正因为有了这些比较,才能更好的说明各种语言的适用场合
紫海龟
紫海龟
顶!
铂金小猪
铂金小猪
用java的标准看htnl5,所以它很糟。用html5的标准去看c,所以他很糟。
0
mallon
mallon

1. 异步模型的程序结构本来就很难设计

2. Python的Tornado完美支持WebSocket

3. 综上所述,作者是2B

小谦
小谦
这都能骂起来?
mallon
mallon
回复 @为爱裸奔 : 就知道你没什么能力,loser一个,觉得爽就继续骂吧,哈哈
Evila
Evila
回复 @Mallon : 1.操你吗的大几把 2.杀你全家 满意了不?
索隆
索隆
同意!!!
mallon
mallon
回复 @为爱裸奔 : 你有素质,你说两点让爷佩服佩服
下一页
0
jianglibo
jianglibo
作者花了几个月仍然没有写出一些有用的代码。这不是他的错,他嘴里都是python和go,可能他不知道javascript。node.js自有它的位置,它不糟糕,也不是最好的。
sailsail
sailsail
回复 @爱国者 : 其实,有解决方案,只是你们这些人都不知道而已
mj4738
mj4738
不是的,习惯了同步代码编写,突然转换到异步编程,有一个适应过程,而且使用异步编程模式确实可读性不够好
0
壮哉我大东北
壮哉我大东北
go枪文鉴定完毕
0
王振威
王振威
仅仅是翻译,大家别把枪头都指着我哦
mallon
mallon
回复 @铂金小猪 : 哈哈不过楼主好歹也辛苦了一下,做个反面教材,老外里面2B同样很多
铂金小猪
铂金小猪
我觉得咱OSC完全没必要翻译这样的文章出来,这种文章本就无任何参考价值。
0
我土鳖
这个风格一开始确实不太容易适应,但有几个小技巧。
0
yak
yak
python当然可以用websocket 这只是个协议,跟语言有什么关系
0
Jeky
Jeky
建议以后多翻译:XX技术介绍 而不是XX技术很糟
贾政文
支持多翻译技术介绍讲解类的,至于这像技术的好与糟留给读者和使用者自己判断吧
铂金小江
铂金小江
支持。老是说这个糟那个糟的,你叫那些本来就没有什么判断能力的新手怎么办?我是不是也可以将这种类型文章看作扼杀创新的一种方式?
返回顶部
顶部