Node.js知識梳理之Node.js概述

什麼是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前提條件

一、Node.js是基於ECMAScript,因此在學習Node.js前必須可以使用客戶端Javascript,或者瞭解Javascript基本語法。必須熟悉Javascript中的核心概念:閉包、函數、對象、原型與原型鏈等。服務器

二、熟悉ES6及ES6+中常用的的新語法,Node.js運行在服務器端,因此不存在客戶端的兼容問題,Node.js最新版本幾乎已經支持全部ES新標準。 好比:因爲Node.js的異步I/O特性,須要大量的回調函數,這也就形成了傳說中傳統客戶端開發中想象不到的地獄回調,ES6中由Promise到Async就是他的最終解決方案。學會ES6會使你Node.js開發插上起飛的翅膀。babel

三、加分項:學習過JSP、PHP、ASP.NET等後端服務器語言,學習Node.js會更加遊刃有餘。若是沒有學過也不要緊,Node.js和其餘語言也有必定差異,稍加學習也能快速掌握。網絡

Node.js的特性

一、單線程 Node.js是單線程,Node.js之父ryan dahl爲了極致的性能,避免過分設計,本身在編寫Nginx模塊時Nginx的異步引發了他的思考。當時Chrome的V8引擎出世加上Javascript的語言特性恰好知足了他當時的需求。Node.js由於是單線程因此沒有上下文切換因此性能很是高。 注意:Node.js的底層是由C和C++編寫,Node.js雖然是單線程機制,可是執行具體的任務時,底層C/C++程序依舊是在多線程運行。多線程

二、非阻塞I/O 無鎖機制,不會產生死鎖,支持上萬個併發鏈接。由於Node.js是單線程,加入多個任務會面臨等待,其中一個任務報錯,其餘任務會被阻斷執行。因此對應單線程的是非阻塞I/O。任務執行過程,進程不會等待任務完成,而是把任務放入事件隊列。閉包

三、事件循環 Node.js有一個事件環,在執行一個任務時,開始執行到回調結果這段時間,能夠執行其餘任務,當任務執行完成,會繼續執行原任務的回調函數。併發

Node.js可以作什麼

因爲Node.js的特性,他特別擅長開發I/O密集型的網絡應用。框架

一、命令行工具

二、單元測試工具

三、交互式終端程序

四、客戶端Javascript編譯工具

好比Webpack打包工具,React、Vue、Angular是當下前端開發三大開發框架,babel是當前前端開發者必不可少的Javascript編譯工具。

五、GUI界面的本地應用程序

Electron是基於Chromium和Node.js可使用HTML、CSS、JS構建桌面應用程序。

六、Web Socket服務器

七、TCP/UDP套接字程序

八、高併發的社交網絡應用程序

淘寶雙十一就是用了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秒

相關文章
相關標籤/搜索