了不起的Node.js


本章节将不会深入阐述Node.js的原理及使用方法。主要是学习并理解什么是Node.js,它可以用来做什么,以及如何怎么去使用

介绍

Node.js 的官方描述

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm,是全球最大的开源库生态系统。

我们只需要了解这些重点:

1.Node.js是一个JS的 运行环境 2.Node.js的包管理器 npm 将是我们经常要使用的工具 3.Node.js采用 事件驱动异步编程

事件驱动相信大多数人都不陌生, 比如在DOM操作中,我们可以给一个按钮注册一个onclick事件,等到我们触发这个事件的时候,才会去执行我们之前写好的回调函数。 Node.js的设计思想中以事件驱动为核心,它提供的绝大多数API都是基于事件的。 这些回调函数都是异步执行的,这意味着虽然我们的代码结构是按顺序以此注册这些回调函数,但是他们的执行并不依赖于在脚本中出现的顺序

Node.js 是如何工作的

传统的网络服务技术,是每个新增一个连接(请求)便生成一个新的线程,这个新的线程会占用系统内存,最终会占掉所有的可用内存。而 Node.js 仅仅只运行在一个单线程中,使用非阻塞的异步 I/O 调用,所有连接都由该线程处理。

当然,在所有客户端的请求共享单一线程时也会有问题, 这也是一个编写 Node.js 应用的潜在缺陷. 首先, 大量的计算可能会使得 Node 的单线程暂时失去反应, 并导致所有的其他客户端的请求一直阻塞, 直到计算结束才恢复正常。 其次,开发人员需要非常小心,不要让一个 Exception 阻塞核心的事件循环,因为这将导致 Node.js 实例的终止(实际上就是程序崩溃)。

Node.js 应该用在什么地方

聊天

聊天应用程序是最能体现 Node.js 优点的例子:轻量级、高流量并且能良好的应对跨平台设备上运行密集型数据(虽然计算能力低)。同时,聊天也是一个非常值得学习的用例,因为它很简单,并且涵盖了目前为止一个典型的 Node.js 会用到的大部分解决方案。

对象数据库接口(API ON TOP OF AN OBJECT DB)

尽管,Node.js 确实非常擅长实时交互的应用,同时它也十分适合通过对象数据库(object DB)来查询数据(如 MongoDB)。以 JSON 格式存储的数据允许 Node.js 直接处理,不需要纠结数据转换和匹配的问题。

队列输入

如果你正在接收一个高量并发的数据,你的数据库可能会成为你处理的瓶颈。正如上面的描述,Node.js 可以轻松的处理并发连接。

典型的例子包括:日志记录或者用户跟踪数据(user-tracking data)的记录,这会被分批处理并且在稍后才使用;同时也包括最终一致性(so, 常用于 NoSQL)可以接受,不需要立即反应的操作(例如 Facebook 上更新点赞的数目)。

数据流

在较为传统的网络平台上,HTTP 的请求和响应更像是孤立的事件;然而事实上,他们都是数据流。这一观察结果在 Nodejs 上可以用来建立一些很酷的功能。因为数据通以流的形式接收,而我们可以在网站上在线处理正在上传中的文件。这样的话,就可以实现实时的音频和视频编码

总结

请记住:Node.js 从来不是用于解决大规模计算问题而创建的。它的出现是为了解决大规模I/O 的问题,并且在这一点上做的非常好。

如果你项目需求中不包含CPU密集型操作,也不需要访问任何阻塞的资源,那么你就可以利用的 Node.js 的优点,尽情的享受快速、可扩展的网络应用。

参考: http://blog.jobbole.com/53736/