注:爲了本教程的準確性,部分描述引用了官網及網絡內容。前端
Node.js 概念
Node.js本質上是使用Google的V8引擎製做出來的服務框架。V8自己是Google爲了解決Chrome瀏覽器的性能問題而製做的前端引擎(開源)。自己依託於瀏覽器引擎,這也是爲何Node.js使用的是前端的JavaScript語言編程。node
V8的誕生是Google爲了解決JavaScript的性能問題,用了內聯緩存和隱藏類技術實現的前端引擎。V8使用C++編寫,也所以V8能夠在C++項目中完美兼容使用。express
V8被Google使用在大多數產品中,如Chrome瀏覽器,安卓瀏覽器等。npm
V8引擎在不斷升級,Node.js自己也在不斷更新,在下載Node.js安裝包時就攜帶對應版本的V8引擎。若須要查看V8版本,在CMD中輸入:編程
1 node -p process.versions.v8
如須要查看Node.js的版本,輸入:瀏覽器
1 node -v
Node.js基礎原理
在Node.js中最主要的特性,即事件驅動與非阻塞I/O都與其底層的特殊實現有關。在Node.js的底層有一個事件輪循器(Event Loop)。每當有事件註冊時,會先將事件放置到事件隊列(Event Queue),並經過事件輪循器順序執行事件隊列。當輪循到一個事件時,事件輪循器會爲其分配一個工做線程(Worker Threads)執行該事件,事件完成後經過執行回調(Callback)返回到事件列表並經過V8引擎傳遞給應用(Application)。緩存
其詳細步驟爲:服務器
一、應用層發出請求給V8網絡
二、V8經過Node.js的中間層(Bindings)傳遞給底層(Libuv)框架
三、在Libuv層中,請求會按順序放置在事件隊列(Event Queue)
四、事件輪詢器(Event Loop)依次爲事件隊列中的事件分配工做線程(Worker Threads)
五、工做線程完成事件,並經過執行回調(Callback)返回事件列表
六、事件的執行結果經過中間層及V8返回給應用
在應用層中,發送請求後會繼續執行應用層後續代碼,而不須要等待事件的完成,因此是異步處理。事件處理完成後經過回調返回到應用。整個過程只由一個主線程完成,所以不存在死鎖、等待的狀況。
這就是Node.js的事件驅動與I/O非阻塞的實現原理。
其中,V8是Node.js依賴的核心庫,而Bindings層及Libuv層是Node.js中用C++寫的原創底層。
最上層的standard library是用JavaScript寫的Node.js基礎庫。裏面有各類經常使用的API,如:http模塊、fs模塊等。咱們實際中最經常使用的就是standard library層。
其餘概念
npm是Node.js的包管理工具,能夠經過npm下載已有的第三方包到本身的項目中,也能夠上傳本身代碼給別人使用。npm會隨Node.js的安裝包一併安裝。
查看npm版本:
1 npm -v
其餘經常使用的npm命令:
1 npm view XX version 查看版本(如:npm view express version) 3 npm install XX --save 安裝包 5 node XX.js 啓動一個服務入口(如:node index.js) 7 npm run dev 啓動客戶端 npm run build 啓動發佈
REPL(交互式解釋器)能夠輸入代碼實時執行,用以測試JavaScript代碼塊。主要用在Linux等非圖像界面服務器的代碼調試場景中。
安裝Node.js
1.下載node.js :https://nodejs.org/en/download/
2.安裝完成後,環境變量會在安裝過程當中自動設置好。若使用的是zip壓縮版解壓的node.js,則需手動配置環境變量Path:
3.打開cmd,命令行:「node --version」檢查Node.js版本,顯示正確的版本號即安裝成功。
4.配置npm源(重要)
--全局配置切換到淘寶源(推薦此項,由於外網鏈接不穩定):
命令行: npm config set registry https://registry.npm.taobao.org
--全局配置切換到官方源:
命令行: npm config set registry http://www.npmjs.org
--查看當前源:
命令行: npm config get registry