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

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

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

13501 次点击
所在节点    程序员
92 条回复
joyee
2015-03-01 19:19:47 +08:00
@jun4rui 其实看看 linkedin,ebay,paypal之类大厂的做法就知道了,他们都是用其他语言实现复杂的业务逻辑,提供接口给node来用。node主要是发挥I/O的优势起到胶水的作用,典型的就是 ebay/阿里系那样,node可以负责路由的逻辑,调用 Java 之类适合复杂逻辑的语言写的数据层,生成/返回 HTML和配套的前端CSS/JS,或者web service 的API。
esyed
2015-03-01 19:20:07 +08:00
@jun4rui node在io方面与其他语言的比较资料网上好像不多,只找到一个和.net的比较
http://www.salmanq.com/blog/net-and-node-js-performance-comparison/2013/03/
@XadillaX 你现在是node程序员么?现在整日撸node? 一个项目同个包可以有不同版本,这是node_modules嵌套吧?这么多node_modules目录,太浪费空间了吧? 执行也更浪费内存吧?
@jun4rui 为何没选ror,而是选django?
@joyee TJ好像投奔Go了,是不是被毁掉折腾疯了?哈哈
esyed
2015-03-01 19:22:55 +08:00
@joyee paypal那个系统的业务逻辑也是用node写的吧? node调用其他语言,有人这么干过么?如何调用,哈哈有人用Node调用过其他语言么?
joyee
2015-03-01 20:31:49 +08:00
@esyed TJ现在在做分布式系统而不是 web 开发,明显go更合适嘛……而且他很明显认为generator才是node的希望,所以搞了co/koa,但现在generator还不够普及,node之前在joynet的独裁下,对V8和ES6的更新太慢(所以才闹出了io.js),失望了也很正常,不代表他再也不会回来的……

调用其他语言的数据层,也就是一个API的事情,并不是直接开一个进程这种调用啊……何况会要专门写一个数据层的网站,这些东西明显不在一台机器上……
joyee
2015-03-01 20:39:32 +08:00
@esyed 不同版本的包更浪费内存这个是怎么推出来的……不管node_modules怎样,反正只会加载代码里实际用到的那个版本进内存啊。怕浪费空间的话,定时npm dedupe一下合并重复的依赖就可以了。
0987363
2015-03-01 21:26:06 +08:00
后端怎么没有我大c跟大go呢。
riophae
2015-03-02 01:53:56 +08:00
非常感谢 @joyee 的回复,很有帮助
XadillaX
2015-03-02 08:52:14 +08:00
@qiukun 你跟我说的不是一回事,我说的不是 node 版本,而是依赖包的版本。python 的依赖包同时只能是一个版本,比如依赖的依赖是你的依赖的话,版本万一不兼容呢?而 node 的话项目依赖是在自己文件夹下。依赖的依赖是在依赖的依赖文件夹下,依赖的依赖是你的依赖,你可以任何版本无所谓。不会出现不兼容让你头疼的时候。
angelself
2015-03-02 10:59:02 +08:00
数据挖掘总告诉我说ruby是冷门语言没几个人用的(鄙夷脸)
感觉也没那么冷门诶~还是经常看到有人用诶~感觉是最萌的耶~=w=还是挺喜欢Ruby的
duzhe0
2015-03-02 11:41:07 +08:00
node.js是一个原生纯异步的web框架,异步是它和ROR最大的区别。在高并发的业务场景下,非异步框架往往都是抗不住的。
jamlee
2015-03-02 12:05:39 +08:00
@angelself
没听说过ruby是冷门 这个超级热门了好吧 love too
angelself
2015-03-02 12:27:07 +08:00
@jamlee ╭(╯3╰)╮就是就是。github都是的嘛
qiukun
2015-03-02 16:10:54 +08:00
@XadillaX (算惹,
jun4rui
2015-03-03 09:22:10 +08:00
@duzhe0 异步没问题,因为都有异步实现的办法,左右不了语言的选择。
fwee
2015-03-03 11:11:44 +08:00
说性能的就呵呵了,用ruby的很多都是不屑用callback那种别扭方式写代码,你以为ruby没异步io(EM)?人家早几年就开始用fiber封装了 node捡起来还当个宝了
kurten
2015-03-03 12:04:31 +08:00
没有什么非用某种平台或者技术的理由,对于这个,争论来争论去没啥意义。看团队,什么熟悉用什么,或者对那个感兴趣用哪个。实在不行,自己在造个轮子又何妨?
aksoft
2015-03-03 19:43:51 +08:00
十年经
joyee
2015-03-04 01:01:42 +08:00
@fwee 虽然有异步/非阻塞的库,但是如果社区的各种东西主流还是非异步/阻塞,要真正用上异步还是不容易,ruby和python都是这样。node这方面的优势不过就是新技术(在后端而言)的优势——没有包袱而已,相比之下node社区的主流都是各种异步的包,可以少造一点轮子。其实node本身就自带事件机制,有一定经验的人都会尽量避开callback hell,现在社区的异步处理也开始趋向promise/generator了,只是之前joynet一意孤行对ES6的支持进展太慢,所以才闹出了io.js。

ruby和node都有自己的长处和短处,没有哪个比哪个绝对好。拿node写CRUD应用肯定也没有用ruby来得快,但在ruby做异步编程,包就不如node好找。何况最后还是得看团队熟哪个再用哪个,不然哪个的优势都不能发挥出来。
fwee
2015-03-05 23:55:42 +08:00
@joyee 那是因为你不了解
https://github.com/postrank-labs/goliath (最近在node社区大火的generator?几年前rubyist用来开发api)
EM.defer能很简单的使用同步库
python界同理
异步真心坑,没必要只因为个js来限制自己
est
2015-03-06 09:15:33 +08:00
@fwee Goliath 用了太多C++魔法。。。。很多正统Rubyist看不惯。

要说纯Ruby风格的还只能算 Celluloid::IO 。

我工作也是用Goliath。这玩意能解决大问题,但是自身也有大问题。目前正在研究Einhorn,研究出来会发 ruby-china.org

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

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

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

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

© 2021 V2EX