Node.js到底是什么?糖果还是癌?
发布于 10 年前 作者 bengxia 7406 次浏览 最后一次编辑是 5 年前

Node.js无疑是最近开发者社区最活跃的技术之一,TIOBE2012年3月排名javascript 强势超过了perl和python,Node功不可没。不过,新生事物的出现总会遭遇质疑甚至抵触。 Ted Dziuba在2011年10月份的博文“Node.js is Cancer”,标题够劲爆,用词够生猛。“Node.js is nonsense(Node.js是胡说八道)”,“…is a tumor on the programming community(编程社区的肿瘤)”,“completely braindead(完全就是脑残)”。并用经典的fibonacci代码来证明Node.js的扩展性是个灾难,认为Node是在坑开发者因为背离了Unix的方向,随后还不忘吐糟一下javascript的语言特征有点二。最后得出结论:“Node.js is an unpleasant software library and I will not use it(Node.js也就是个讨厌的软件库而已,你信不信随你,反正我不信)”。

当然,哪个帮派都是有小弟的,很快Brady就出来反击了,“Note.js is not Cancer, you are just a moron”,言辞也比较激烈。另外一位的就比较温和点,“Note.js is Candy”。这里还有很多相关的回复。

Node.js当然不是癌,不过至少可以提醒我们:
1、不能拿着把锤子,看什么都是钉子。采用新技术时,一定要正确理解其内涵,特长和局限性;
2、Node.js的非阻塞特征不适合用来处理无法并行的CPU密集计算

6 回复

那么什么才适合用来处理无法并行的CPU密集计算?我很难想象一个web server的应用场景会面临大量无法并行CPU密集计算,而且这种计算无法独立成模块。

所以Brady说Ted Dziuba采用fibonacci的例子是故意而为之。 而Node更适合用来处理高并发、高IO、低CPU的场景。

fibonacci这种完全是CPU密集的运,当然无法体现nodejs的高效的。

NodeJS 不是用来进行海量计算的,而是作为业务应用实现的平台。

NodeJS 是做网络编程的最佳方式,因此可以用于实现各种网络协议(当然是基于tcp/ip协议之上的网咯协议),包括 http,websocket,ftp,email,xmpp,db-driver,sms/mms …。所以说既然 NodeJS 可以通过网络协议和各种网元通信,那么使用 NodeJS 做你的 web 应用那当然是超级绑的选择了。

如果要做底层的、低级的、高密度的计算,当然还是要靠 c,c++ 的了,不能使用 NodeJS.

要知道 NodeJS 是事件编程,不是按照预定的输入进行处理的批处理型编程。

回到顶部