简介:
Javascript之所以能在浏览器运行,是因为浏览器提供一个“上下文环境”,它定义了Javascript可以做什么事情。
Nodejs,说白了,其实也是一个“上下文环境" , 这个上下文环境,允许在后端运行Javascript代码。
Nodejs使用Google的V8虚拟机,来解析和执行Javascript代码。
所以,nodejs = 运行时环境 + 库。
应用:
nodejs可以写web(网站后台,网站前端),写服务(游戏后台,IM...),写工具(抢票,爬虫....)。还可以写更多的东西。
优点:
1:单线程+非阻塞IO = 性能提升,代码简洁
它通过事件轮询(event loop)来实现并行操作。由于是单线程,所以基本不用考虑多线程的问题,例如线程上下文切换,变量加锁解锁等等。
2:强大的npm 设计 = 海量代码库
Node.js 的包管理器 npm 设计得比 python 和 ruby 好很多。有很多的 module 开发者。
3:精准控制每个细节 = 高性能,大并发
nodejs是一个非常靠近底层的工具库(+ 环境)。Node.js 可以精细的控制 Request 和 Response 的时间和内容,websocket 似乎就是为 Node.js 而生的。(配合 http://socket.io 这库之后,在 realtime webapp 这个领域,Node.js 已经没有对手了。看淘宝对nodejs的重视度和使用量就知道了。)
使用经验小结:
1:javascript语法是非常自由的,而且nodejs也支持用c/c++去写addon(nodejs的插件)。但是,由于js的性能。。。所以,如果你的需求业务非常复杂的话,不建议使用。如果你的需求是轻业务,重性能,那么可以考虑一下nodejs。
2:很少的业务需求,高强度的密集计算。业务用js实现,计算用c++实现。但是,用c++写addon之前,会有一定的学习曲线。
(备注:Java + C++/ PHP + C++ / Nodejs + C++ ,这三种做法,第一种更多的是大型架构的结合使用做法,第二种很多中小型项目都在使用,最后者就是我刚刚提到的,目前很少人用,但是性能测试确实不错,有一定的潜力。)
3:写blog,写小型的网站,基本没什么学习曲线,前后端都是javascript,方便前端的同学接触后端,js一统天下?。
4:nodejs的调试困难,编码不方便等等很多“缺点”,老早就不存在了。现在的nodejs对于线程的管理使用,也在发展的很不错。
5、对Node的优点和缺点提出了自己的看法?
优点:
1. 因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
2. 与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
缺点:
1. Node是一个相对新的开源项目,所以不太稳定,它总是一直在变。
2. 缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子(第三方库现在已经很丰富了,所以这个缺点可以说不存在了)。
总结:
nodejs现在发展很快,非常出名(出名不代表很多人用)。BUT,nodejs在后端的世界怎么算,都只是一个很有潜力的小孩子,现在的地位和java,php的地位还是差距非常大。因为nodejs本来就不合适写复杂的业务,nodejs目前更多的合适去做工具之类的开发。除非nodejs在设计的方向上能做出更大的变革,否则也很难和java平分天下。当然,nodejs本来的诞生目的也不是做“大佬”。nodejs很像geek,追求自由发展。
ƴݴ���