Node.js是什么
傳統(tǒng)意義上的 JavaScript 運(yùn)行在瀏覽器上,這是因?yàn)闉g覽器內(nèi)核實(shí)際上分為兩個(gè)部分:渲染引擎和 JavaScript 引擎秕硝。前者負(fù)責(zé)渲染 HTML + CSS偶器,后者則負(fù)責(zé)運(yùn)行 JavaScript。Chrome 使用的 JavaScript 引擎是 V8缝裤,它的速度非称梁洌快。
Node.js 是一個(gè)運(yùn)行在服務(wù)端的框架憋飞,它的底層就使用了 V8 引擎霎苗。我們知道 Apache + PHP 以及 Java 的 Servlet 都可以用來開發(fā)動(dòng)態(tài)網(wǎng)頁,Node.js 的作用與他們類似榛做,只不過是使用 JavaScript 來開發(fā)唁盏。
為什么要用 Node.js
面對(duì)一個(gè)新技術(shù)内狸,多問幾個(gè)為什么總是好的。既然 PHP厘擂、Python昆淡、Java 都可以用來進(jìn)行后端開發(fā),為什么還要去學(xué)習(xí) Node.js刽严?至少我們應(yīng)該知道在什么場(chǎng)景下昂灵,選擇 Node.js 更合適。
總的來說舞萄,Node.js 適合以下場(chǎng)景:
- 實(shí)時(shí)性應(yīng)用眨补,比如在線多人協(xié)作工具,網(wǎng)頁聊天應(yīng)用等倒脓。
- 以 I/O 為主的高并發(fā)應(yīng)用撑螺,比如為客戶端提供 API,讀取數(shù)據(jù)庫崎弃。
- 流式應(yīng)用甘晤,比如客戶端經(jīng)常上傳文件。
- 前后端分離饲做。
實(shí)際上前兩者可以歸結(jié)為一種安皱,即客戶端廣泛使用長(zhǎng)連接,雖然并發(fā)數(shù)較高艇炎,但其中大部分是空閑連接酌伊。
Node.js 也有它的局限性,它并不適合 CPU 密集型的任務(wù)缀踪,比如人工智能方面的計(jì)算居砖,視頻、圖片的處理等驴娃。
當(dāng)然奏候,以上缺點(diǎn)不是信口開河总放,或者死記硬背迎卤,更不是人云亦云,需要我們對(duì) Node.js 的原理有一定的了解叙凡,才能做出正確的判斷疆柔。
npm
npm 包管理器
n和nvm
通常我們使用穩(wěn)定的 LTS 版本的 Node.js 即可咒精,但有的情況下我們又想嘗試一下新的特性,我們總不能來回安裝不同版本的 Node.js 吧旷档,這個(gè)時(shí)候我們就需要 n 或者 nvm 了模叙。n 和 nvm 是兩個(gè)常用的 Node.js 版本管理工具,關(guān)于 n 和 nvm 的使用以及區(qū)別鞋屈,這篇文章 講得特別詳細(xì)范咨,這里不再贅述故觅。
nrm
nrm 是一個(gè)管理 npm 源的工具。用過 ruby 和 gem 的同學(xué)會(huì)比較熟悉渠啊,通常我們會(huì)把 gem 源切到國(guó)內(nèi)的淘寶鏡像输吏,這樣在安裝和更新一些包的時(shí)候比較快。nrm 同理替蛉,用來切換官方 npm 源和國(guó)內(nèi)的 npm 源(如: cnpm)贯溅,當(dāng)然也可以用來切換官方 npm 源和公司私有 npm 源。