与 Ruby 相比,NodeJS 有哪些优势?

2015-02-27 13:04:18 +08:00
 esyed

对于前端转后端的童鞋来说,可以直接用前端语言写后台,这个是优势
对于其他童鞋来说,用NodeJS有啥优势呢?
有什么非用Node不可的理由么?

13889 次点击
所在节点    程序员
92 条回复
fwee
2015-03-06 11:08:55 +08:00
@est Goliath大量用Fiber,这是ruby标准库何来C++魔法?EM也没有C++的影子啊
Celluloid::IO前几年很坑,貌似已经脱离erlang(模仿erlang的api少了不少)向akka靠拢?(没用过akka)
很难说是ruby风格(倒是体现了ruby的表达能力)

其实现在microservice和云计算这么火,都是container level语言无关,个人很难看好这种在语言内部实现并行/并发来解决问题的方式..
est
2015-03-06 12:51:01 +08:00
@fwee 没看到C++可能是因为你真的没去看过而已。。。。

https://github.com/eventmachine/eventmachine/blob/master/ext/rubymain.cpp

这个就是EM的核心。。。

老文章一篇 http://www.paperplanes.de/2011/4/25/eventmachine-how-does-it-work.html
fwee
2015-03-06 12:53:06 +08:00
@est 呵呵,那用C实现的还都是C魔法了?
est
2015-03-06 13:00:57 +08:00
@fwee 不是,是EM用C++改变了Ruby函数调用和运行时机制,遇到edge case就坑了。
fwee
2015-03-06 13:07:51 +08:00
@est 略读了下文章没看出来
joyee
2015-03-06 14:45:54 +08:00
@fwee **能够**使用同步库是没有意义的,因为一旦某个地方阻塞住了,整个非阻塞系统的优势就被消灭了。这也是为什么python早就有twisted但是没发展起来的原因,python的标准库和主流的包都是阻塞的,放到一个非阻塞的系统里,异步的优势就没了。既然里面的计算都是要阻塞的,为什么要勉强用非阻塞+单线程(事件机制),而不用原来的阻塞+多线程的方式呢?
joyee
2015-03-06 14:54:05 +08:00
@fwee 另外generator也不是近几年才有的,1999年发布的ES4就有了,但是ES(JS)当年主要活在前端,依赖浏览器厂商的支持,实现新特性的阻力要比其他语言大得多,ES4的改进太激进了所以失败得比较惨,才有了目前浏览器里实现得比较广泛的,做了更多妥协的ES5。node活在后端,已经算是比较轻松的了,现在io.js从node.js分裂出去,也是为了能够脱离joynet的独裁,使用更新的V8,用上ES6的新特性。
alsotang
2015-03-06 17:22:12 +08:00
@joyee 妹子我给你加个油!战死他们!
joyee
2015-03-06 19:16:36 +08:00
@alsotang 0.0 其实并没有什么好战的咩……ruby和node各有长处和短处嘛……

最美好的就是ES6成功,node merge 回 io.js 转用新版本V8,社区转用更正常的方式处理异步。ruby社区也能有更多异步库可以选择不用担心轮子问题。嗯这样大家爱用哪个用哪个,擅长哪门语言用哪门,天下太平~~

不过现实一般比较骨感……
jprovim
2015-06-13 17:06:48 +08:00
@joyee 98天後, Node.js 和 io.js 他們在一起了.
jedihy
2015-07-21 22:01:05 +08:00
回调的方式写程序很蛋疼,只针对某些应用用nodejs写会好一些。如果你要做的跟非阻塞IO无关的话,那就很蛋疼,没什么优势。
ncwhale
2016-03-18 09:43:15 +08:00
@jedihy 递 Promise 喵……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/173185

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX