Node.js介绍
-
Node.js是一个JavaScript运行环境(runtime)。它让JavaScript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP、JSP、Python、Ruby等后端语言平起平坐。
-
Node.js是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome 浏览器的 JS 解释部分,但是Ryan Dahl却把这个V8搬到了服务器上,用于做服务器的软件。
Node.js优势
1. Node.js语法完全是JS语法,只要你懂JS基础就可以学会Node.js后端开发。
Node.js打破了过去 JavaScript只能在浏览器中运行的局面。前后端编程环境统一,可以大大降低开发成本。
2. NodeJs 超强的高并发能力。
Node.js 的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具。
首先让我们来看一下现在的服务器端语言中存在着什么问题。 在 Java、PHP 或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为 4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而 Web 应用程序的硬件成本当然就上升了。
Node.js 不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用 Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。
3. 实现高性能服务器
严格地说,Node.js是一个用于开发各种Web服务器的开发工具。在Node.js服务器中,运行的是高性能V8 JavaScript脚本语言,该语言是一种可以运行在服务器端的 JavaScript脚本语言。
那么,什么是 V8 JavaScript脚本语言呢?该语言是一种被 V8 JavaScript引擎所解析并执行的脚本语言。V8 JavaScript引擎是由Google公司使用 C++语言开发的一种高性能JavaScript引擎,该引擎并不局限于在浏览器中运行。Node.js将其转用在了服务器中,并且为其提供了许多附加的具有各种不同用途的API。例如, 在一个服务器中,经常需要处理各种二进制数据。在JavaScript脚本语言中,只具有非常有限的对二进制数据的处理能力,而Node.js所提供的Buffer类则提供了丰富的对二进制数据的处理能力。
另外,在 V8 JavaScript引擎内部使用一种全新的编译技术。这意味着开发者编写的高端的 JavaScript脚本代码与开发者编写的低端的C语言具有非常相近的执行效率,这也是Node.js 服务器可以提供的一个重要特性。
4. 开发周期短、开发成本低、学习成本低。
Node.js 自身哲学,是花最小的硬件成本,追求更高的并发,更高的处理性能。
Node.js 适合做什么?
- 前后端编程语言环境统一。
这类倚重点的代表是雅虎。雅虎开放了Cocktai框架,利用自己深厚的前端沉淀,将YUI3这个前端框架的能力借助Node延伸到服务器端,使得使用者摆脱了日常工作中一边写JavaScript—边写PHP所帯来的上下文交换负担。
- Node 带来的高性能 I/0 用于实时应用。
Voxer将Node应用在实时语音上。国内腾讯的朋友网将Node应用在长连接中,以提供实时功能,花瓣网、蘑菇街等公司通过socket.io实现实时通知的功能。
- 并行 I/0 使得使用者可以更高效地利用分布式环境。
阿里巴巴 eBay 是这方面的典型。阿里巴巴的 NodeFox 和 eBay 的 ql.io都是借用 Node 并行 I/O 的能力,更高效地使用已有的数据。
- 云计算平台提供 Node 支持。
微软将 Node 引入 Azure 的开发中,阿里云、百度均纷纷在云服务器上提供 Node 应用托管服务,Joyent更是云计算中提供Node支持的代表。这类平台看重JavaScript 带来的开发上的优势,以及低资源占用、高性能的特点。
- 游戏开发领域。
游戏领域对实时和并发有很高的要求,网易开源了pomelo实时框架,可以应用在游戏和高实时应用中。
- 工具类应用。
过去依赖 java 或其他语言构建的前端工具类应用,纷纷被一些前端工程师用 Node 重写,用前端熟悉的语言为前端构建熟悉的工具。