**
Node.js
1、定義
它是一個Javascript運行環境(簡單來說就是可以解析、執行js代碼),不是一門語言/庫/框架
,依賴於Chrome V8引擎進行代碼解釋
(1)Node.js中的JavaScript沒有BOM、DOM,只有ECMAScript (基本語法),因爲服務端不操作頁面
(2)在Node這個javascript執行環境中爲js提供了一些服務器級別的操作API(文件讀寫、構建網絡服務、網絡通信、http服務器等)
2、特性:
優點有(基於V8的優點):
- 採用事件驅動、異步編程,爲網絡服務而設計
- Node.js非阻塞模式的IO處理
- Node.js輕量高效
- Node.js使用Google V8 JavaScript 引擎,
因爲:
V8是基於BSD許可證的開源軟件
V8速度非常快
V8專注於網絡功能,在HTTP、DNS、TCP等方面更加成熟
使用事件驅動、非阻塞IO模型(簡單來講就是異步)、輕量高效
缺點有:
- 單進程,單線程(有辦法解決的),不能充分的利用多核CPU服務器
- 可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰(因爲是單線程)
- 開源組件庫質量參差不齊,更新快,向下不兼容
解決的缺點的方法:
- 多進程綁定在同一個端口偵聽。
- 開啓多個進程,每個進程綁定不同的端口,用反向代理服務器如 Nginx 做負載均衡
- 一個進程負責監聽、接收連接,然後把接收到的連接平均發送到子進程中去處理
Node.js能做什麼
1、Web服務器後臺(java、php做的node.js都能做)
2、命令行工具,Node.js把JavaScript的易學易用和Unix網絡編程的強大結合到了一起
3、Node.js是事件驅動的。開發者可以在不使用線程的情況下開發出一個能夠承載高併發的服務器。(高併發:簡單來說,指通過設計保證系統能夠高效並行處理很多請求。)
4、大多數與JS相關的包都放在npm上
有了npm之後,一條命令就可以下載不同的庫/框架,不用再到各個庫/框架的官網上去下載