什么是Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
注意:Node.js不是一门新的语言也不是语言,他是使用C和C++编写的基于V8引擎的JS运行环境,并在ECMAScript基础上提供了一系列扩展对象,比如:fs,event。
Node.js语法基于ECMAScript(Javascript是由ECMAScript+DOM+BOM组成,所以Node.js中不具备DOM与BOM的API),他与我们接触到的传统客户端Javascript不同,Node.js不需要浏览器宿主环境,他可以独立的运行在服务器端,并且编写服务器端应用程序,与他对应的语言是服务器端的JSP、PHP、ASP.NET。
学习的Node.js前提条件
1、Node.js是基于ECMAScript,所以在学习Node.js前必须能够使用客户端Javascript,或者了解Javascript基本语法。必须熟悉Javascript中的核心概念:闭包、函数、对象、原型与原型链等。
2、熟悉ES6及ES6+中经常使用的的新语法,Node.js运行在服务器端,所以不存在客户端的兼容问题,Node.js最新版本几乎已经支持所有ES新标准。 比如:由于Node.js的异步I/O特性,需要大量的回调函数,这也就造成了传说中传统客户端开发中想象不到的地狱回调,ES6中由Promise到Async就是他的最终解决方案。学会ES6会使你Node.js开发插上起飞的翅膀。
3、加分项:学习过JSP、PHP、ASP.NET等后端服务器语言,学习Node.js会更加游刃有余。如果没有学过也没关系,Node.js和其他语言也有一定差别,稍加学习也能快速掌握。
Node.js的特性
1、单线程 Node.js是单线程,Node.js之父ryan dahl为了极致的性能,避免过度设计,自己在编写Nginx模块时Nginx的异步引起了他的思考。当时Chrome的V8引擎出世加上Javascript的语言特性刚好满足了他当时的需求。Node.js因为是单线程所以没有上下文切换所以性能非常高。 注意:Node.js的底层是由C和C++编写,Node.js虽然是单线程机制,但是执行具体的任务时,底层C/C++程序依旧是在多线程运行。
2、非阻塞I/O 无锁机制,不会产生死锁,支持上万个并发连接。因为Node.js是单线程,加入多个任务会面临等待,其中一个任务报错,其他任务会被阻断执行。所以对应单线程的是非阻塞I/O。任务执行过程,进程不会等待任务完成,而是把任务放入事件队列。
3、事件循环 Node.js有一个事件环,在执行一个任务时,开始执行到回调结果这段时间,可以执行其他任务,当任务执行完成,会继续执行原任务的回调函数。
Node.js能够做什么
由于Node.js的特性,他特别擅长开发I/O密集型的网络应用。
1、命令行工具
2、单元测试工具
3、交互式终端程序
4、客户端Javascript编译工具
比如Webpack打包工具,React、Vue、Angular是当下前端开发三大开发框架,babel是当前前端开发者必不可少的Javascript编译工具。
5、GUI界面的本地应用程序
Electron是基于Chromium和Node.js可以使用HTML、CSS、JS构建桌面应用程序。
6、Web Socket服务器
7、TCP/UDP套接字程序
8、高并发的社交网络应用程序
淘宝双十一就是用了Node.js进行前端渲染,阿里巴巴、腾讯、去哪儿、美团、PayPal都在使用Node.js开发自己的应用服务,许多大型网站也选用Node.js作为主要后台开发语言。
Node.js性能测试
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秒