深刻浅出Node.js学习笔记(一)

Node简介

1.Node的诞生历程

Node诞生于2009年3月。前端

2.Node的命名与起源

Node的别名:Nodejs、NodeJS、Node.js。编程

2.1为何是JavaScript

设计高性能Web服务器的几个要点:事件驱动、非阻塞I/O。后端

考虑到高性能、符合事件驱动、没有历史包袱这三个主要缘由,JavaScript成为了Node的实现语言。浏览器

2.2为何叫Node

Node能够构建服务器、客户端、命令行工具,Node发展为一个强制不共享任何资源的单线程、单进程系统,其目的是成为一个构建快速、可伸缩的网络应用平台。性能优化

Node自身很是简单,经过通讯协议来组织许多Node,很是容易经过扩展来达到构建大型网络应用的目的。服务器

每个Node进程都构建成这个网络应用的一个节点,这是它名字所含意义的真谛。网络

3.Node给JavaScript带来的意义

Node打破了过去JavaScript只能在浏览器运行的局面,先后端编程环境统一,可大大减小先后端转换所须要的上下文交换代价。架构

4.Node的特色

做为后端JavaScript运行的平台,Node保留前端浏览器JavaScript中那些熟悉的接口,没有改变语言的任何特性,依旧依赖做用域和原型链,区别在于它将前端中普遍运用的思想迁移到服务端。异步

4.1异步I/O

异步调用中对于结果值的捕获是符合"Don't call me, I will call you"原则。分布式

在Node中,绝大多数的操做都以异步的方式进行调用。

4.2事件与回调函数

事件的编程方式具备轻量级、松耦合、只关注事务点等优点。

回调函数无处不在,在JavaScript中,函数做为一等公民,能够将函数做为对象传递给方法做为实参进行调用。

4.3单线程

在Node中,JavaScript与其余线程没法共享任何状态。

单线程的优势:

  1. 不用像多进程编程那样到处在乎状态的同步问题;
  2. 没有死锁;
  3. 没有线程上线文交换所带来的的性能的开销;

单线程的缺点:

  1. 没法利用多核CPU;
  2. 错误会引发整个应用退出,应用的健壮性值得考验;
  3. 大量计算占用CPU致使没法继续调用异步I/O;

Web Works可以建立工做线程来进行计算,以解决JavaScript大计算阻塞UI渲染的问题。

工做线程为了避免阻塞主线程,经过消息传递的方式来传递运行结果,这也使得工做线程不能访问到主线程中的UI。

Node解决单线程中大计算量的方式:child_process(子线程)。

子进程:经过计算分发到各个子进程,能够将大量计算分解掉,而后经过进程之间的事件消息来传递结果,这能够很好地保持应用模型的简单和低依赖。

4.4跨平台

Node能够在Windows和*nix平台运行,得益于在操做系统与Node上层模块系统之间构建一层平台层架构,即libux。

5.Node的应用场景

Node的应用场景主要分为I/O密集型和CPU密集型。

5.1I/O密集型

Node面向网络且擅长并行I/O,可以有效地组织起更多的硬件资源,从而提供更多更好的服务。

I/O密集型的优点:

利用事件循坏的处理能力,而不是启动每个线程为每个请求服务,资源占有极少。

5.2是否不擅长CPU密集型业务

Node优秀的运算能力主要来自V8的深度性能优化。

CPU密集型应用给Node带来的挑战:

因为JavaScript单线程的缘由,若是长时间运行的计算(如大循环),将致使CPU时间片不能释放,使得后续I/O没法发起。可是适当调整和分解大型运算任务为多个小任务,使得运算可以适时释放,不阻塞I/O调用的发起,这样既能够同时受到并行异步I/O的好处,又能充分利用CPU。

Node充分利用CPU的方式:

  1. 经过编写C/C++扩展的方式高效的利用CPU,将一些V8不能作到性能极致的地方经过C/C++来实现;
  2. 经过子进程的方式,利用进程间的消息传递结果,将计算和I/O分离;

CPU密集不可怕,如何合理调度是诀窍。

5.3与遗留系统和平共处

旧系统具备很是稳定的数据输出,持续为传统网站服务,同时为移动版提供数据源,Node将该数据源当作数据接口,发挥异步并行的优点。

5.4分布式应用

阿里巴巴的数据平台。

5.5Node的使用者

Node的使用者:

  1. 先后端编程环境统一;(雅虎)
  2. Node带来的高性能I/O用于实时应用;(腾讯,花瓣网,蘑菇街)
  3. 并行I/O使得使用者能够更高效地利用分布式环境;(阿里巴巴,eBay)
  4. 并行I/O,有效利用稳定接口提高Web渲染能力;(雪球财经,LinkedIn)
  5. 云计算平台提供Node支持;(微软,阿里云,百度云)
  6. 游戏开发领域;(网易)
  7. 工具类应用;
相关文章
相关标签/搜索