Node.js:一次全面的认识

发表时间: 2018-03-13 20:53

一.什么是Node.js

Node.js是一个让JavaScript运行在服务器端的开发平台,而JavaScript是运行在浏览器的解释型的编程语言,是一种脚本语言,所以nodejs无需编译就可以运行。

二.运行引擎

NodeJs采用的是V8 JavaScript引擎,和google的Chrome浏览器采用的引擎的一样,是目前运行JavaScript最快、最稳定的引擎。

三.设计模型

NodeJs是采用单线程、异步式I/O、事件驱动式的程序设计模型。

四.Node.js能做什么

  • 具有复杂逻辑的网站;

  • 基于社交网络的大规模Web应用;

  • Web Socket服务器;

  • TCP/UDP套接字应用程序;

  • 命令行工具;

  • 交互式终端程序;

  • 带有图形用户界面的本地应用程序;

  • 单元测试工具;

五.Node.js优缺点

  • 优点

1. 高并发(最重要的优点)

2. 适合I/O密集型应用

详细对比了 Node.js 与 PHP+Nginx 组合,结果显示在3000并发连接、30秒的测试下,输出“hello world”请求:

PHP 每秒响应请求数为3624,平均每个请求响应时间为0.39秒;

Node.js 每秒响应请求数为7677,平均每个请求响应时间为0.13秒。

而同样的测试,对MySQL查询操作:

PHP 每秒响应请求数为1293,平均每个请求响应时间为0.82秒;

Node.js 每秒响应请求数为2999,平均每个请求响应时间为0.33秒。

  • 缺点

1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;

2. 只支持单核CPU,不能充分利用CPU

解决:目前原生已经支持多核利用。

3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

原因:单进程,单线程。

解决方案:

(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;

(2)开多个进程监听同一个端口,使用cluster模块。

六.Node.js 的适用场景

  • RESTful API

这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。

  • 统一Web应用的UI层

目前MVC的架构,在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。不讨论这种架构是好是坏,但是有另外一种实践,面向服务的架构,更好的做前后端的依赖分离。如果所有的关键业务逻辑都封装成REST调用,就意味着在上层只需要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另一个页面的,他们也不用管用户数据更新是通过Ajax异步获取的还是通过刷新页面。

  • 大量Ajax请求的应用

例如个性化应用,每个用户看到的页面都不一样,缓存失效,需要在页面加载的时候发起Ajax请求,NodeJS能响应大量的并发请求。

总而言之,NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。

最后祝大家工作顺利,天天开心!不积跬步,无以至千里;不积小流,无以成江海!!!