Node.js入門基礎

Node.js

歸納

是一個可以讓JS代碼在服務器端運行的開發平臺。php

一開始只是用於寫高性能Web服務器的。前端

可是越寫越大造成了生態,因而更名爲Node.js。node

  • 他只是一個平臺,而不是一種獨立的語言。
  • 輕量級架構,Java、php等須要運行在服務器上,而Node.js不須要架設在任何服務器軟件之上。

特色

  • 單線程
    • 對服務器的要求低,這就限制了她只能作小型微型應用。
    • 和事件驅動聯合起來,使得在宏觀上看起來是多線程。
    • 一個8G內存的服務器能夠同時處理超過4萬用戶的鏈接。
    • 例如:張三和李四,張三先啓動服務器,張三正在作某件事情,李四的請求來了,先把張三的語法終止,把李四的請求放到一個事件循環當中,放過以後,繼續作張三的事情。
  • 非阻塞I/O
    • 當在訪問數據庫取得數據的時候,須要一段時間,在傳統的單線程處理機制中,在返回了訪問數據庫代碼以後,整個線程都將暫停下來,等待數據庫返回結果。也就是說,I/O阻塞了代碼的執行,極大地下降了程序的執行效率。
  • 事件驅動

Node.js當中全部的I/O都是異步的,都是回調函數套用回調函數。web

適合作什麼?

特色
  • 善於I/O,不善於計算。
    • Node.js適合與web socket配合,開發長鏈接的實時交互應用程序。
  • 天生異步。
適用場景
  • 網站開發
  • IM即時通信
  • API
  • Http Proxy
  • 前端構建工具(npm)
  • 跨平臺打包工具
  • 寫操做系統(NodeOS)
  • 命令行工具
  • 反向代理
  • 。。。
Node.js不是全能的
  • 不適合開發一些銀行、證券、電信等一些剛併發場景的開發。
  • 適合一些A輪、B輪的開發。

縮短髮送請求到響應的時長

  • 發送請求快一點(客戶端網速決定)
  • 響應快一點(服務器帶寬、CDN加速…)
  • 服務器請求任務快一點(多線程)
  • 服務器從磁盤讀取/寫入數據到數據庫快一點
    • 磁盤的讀取速度有上限
    • 分佈式
    • 矩陣式
    • 刀片式
    • …式

V8引擎

一款專門對JS語言進行解釋和執行的流程虛擬機數據庫

只要V8引擎可以嵌入到不一樣的宿主環境中,那麼就能夠用JS語言來寫各類不一樣領域的應用。npm

起初的做用:

用於Chrome瀏覽器解析JS腳本。json

引擎的優點:
  • 強大的編譯和快速執行效率
  • 性能很是好
  • 歷史包袱輕,沒有同步I/O
  • 強大的事件驅動機制

Node模塊化開發

CommonJS規範
  • 從文件角度來看,每一個JS文件就是一個模塊
  • 從結構上來看,多個JS文件之間能夠相互require
  • 在Node.js中,一個模塊中定義的變量、函數等,都只能在這個文件內部有效,當須要今後文件外部引用這些變量、函數時,必須使用exports進行暴露。使用者經過require引用。
模塊標識

當咱們使用require()引入外部模塊時,使用的就是模塊標識瀏覽器

  • 內建模塊
    • 底層是由C++編寫
  • 文件模塊
    • 由用戶本身建立的模塊
  • 核心模塊
    • 由node引擎提供的模塊
    • 由node_modules提供的模塊

exports和require怎麼來的?

函數參數服務器

每個js文件都是一個node模塊,同時也是一個匿名自調函數。多線程

當node在執行模塊中的代碼時,他會首先在代碼的最頂部,添加以下代碼:

function (exports, require, module, __filename, __dirname){}

而後在最低端,添加}

So:

模塊中的代碼都是包裝在一個函數中執行的,而且在函數執行的同時傳遞了5個實參。

5個實參
  • exports
    • 該對象用來將函數內部的局部變量或局部函數暴露到外部。
  • requires
    • 用來引入外部的模塊。
  • module
    • 表明的是當前模塊自己,exports就是module的屬性;
    • 咱們既能夠用exports導出,也能夠用module.exports導出
  • __filename
    • 當前模塊的完整路徑
  • __dirname
    • 當前模塊所在文件夾的完整路徑。

exports和module.exports的區別

值類型和引用類型

二者區別

exports只能使用.語法來向外暴露內部變量。exports.xxx = xxx;

module.exports既能夠經過.語法,也能夠直接賦值一個對象。

包和包管理器

package
概念:

Common.JS的報規範容許咱們將一組相關的模塊組合到一塊兒,造成一組完整的工具,這組工具就叫作包。

組成

實際上就是一個壓縮文件,解壓以後還原爲目錄

  • package.json包描述文件
  • bin 可執行二進制
  • lib js代碼
  • doc 文檔
  • test 單元測試
package.json

描述包的相關信息,以供外部讀取分析。

它是一個JSON格式的文件。

PS:該文件禁止添加註釋。


NPM包管理工具

Node Package Manager

若是頁面中引入node_modules中某個模塊,有先從當前目錄引入,若是沒有,則往上級查找,直到根目錄。

CNPM

淘寶鏡像官網

在官網能夠找到使用方式:

https://npm.taobao.org

相關文章
相關標籤/搜索