p*****2 发帖数: 21240 | 1 稍微用了用node,写一点感受吧。本来想优点,缺点单独列出来,但是感觉还是混起来
写吧。
1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天
看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node
,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣
的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。
但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS
的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉
得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为
现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
了。
优点1: 前后端统一语言。
2. 我在用Play的时候发现了一个问题就是我需要把Scala里的数据手工的转到Json,这
个工作比较boring,而node本身就是JS的,因此object和Json之间的转换特别的方便,
这是我把项目从Play转到node的一个很重要的原因。而node的数据库很典型的是用
mangoDB,从而数据的转换变的非常smooth。
优点2: Json数据方便传递。
3. 我在学JS的时候发现程序只能在browser里运行非常不方便,后来学到node发现可以
在node上直接运行,从而跟python,ruby一样了。JS也不单单只能做web应用,平时写
script也可以。
优点3: 使得JS成为像Python, Ruby一样的脚本语言。
4. Play底下有一个很强大的AKKA,因此我也担心node可能不堪大用,没法实现AKKA可
以实现的应用。后来发现node有cluster module和Socket.IO,完全类似AKKA,可以支
持同样的应用。而且我用AKKA的时候发觉有一个问题就是actor之间的通信是私有协议
,只能处理其他actor的请求,而node的Socket.IO是WebSocket协议,是公开的,因此
可以接受任何的请求。我没有看到过测试数据,但是对于我自己的项目来说,貌似node
完全可以满足需求了。并且貌似Socket.IO这东西,node超前了一步,其他平台还没有
实现?看到这个我才知道原来web上也是可以双向通信的。
优点4: 先进的Socket.IO
5. node采用了异步IO编程模式,这个模式有点意思,因为平时我们写代码大部分都是
同步的,因此需要点思维的转变。现在异步IO越来越流行,因此各个语言都有相应的实
现,但是node不同的是因为JS天生就是异步的,因此写起来最自然。
优点5: 天生的异步编程
6. node上最流行的框架Express.js是学习了Ruby的Sinatra,里边的Jade是学习了HAML
。我做的那个网站正好就是用的Sinatra和HAML,因此感觉很亲切。Sinatra本身就是非
常适合做web service,而现在RIA的发展,backend慢慢变为了就是提供restful web
service。因此,node非常符合现在网络应用的趋势。
以上是我的几点最直接的感受,下面谈谈其他的。
7. node的社区非常活跃。play是2007年开始的,node是2009年开始的。Linkedin上
play只有1364个member, 而node有7094个,可见node的关注和活跃程度。
8. node采用了Google V8 JS engine, 从而达到了C/C++的性能。这点上比Python,
Ruby都强了。
9. node采用了单线程 event-driven 编程模式。从而使得你不用在烦恼线程同步,
race condition, dead lock这些头疼问题了。当然编程模式的变化也需要一定的思维
转换,不过还是挺有意思的。从各方面的反应来看都证明event-driven优于multi
threading,但是我也不敢肯定取消thread就没有副作用吗?可能还是看应用场景吧?
这个还需要时间的检验和思考。我还没想明白如果event-driven这么牛,为什么到了
node才流行开来。
10. 板上大牛介绍的webstorm IDE实在是太好用了。 |
x*********w 发帖数: 533 | 2 多谢多谢,不过能不能把标题的括弧去掉,很gay啊 |
t*********h 发帖数: 941 | 3 很牛啊 看起来不错 我老也有冲动要实施node.js了
node
JS
node
【在 p*****2 的大作中提到】 : 稍微用了用node,写一点感受吧。本来想优点,缺点单独列出来,但是感觉还是混起来 : 写吧。 : 1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天 : 看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node : ,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣 : 的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。 : 但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS : 的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉 : 得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为 : 现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
|
p*****2 发帖数: 21240 | 4
不好意思。去掉了。
【在 x*********w 的大作中提到】 : 多谢多谢,不过能不能把标题的括弧去掉,很gay啊
|
p*****2 发帖数: 21240 | 5
大牛你现在用什么呢?
【在 t*********h 的大作中提到】 : 很牛啊 看起来不错 我老也有冲动要实施node.js了 : : node : JS : node
|
i******r 发帖数: 793 | |
p*****2 发帖数: 21240 | 7
大牛用什么呢?
【在 i******r 的大作中提到】 : node.js好像挺火的样子 : 不过我还没用过
|
r*******n 发帖数: 3020 | 8 赞二爷大作,我也考虑学点node。js了
有个问题,二爷是用coffeescript还是javascript写程序?
另外一个javascript 在google V8 能达到c\c++ 性能有些怀疑啊
node
JS
node
【在 p*****2 的大作中提到】 : 稍微用了用node,写一点感受吧。本来想优点,缺点单独列出来,但是感觉还是混起来 : 写吧。 : 1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天 : 看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node : ,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣 : 的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。 : 但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS : 的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉 : 得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为 : 现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
|
s*********s 发帖数: 140 | 9 赞大牛总结,用过一点node.js,对于第4点尤其赞同,用websocket写event based
realtime app很好。好像nodejs有几个websocket的third party package?
coffeescript还没用过,二爷推荐后准备有机会试试。 |
p*****2 发帖数: 21240 | 10
我用coffeescript,如果没有coffeescript我就不会用node了。
V8可以把JS编译成二进制吧。所以性能是native的。
【在 r*******n 的大作中提到】 : 赞二爷大作,我也考虑学点node。js了 : 有个问题,二爷是用coffeescript还是javascript写程序? : 另外一个javascript 在google V8 能达到c\c++ 性能有些怀疑啊 : : node : JS : node
|
|
|
p*****2 发帖数: 21240 | 11
websocket我还没怎么玩过。CS对于python,ruby程序员来说会很喜欢。如果JS已经很
熟了,可能就没必要了。
【在 s*********s 的大作中提到】 : 赞大牛总结,用过一点node.js,对于第4点尤其赞同,用websocket写event based : realtime app很好。好像nodejs有几个websocket的third party package? : coffeescript还没用过,二爷推荐后准备有机会试试。
|
F******F 发帖数: 63 | 12 羡慕你俩搞基都这么有深度,lol
node
JS
node
【在 p*****2 的大作中提到】 : 稍微用了用node,写一点感受吧。本来想优点,缺点单独列出来,但是感觉还是混起来 : 写吧。 : 1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天 : 看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node : ,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣 : 的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。 : 但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS : 的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉 : 得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为 : 现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
|
r*******n 发帖数: 3020 | 13 这算是爆料吗
【在 F******F 的大作中提到】 : 羡慕你俩搞基都这么有深度,lol : : node : JS : node
|
y*******3 发帖数: 16 | 14 V8有个JIT compiler
虽然比Ruby Python之类的快,但还是不能跟C++比的 |
x*********w 发帖数: 533 | 15
疯了....
我是叫你去括号里的内容,不是只把括号去掉
【在 p*****2 的大作中提到】 : : websocket我还没怎么玩过。CS对于python,ruby程序员来说会很喜欢。如果JS已经很 : 熟了,可能就没必要了。
|
c****j 发帖数: 802 | 16 原来你就是800题的小号?
【在 x*********w 的大作中提到】 : : 疯了.... : 我是叫你去括号里的内容,不是只把括号去掉
|
t*********h 发帖数: 941 | 17 大牛好 写web app我喜欢flask 不过node.js貌似效率很高 js也值得学习
【在 p*****2 的大作中提到】 : : websocket我还没怎么玩过。CS对于python,ruby程序员来说会很喜欢。如果JS已经很 : 熟了,可能就没必要了。
|
k***x 发帖数: 6799 | 18 你俩啊,这就是网络时代的“只羡鸳鸯不羡仙”么。。。
【在 x*********w 的大作中提到】 : : 疯了.... : 我是叫你去括号里的内容,不是只把括号去掉
|
B*******1 发帖数: 2454 | 19 真识货,用咱们的v8 engine,但是比较耗油。
node
JS
node
【在 p*****2 的大作中提到】 : 稍微用了用node,写一点感受吧。本来想优点,缺点单独列出来,但是感觉还是混起来 : 写吧。 : 1. 自己想做点什么东西都不可避免要接触到前端,而前端则是JS的天下,因此前几天 : 看了看JS。这个时候就产生了一个问题了。既然前端必须要用JS,那么为什么不用node : ,从而前后端统一语言呢?我当时的回答是不会用node,因为JS这个语言是挺灵活有趣 : 的,但是写起来实在是太boring了,前端用是没得其他选择,后端再用可就太痛苦了。 : 但是很快我发现了coffeescript这门语言,它吸收了python, ruby的优点,又解决了JS : 的很多缺陷,因此我眼前一亮,一下子就喜欢上了这门语言了。当时学Ruby的时候就觉 : 得do end太boring了,要是能吸收Python的indentation代码就好看了,结果现在成为 : 现实了,就是coffeescript。有了coffeescript之后,我没有什么理由不考虑使用node
|
T*******e 发帖数: 4928 | 20 谢谢这些信息。看起来很有意思,等面试完我也玩玩node.js. |
|
|
e***s 发帖数: 799 | 21 赞二爷神作,同喜欢webstorm,不过要钱的让我止步了。看看以后能不能说服单位买。 |
d*******r 发帖数: 3299 | 22 干货真多啊,顶好贴
有个问题问二爷,异步到底是非主流的模式,还是以后的大趋势? 之前学Python的web
frameworks时候,看各个网站的帖子,很多人就说异步的程序,写起来非常反人性...?
所以我一直没敢用琢磨Python Tornado和Node.js |
p*****2 发帖数: 21240 | 23 这个话题比较大了。我随便聊聊吧。
基本上为了实现并行,我看到了三种现代的编程模式,线程,actor, 异步。
线程是现在应用最广的,也是最简单的,大概优缺点如下
优点:
1. 编程简单,并行的实现交给OS来处理,自己不用管关于线程调度的细节
2. 应用面广,几乎所有的语言,平台都支持
缺点:
1. 资源消耗大。线程虽然比进程light,但是由于现在高并发的需求不断增强,线程还
是显得太heavy了。线程需要被分配系统资源,并且context switch也是很costly的。
2. Thread safe很难保证,因此很多bug隐藏很深难于发现, 甚至有人认为不太可能写
出没有bug的多线程程序来。
3. 为了保证Thread safe, 需要同步线程,又不可避免的影响了concurrency。Java论
坛有个人挺有意思,说同步和并发是一致的,其实我认为这两个就是矛盾体。想高并发
就要少同步,或者不同步。
4. 很难调试。
因此线程的优点是上手容易,缺点主要是很难Thread safe和支持高并发。
那么为了解决这两个问题就引入了其他的并行编程模式,actor和异步。
Thread的最根本的问题的根源是多个耦合的程序体同时运行。这里边有两个关键点
1. 多个:多线程
2. 耦合:共享变量
那么我们只要打破两个的其中一个,多线程的各种问题将不复存在。
Actor: 采取了functional programming的概念,取消了变量,并且采用比thread更
light的程序单位actor,使得可以支持高并发。
Actor由于取消了变量,因此互相之间的通信也是采用了异步,event driven的方式,
当然不是纯的,你也可以搞同步,只是不推荐。
异步:采用单线程事件轮询,从而避免了多线程的各种问题。
Actor的并行跟多线程还是类似的,只是用了更小的执行单位。而异步则采取了一种完
全新的模式,因此很多人可能会很不习惯。因此想学习异步编程还真的应该好好学习一
下Javascript的,因为JS天生就是异步的。这样的话会更容易理解。
如果从现在网络应用的发展来看,的确异步是个大趋势。multi threading开始流行的
当年对于并发的要求跟现在来比还是很低很低的。 |
p*****2 发帖数: 21240 | 24
有人说买一个也值得。呵呵。
【在 e***s 的大作中提到】 : 赞二爷神作,同喜欢webstorm,不过要钱的让我止步了。看看以后能不能说服单位买。
|
s*********s 发帖数: 318 | 25
【在 p*****2 的大作中提到】 : : 有人说买一个也值得。呵呵。
|
s*********s 发帖数: 318 | 26 网上到处是keygen。不过不推荐。
【在 p*****2 的大作中提到】 : : 有人说买一个也值得。呵呵。
|
d*******r 发帖数: 3299 | 27 学到很多!谢谢!! 我其实对各种并发的东西都很感兴趣,只是自己还没时间没能力系
统地全部琢磨一遍。
我一直在想,能不能有一种最好的并发抽象,这种抽象能以一些参数描述大多数的并发
情况。它能应用到:慢到多个host之间的并发,和快到GPU多核之间的并发的场景。那
样的话用起来就方便了。希望这个想法不是nonsense...
这帖子里东西不少,建议二爷整理下你这个帖子里的各种干货,放到你blog上. :)
【在 p*****2 的大作中提到】 : 这个话题比较大了。我随便聊聊吧。 : 基本上为了实现并行,我看到了三种现代的编程模式,线程,actor, 异步。 : 线程是现在应用最广的,也是最简单的,大概优缺点如下 : 优点: : 1. 编程简单,并行的实现交给OS来处理,自己不用管关于线程调度的细节 : 2. 应用面广,几乎所有的语言,平台都支持 : 缺点: : 1. 资源消耗大。线程虽然比进程light,但是由于现在高并发的需求不断增强,线程还 : 是显得太heavy了。线程需要被分配系统资源,并且context switch也是很costly的。 : 2. Thread safe很难保证,因此很多bug隐藏很深难于发现, 甚至有人认为不太可能写
|
d*******r 发帖数: 3299 | |
e***s 发帖数: 799 | 29 不知道是不是受美帝熏陶,现在真不想这样干。但是unblock youku还是要有的:)
【在 s*********s 的大作中提到】 : 网上到处是keygen。不过不推荐。
|
e***s 发帖数: 799 | 30 看君一席帖,胜读十年书
【在 p*****2 的大作中提到】 : 这个话题比较大了。我随便聊聊吧。 : 基本上为了实现并行,我看到了三种现代的编程模式,线程,actor, 异步。 : 线程是现在应用最广的,也是最简单的,大概优缺点如下 : 优点: : 1. 编程简单,并行的实现交给OS来处理,自己不用管关于线程调度的细节 : 2. 应用面广,几乎所有的语言,平台都支持 : 缺点: : 1. 资源消耗大。线程虽然比进程light,但是由于现在高并发的需求不断增强,线程还 : 是显得太heavy了。线程需要被分配系统资源,并且context switch也是很costly的。 : 2. Thread safe很难保证,因此很多bug隐藏很深难于发现, 甚至有人认为不太可能写
|
|
|
t*********h 发帖数: 941 | 31 yeah. as a magong, we should respect ourselves
【在 e***s 的大作中提到】 : 不知道是不是受美帝熏陶,现在真不想这样干。但是unblock youku还是要有的:)
|
x*********w 发帖数: 533 | 32
“异步:采用单线程事件轮询,从而避免了多线程的各种问题。”
单线程事件轮询??是像select模型那样的吗?还是IO complete port那样的?
【在 p*****2 的大作中提到】 : 这个话题比较大了。我随便聊聊吧。 : 基本上为了实现并行,我看到了三种现代的编程模式,线程,actor, 异步。 : 线程是现在应用最广的,也是最简单的,大概优缺点如下 : 优点: : 1. 编程简单,并行的实现交给OS来处理,自己不用管关于线程调度的细节 : 2. 应用面广,几乎所有的语言,平台都支持 : 缺点: : 1. 资源消耗大。线程虽然比进程light,但是由于现在高并发的需求不断增强,线程还 : 是显得太heavy了。线程需要被分配系统资源,并且context switch也是很costly的。 : 2. Thread safe很难保证,因此很多bug隐藏很深难于发现, 甚至有人认为不太可能写
|
p*****2 发帖数: 21240 | 33
http://stackoverflow.com/questions/10680601/nodejs-event-loop
【在 x*********w 的大作中提到】 : : “异步:采用单线程事件轮询,从而避免了多线程的各种问题。” : 单线程事件轮询??是像select模型那样的吗?还是IO complete port那样的?
|
p*****2 发帖数: 21240 | |
p*****2 发帖数: 21240 | 35
用公司的机器,不敢乱搞。
【在 s*********s 的大作中提到】 : 网上到处是keygen。不过不推荐。
|