[TOC]
## Node.js 是什么
Node.js 是一個基于V8的JavaScript運行環境。
- Node.js 是一個Javascript運行環境(Runtime Enviroment)。后端程序員如果理解這個有障礙的話, 可以想想JRE。
- Node.js 基于Google的V8引擎。實質是對Chrome V8引擎進行了封裝。
- Node.js 是運行在服務端的 JavaScript。
Node.js 發布于2009年5月,由Ryan Dahl開發。
## Node.js 與JavaScript框架(比如JQuery、 ExtJS)等的關系
完全沒有可比性, 不是一個類型的概念。Node.js不是JavaScript的Framework, 也不是前端的庫。
如果實在要拿個來比的話, 可以與JRE(Java Runtime Enviroment)來比較,Node.js讓 JavaScript 成為與PHP、Python、Perl、Ruby 等服務端語言平起平坐的腳本語言
## Node.js 的出現及應用場景
**線程與線程阻塞**
看一下線程的定義:可以獨立運行的最小的CPU單位, 可以在一個進程里并發運行, 共享該進程下的內存地址空間。
注意,線程是共享內存空間的,如果多個線程用到同一個空間的變量時, 則先到顯得,后到等待, 也就是加入到阻塞排隊序列,也就是常說的線程阻塞。
一般的服務器, 比如Apache的服務器就會出現以上阻塞的狀況。
Node.js是怎么做的?
- 單進程,單線程
- 異步I/O
也就是說:通過異步回調的方式, 不需要實時等待執行結果的返回。
NodeJS的工作原理其實就是事件循環。可以說每一條NodeJS的邏輯都是寫在回調函數里面的,而回調函數都是有返回之后才異步執行的!
Java等后端語言通過子線程也可以實現并行請求,Node.js 看起來更自然。
NodeJS處理并發的能力強,但處理計算和邏輯的能力反而很弱,通過異步I/O,可以實現對高并發的高性能處理。
#### 適用場景
1. RESTful API
2. 前后端分離的Web應用
3. 大量 Ajax請求的應用
## Node.js 優缺點
優點:
1. 高并發
2. 適合I/O密集應用
缺點:
1.不適合CPU密集型應用
2. 因為單進程單線程,不能充分利用CPU
3. 可靠性低。
這個缺點可以結合Nngix反向代理和使用cluster模塊改善
4.開源庫尚未成熟
5.Debug不方便
## 下載安裝
官方網站: [https://nodejs.org/en/](https://nodejs.org/en/)
有Windows 版本也有linux 版本的。
Windows版本下載之后點擊安裝一直next 就可以了。以下介紹一下Linux下的安裝:
1. 下載完成后用ftp上傳到Linux任意文件夾。我的是/usr/local。進入到此文件夾。
```
cd /usr/local
```
2. 解壓
```
tar xf node-v8.3.0-linux-x64.tar.xz
```
3.進入解壓目錄,設置node和npm為全局變量
```
#ln -s /home/oscar/software/node-v8.3.0-linux-x64/bin/node /usr/local/bin/node
#ln -s /home/oscar/software/node-v8.3.0-linux-x64/bin/npm /usr/local/bin/npm
```
5.測試安裝結果,命令行執行:
```
#node -v
#npm -v
```
至此, Linux 下按照Node.js 完成。
*****
*****
- 0. 前言
- 1. 基礎篇
- Node.js 入門介紹與安裝
- Node.js運行模式與入門實例
- npm介紹及與Node.js關聯
- Webpack 快速介紹及入門示例
- 模塊
- webpack
- gulp
- 2. 進階篇
- Node.js與Apache比較
- Node.js VS JavaScript
- CommonJS、AMD、CMD與ES6
- 3. 框架篇
- Node.js之Express快速介紹與入門示例
- 4. 實戰篇
- 調試器監聽
- webpack入門示例
- 5. 補充篇
- 語法
- 前端包管理工具:npm、cnpm、yarn
- 6. 問題解決篇
- webpack之options has an unknown property ‘contentBase‘. These properties are valid: