一、Nodejs介紹
1、nodejs是ecmascript的runtime
2、nodejs使用了event-driven(事件驅動)和non-blocking I/O model(無阻塞的io模型)
- 非阻塞:I/O時函式立即返回,程式不等I/O完成
- event-driven:Nodejs靠事件進行驅動
3、cpu密集 vs I/O密集
- cpu密集:壓縮、解壓、加密、解密
- I/O密集:檔案操作、網路操作、資料庫
因為JS操作是I/O密集,所以Nodejs是JS在serves上面的runtime
4、高併發應對之道
- 增加機器數
- 增加每臺機器的cpu數
5、Nodejs單執行緒
- 單執行緒只針對主程式,I/O作業系統底層多執行緒排程(Nodejs自己是單執行緒,但它有一部分任務交給作業系統自己去做多執行緒)
- 單執行緒不是單程式
6、Nodejs應用場景
- Web Server
- 原生程式碼構建(編譯之類)
二、Nodejs開發環境與除錯工具
1、環境
- CommonJS 規範
- global 物件(類似於js裡面的window物件)
- process 當前執行的程式
2、CommonJS規範
- 每個檔案都是一個模組,都有自己的作用域
- 在模組內部module變數代表模組本身
- module.exports屬性代表模組對外介面(將模組的一些東西輸出)
- require規則
- / 表示絕對路徑,. / 表示相對於當前檔案的
- 支援js、json、node的擴充名
- require特性
- module被載入的時候會執行一遍,並進行快取,第二次直接用快取裡面的結果
- 當一個模組被迴圈載入(a依賴b,然後b又依賴a),那麼只會輸出已經執行的部分(a執行在b依賴a之前a該執行的部分)
3、global全域性物件
- CommonJS
- Buffer、process、console
- timer