Node是一个针对网络应用开发的平台,它基于Google的JavaScript运行时引擎V8,但它不仅仅只是V8.
Node的标准类库是它非常重要的一部分,它涵盖了从TCP服务端到同步或者异步的文件管理.
Node已经迅速成为一个可行并且真正高效的web开发平台.
在Node诞生之前,在服务端运行JavaScript是件不可思议的事情,并且对其他脚本语言来说,要实现非阻塞I/O通常需要依赖特殊的类库.
JavaScript与非阻塞I/O的组合极为强大:在JavaScript与生俱来的callback特性下,我们能在同一进程中异步地操作文件读写,网络sockets以及其他的I/O操作.
为什么使用Node
假设你正在开发一个广告服务器,每分钟需要发布几百万条的广告.
Node的非阻塞I/O将是一个高效的解决方案,因为服务器能够最大限度的利用到所有的I/O资源,并且不需要开发者写特殊的底层代码.
Node把非阻塞I/O作为提高某些类型应用性能的方式.
JavaScript传统的事件机制意味着在异步编程中,它有着相对方便以及容易理解的语法.
在传统的编程语言中,I/O操作将阻塞进程直到它完成为止.
Node的异步文件读写以及网络API意味着在这些相对较慢的I/O操作处理的时候,主进程仍然能处理其他请求
Node主要特征
Node的主要特性是它的标准类库,模块系统以及npm(包管理系统),当然还有许多其他的.
实际上Node最强大的特性是它的标准类库,它主要由二进制类库以及核心模块两部分组成,二进制类库包括libv,它为网络以及文件系统提供了快速的事件轮循以及非阻塞的I/O.同时它还有http类库,所以你可以很快确定你的http客户端和服务端.
Node的核心模块主要由JavaScript编写,有不清楚的地方,可以直接阅读源码.
Node环境中的关键部分如下图:
EventEmitter事件的接口
每个Node开发者都会接触到EventEmitter接口,它是大多数Node核心模块的基础,Stream,网络,文件系统全部继承于它.
高可拓展性I/O的基础
Streams继承于EventEmitters,能被用来在不可预测的输入下创建数据,比如网络连接,数据传输速度取决于其他用户在干什么.
FS:处理文件
Node的文件模块不但可以通过非阻塞的I/O读写文件,而且它也有同步的方法.你可以通过fs.stat异步获取文件的信息,也可以通过fs.statSync同步读取.
网络:创建网络客户端和服务端
网络模块是http模块的基础,也可以用来创建通用的网络客户端与服务端.
全局对象与其他模块
比如process对象,它让你可以把数据传入或者传出标准I/O流(stdout,stdin).
还有无处不在的console对象.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。