Node.js 从 ROR 转 Node 如何开始?

lilijreey · 发布于 2016年08月03日 · 最后由 liuxiansenjs 回复于 2017年06月02日 · 5311 次阅读
24996

大家好,2年ROR使用经验. 个人开发这.很喜欢Ruby/Rails 但是最近在思考一个问题,为什么Node发展的这么快. 答案可能有很多. 知道最近我想写一个在web上运行终端模拟器 的应用才发现. RoR 没有对应的库.深层的问题有两点. 对于一个fullStack开发者,统一前后台语言是多么的重要. Node这方面胜出.虽然JS比Ruby烂的多.

  1. Node有一个巨大的优势就是内建了nonblockIO+Ractor 对于web这种重IO操作的应用来说更加的方便. 我想这两点是我想转Node的原因. 最后问下使用node开发 全用coffeescript 有可行性吗?
共收到 52 条回复
19106

之前的同事用的全coffee写的Node

24996

#2楼 @lgn21st 这位公子,说的也是我顾虑的问题所在, 不过使用同一个语言的意义不在于Mide set,而在于有相同的书写方式和代码的重用. 异步和回调本身是好的,也很符合我们显示世界的以大部分场景.比如你妈妈叫你回家吃饭. 一个大型系统基本都是消息驱动.消息驱动回调是少不了的. 用异步去解决同步问题是一个构建在异步系统上必须解决的问题.这个问题并不是什么大问题. 实现wait机制就好. 可参见Erlang的同步实现

3

#3楼 @lilijreey 相同的书写方式和代码重用是销售说给市场听的,作为严肃的开发者千万不要轻易相信,如果为了追求相同的书写方式,那是舍本逐末,能通过语言和框架,结合你在具体场景中的 mind set 才是重点。

用异步去解决问题其实是无奈,从内核支持 IO 异步带来的并发性能优势我承认,但是核心问题在于大量的业务场景,以及业务逻辑代码并不是异步的,但是却要你用异步的方式 + 奇技淫巧来处理。没错必须用异步来解决,但是造成这个问题的原因是因为你别无选择。

请别扯 Erlang,完全不一样的东西好么。

De6df3

还不一定是丢了西瓜捡了芝麻呢!

你只看到了 Ruby on Rails 的弱项,看 Node.js 强的地方,却没有反过来看各自的优缺点,并结合自己的业务来看那个更适合你。

关于异步,你的业务真的需要么?

想当然是最可怕的。

24996

#6楼 @rei 哈哈. 我有感受到. ROR对比Node的优势太多了,最大的就是成熟,靠谱. 看到问题才能进步嘛

24996

#4楼 @lgn21st 这个同步的问题要用异步解决,感觉到很蛋疼.这个问题的本质不是异步的问题.而是Node没有提供一个高层的同步机制.使得在Node的中写同步代IO码和异步IO代码一样简单. 这个是问题的原因. 为什么说Erlang,就是因为Erlang底层所有的IO都是异步的.但是对上面都用了同步的方式提供并且默认是同步的. 这样就不会让程序员在业务罗辑的层面去解决非业务罗辑的功能. Erlang我算是国内资深的开发了.所以不是胡扯的.

3

#8楼 @lilijreey 呵呵,那么你为什么不直接用 Erlang?

24996

#9楼 @lgn21st Erlang有erlang的坑, 最重要的问题是用erlang所有的东西都要自己写,RoR/Node有大量包.可以偷懒.哈哈 Erlang对文本的处理没有这两个语言方便. 不过Erlang有Erlang的优势. 嘿嘿

17945

这帖子很牛,牛的不是内容,而是把各种大佬全部召唤出来了.....

9592

#10楼 @lilijreey 既然熟悉erlang, 为啥不用elixir,上手很快吧。Node回调太蛋疼了

10401

Node在开发网站方面的确是落后于Rails的便捷,不过可以做一些功能单一的东西,这句是真的:

CoffeeScript 是明日黄花,直接用 ES6 + Babel 吧。

370

除了并发优势外,NodeJS 在互联网应用场景并没有优势,劣势倒是很多:

  • 生态成熟度低,很多通用场景都要自己造轮子
  • 代码可靠性相对低,经常踩坑
  • Javascript 从程序语言设计角度来说,是一个既不适合工业化,又不能让开发者写得开心的语言

曾经因为前后端能用同一种语言,几年前给某创业者推荐尝试 NodeJS,后来该创业者踩了1年的坑后,回到了 Ruby。

有些东西不是看起来好就是好的,当然 NodeJS 社区的营销能力的确胜过 Ruby 社区。

775

你听说过Go语言吗?

可以参考Airbnb,Twitter等Rails只负责前端展示,逻辑都交给后端的NodeJS或者Scala。

23529

莫名其妙,写终端模拟器你想要rails给你什么库?再说谁告诉你ruby的io是阻塞的?建议你放弃思考,直接请人来帮你写。

3

#18楼 @nong 这些 µs 果然惊艳!

15999

最近刚开源的一个koa项目,基本上按着rails的思维去写,不得不吐槽koa资料太少了,要开发效率和成熟方案还是得rails. kails 基本上实现了rails框架的一些基本功能,一切都要自己搞啊,方案调研都花了我好几天,感觉又可以搞好几篇博客了

已实现的功能:

  • MVC
  • Database (postgres), ORM(sequelize)
  • migration(sequelize-cli)
  • assets compile(webpack)
  • Session with redis
  • Password with bcrypt
  • Testing (mocha)
  • Lint (eslint)
  • middleware
  • ES6 欢迎拍砖
130

我之前尝试研究过做一个 web terminal,Rails 没有找到现成的开源项目,Node.js 有。 Node.js 的 web terminal 实现相当简洁,几个 IO 对象 pipe 一下: UI <-> Socket <-> pty Rails 当时还没有 5.0,因此做 web socket 还挺吃力 所以在 web terminal 这个场景上, Node.js 是完胜 Rails,不得不服。 但因为这个场景的优势,就完全放弃 Rails 去拥抱 Node.js,就一叶障目了,普通 web 场景,很多还是 Rails 高效。

作为一个开发者,应该多学几种语言、框架,在特定场景下选择最合适的技术。

130

#18楼 @nong 我也挺看好 Elixir 的。Ruby 可以从 Elixir 中吸收很多,比如轻量级的进程实现(像 golang 的 channel)可以解决并发程序的开发困难。 我们最近几个项目已经换用 Elixir + Phoenix 来做了,过程和结果都很不错。

3698

爱用什么用什么, 用过才知道的感觉也不错。

3787

后端就不要用什么nodejs了,那些看起来很美的东西都是忽悠你的。js这种天生弱智的语言,就没法做后端。在浏览器上应用广泛,也是因为历史原因,再加上也确实没有更好的选择了,才造成今天的怪胎。想无阻塞高并发?elixir/phoenix啊,beam平台分分钟灭掉node。说golang也牛逼?你用golang写个稳定可靠部署后不用管可水平扩展的分布式框架我看看?elixir+phoenix+OTP,你不再需要别的了。现在唯一的缺点就是轮子不太多,慢慢发展建设吧。现在这时候了,还考虑用node做后端,确实需要换换思维了。

19699

前端开发2年多js写了不少,我只想说nodejs单线程的,做项目如果不在意用户量和稳定性的就用吧。

2973

#24楼 @seamon 轮子不多,不想用,不用怎么造轮子啊

2973

#18楼 @nong crystal 也是 us 啊,速度杠杠

96

#27楼 @small_fish__ 请问crystal做web开发用什么框架?我找了一下没找到😅

4384

Crystal +1,这个时候就是强势植入 Crystal 的最佳场景了,如 Ruby 般顺滑,如 C 一般的性能。还是内部 async 的,光 这里 体现出来的 WebSockets 可能性就够 ActionCable 狂流口水的。

上次吵了半天之后我已经对 Ruby 能不能成功转型不抱希望了,与其想改变那么多人,大热的天还不如我自己求变,换个地方玩就好了

24144

为什么要把大好的时光浪费在这些东西上面呢?有空可以多看看国外真正做技术的公司在做什么,Node这种垃圾只有一些垃圾社区会用。当然也有人会说亚马逊、阿里也用node,人家只是为了方便招人罢了,用node做做不重要的微服务。真正解决问题的是用稳定的语言加上优秀的解决方案(算法等),而不是选择一门新奇的语言,通过某个片面的特性来提升效果。

24996

没想到问个小小的问题怎么多好心人来解答. 哈哈个人不看好elixir+phoenix. Elixir/phoenix两年前就看过源码. Elixir改良了Erlang的一些语法弱项.但是都是不痛不痒的语法. Eralng做web 性能肯定没的说. 我做大型MMO后台就是用erlnag写的框架. Nodejs其实我 一直不看好,前几年刚出来就不看好. 主要是我这个功能不想自己写. 想用别人的,发现没有现成的Gem包,Node到时有几个. 这两个在看Node的项目代码. 准备一直到Ruby上. So Easy. 不过这几天还真心觉得如果要和Erlang这种面向并发的语言比.Ruby,Pyhton,什么的都是小白. 如果想彻底支持并发,最后都会发展成Erlang这种类型. 不过Erlang以及领先20年了

2973

#29楼 @defmacro 要不一起把 Crystal 带起来? 最新的kemal 不支持 crystal 0.18 吧。

4384

#32楼 @small_fish__ 我觉得可以试试,带不带的起来就要看天了。虽然我现在个人兴趣在 Rust,不过 Crystal 作为一门 work language 还是非常不错的,基本上 Ruby 我想吐槽的地方都避免了

1676

看了这么多评论,只觉得现在 Ruby 社区已经有法西斯主义的倾向了。

强调 Ruby / Rails 优于一切和强调 Node.js 优于一切有什么不同么?

用不同的工具干不同的事情,用最快最适合的办法搞定最急需的事情,这才是一个Senior该干的事情吧。

De6df3

#34楼 @howiehu 那条回复有强调 Ruby / Rails 优于一切?

1676

#35楼 @huacnlee 没有人去说这句话,但是回复中充满了“A语言/框架比B语言/框架要好”的表达。

23338

#36楼 @howiehu 是你自己的理解有些问题吧

1

#36楼 @howiehu

Ruby & Rails 最好 🇽 Ruby & Rails 足够好 ✔

14104

现在已经不存在所谓的 callback hell, async/await 写起来也足够优雅,Node 在生产环境使用完全没有问题,前后端同一种语言带来的好处是明显的,ES6/ES6 写起来已经很舒服,可以不用 coffee.

19671

@lgn21st 同意,脱离业务场景谈这些都是扯。。。不在于rails 到底比谁强,而在于用的人到底会不会用。

3698

同意 @kevinyu 的观点,关键看使用的人会不会用。在“某些”地方Node比rails好用100倍。

5173

#2楼 @lgn21st

别说话,等async出来之后你就不吐槽callback了,还好

5173

#17楼 @nong 拿一个不熟悉的node来跟你熟悉的rails比,不合适吧?一周node连个登录都搞不出来,笑死了

3

#42楼 @i5ting 早就通过 babel 用上了,generator 执行器 + 语法糖,这样的东西还不值得吐槽,我就呵呵了。

5173

#44楼 @lgn21st 这个可能有误解,babel的async是通过generator实行的,但真正的async/await是v8实现的,是参考c#等,还是非常不错的,目前v8 5.1+支持了async,不过node支持还需要点时间

3

#45楼 @i5ting 这个我就奇怪了,好吧就按照你说的,拿一个现在还不能用,但是未来也许能用的东西来证明这个东西不值得吐槽,是这个意思么?

9313d8

准确地说,婚姻中永久性冲突比例是 69% 。一份长达 4 年的跟踪调查结果显示 ,情侣总爱因为同样的问题争论不休,比如:穿上了新衣服 、改了发型 、胖了或痩了几斤 、多了或少了几条皱纹 ,好像问题存在的时间不是 4 年而是 4 分钟一样,总是陷入重复的拌嘴状态。 你以为老了就会好吗? 心理学家丹·怀尔(Dan Wile)在《蜜月之后》一书中写道:当你选择一位长期生活伴侣时 ,你难免会选择一套特殊的无法解决的问题 ,你也许会同这些问题斗上 10 年、20 年甚至 50 年 。

Rails 能带来稳定的收入,和一定的心理优越, 变量或类起名时候的,在约定下尽量的优雅 这是非常棒的体验。

至于其他方面,现金流稳定的话,也许 “快” 等等,从来都不重要。

不过,在 ruby in domain 的论坛,说 ruby 优,别的有缺点,是 法西斯 倾向万分不妥

作为合格的 法西斯

  1. bin id
  2. remove Node.js

在 ruby in domain 的论坛, 尊重 ruby 是有个人修养的体现,重度尊重是有行业智慧的体现,而讨论 Node.js 是 open 的体现,也是宣传和繁荣的智慧。

着眼中长期利益的 web 技术站,似乎还是 Ruby on Rails

仅待她如伴侣...

似乎又有写一篇公众号的冲动...

775

坛子里的码农追求的可不是稳定的收入,而是快速增长的收入。坛子里也有老板,深刻知道现在Ruby招人有多难。

尊重Ruby也不等于不能指出Ruby的局限性。说到Ruby的优点,优雅和让程序员快乐并不是让项目优秀的必要条件。反而Ruby的动态特性造成很多bug只有上线后才能找到,超过100%的测试覆盖率也不能保证。

10000

#48楼 @nouse node招人更难

10000

根据适合的业务场景选择适合的语言,不要跟钱过不去。 我手上的一个项目说白了就是帮别人挂直播频道的在线人数,现在直播那么火。 前端的管理界面、设置界面用的是rails,这个没话说,确实快捷方便。 后面的具体挂人数的这个东西,node实在太给力了,1核2G内存的配置的VPS,轻松做到5万人在线,也就是保持5万个长连接。 要是用ruby早就内存爆炸了。

96

ES7 里面的await,async确实能让回调写起来方便很多,语义也更简洁明了,其他语言特性也都在演进,没如上所说那样不堪。ES7虽说是未来版本,但目前Babel支持良好,ES6发布之前,多少公司不照样使用Babel跑着ES6.

从开发便利,社区成熟度,Ruby/Rails无可挑剔,至少无人可敌,但是你要真想从性能方面来比,随便把当前游戏行业,直播行业拉出来溜溜,绝对是Java/Node 完爆。

另外,不要把不熟当作槽点,你两天没把Login功能搞定,就吐槽Nodejs,那如果换过来,你先入Nodejs, 后入Ruby/Rails, 也两天没搞定, 你是不是也跑到Node社区把Ruby/Rails吐个遍。。。。。

我也觉得社区法西斯主义越来越强,观点略同的拉到一派把观点不同的当作敌对。

Ruby/Node 我都喜欢, 这么说不是怕你来喷和稀泥,心性如此,不同场景,做不同选择。

96
32nong 回复

是呀,express直接看文档就好。rails看教程都不懂。。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册