什么是Node.js?
Node.js簡稱Node,是一個可以使JavaScript運行在服務器端的開發平臺,JavaScript是一種Web前端語言,Node.js讓JavaScript成為服務器端腳本語言,
Node.js選擇JavaScript作為實作語言的原因:
- JavaScript滿足CommonJS標準,符合事件驅動,用戶較多且門檻較低
- Chrome的V8引擎具有出色的性能
Node.js運行時環境包含執行JavaScript程式所需的一切條件,該引擎會將JavaScript代碼轉換為更快的機器碼,
Node.js進一步提升JavaScript的能力,使JavaScript可以訪問檔案、讀取資料庫、訪問行程,從而勝任后端任務,
使用Node.js 的最大優點是開發人員可以在客戶端和服務器端編
JavaScript,打通了前后端,
Node.js發展迅速,目前已成為JavaScript服務器端運行平臺的事實標準,
Node.js將V8引擎封裝起來,作為服務器運行平臺,以執行JavasScript撰寫的后端腳本程式,


Node.js是跨平臺的,能運行在Windows、macOS和Linux平臺上,
Node.js除了自己的標準類別庫之外,還可使用大量的第三方模塊系統來實作代碼的分享和重用,
與其他后端腳本語言不同的是Node.js內置了處理網路請求和回應的函式庫,也就是自備了HTTP服務器,所以不需要額外部署HTTP服務器,
Node.js特點
非阻塞I/O

非阻塞I/O又稱異步式I/O,阻塞I/O是指執行緒在執行程序中遇到I/O操作時,作業系統會撤銷該執行緒的CPU控制權,使其暫停執行,處于等待狀態,同時將資源轉讓給其他執行緒,
非阻塞I/O是指當執行緒遇到I/O操作時,不會以阻塞方式等待I/O操作完成或資料回傳,而只是將I/O請求轉發給作業系統,繼續執行下一條指令,非阻塞I/O是Node.js的重要特點,
事件驅動

事件驅動以事件為中心:Node.js將每一個任務都當成事件來處理
- Node.js在執行程序中會維護一個事件佇列,需執行的每個任務都會加入事件佇列并提供一個包含處理結果的回呼函式,
- 在事件驅動模型中,會生成一個事件回圈執行緒來監聽事件,不斷地檢查是否有未處理的事件,
- Node.js的異步機制是基于事件的,所有磁盤I/O、網路通信、資料庫查詢事件都以非阻塞的方式請求,回傳的結果由事件回圈執行緒來處理,
單執行緒
Node.js的應用程式是單行程、單執行緒的,但是通過事件和回呼支持并發,性能變得非常高,
在阻塞模式下,一個執行緒只能處理一項任務,要想提高吞吐量必須使用多執行緒,在非阻塞模式下,執行緒不會被I/O操作阻塞,該執行緒所使用的CPU核心利用率永遠是100%,I/O操作以事件的方式通知作業系統,
Node.js在主執行緒中維護一個事件佇列,當接收到請求后,就將該請求作為一個事件放入該佇列中,然后繼續接收其他請求,
Node.js內部通過執行緒池來完成非阻塞I/O操作,Node.js的單執行緒是指對JavaScript層面的任務處理是單執行緒的,而Node.js本身是一個多執行緒平臺,
Node語法基礎
- 每條陳述句都以分號結束(注:也可沒有";")
- 一行代碼可以包含多條陳述句(注:若一行有多條陳述句 每條陳述句都要以";"結束,建議一行只有一條陳述句)
- 若一行陳述句太長可以使用 \ 進行換行
- 陳述句塊 由多條陳述句組成 這些陳述句都在 {}中
注釋:
- 單行注釋 // 快捷鍵 ctrl /
- 多行注釋 /* … */ 快捷鍵 ctrl shift /
變數
- 可以是任意的資料型別
- 變數名是由字母 數字 下劃線 $組成的字符序列 但首字符不能是數字
- JavaScripts是弱型別語言 在定義變數時不需要指定變數的型別 都可以使用var來宣告
- 可以再宣告變數的同時賦值 也可以先宣告變數然后再賦值
- 變數可以反復的賦值
變數的提升
在ES5中變數可以在宣告之間使用它的值是undefined,不建議使用
在ES6中使用let關鍵字宣告變數,變數是不能在宣告之前使用
變數值的泄露
在陳述句塊中使用var關鍵字宣告的變數會被提升為全域變數,這樣就會造成區域變數值得泄露,防止變數值得泄露方法是使用let關鍵字宣告區域變數
作用域
ES5中作用域只有全域作用域 函式作用域
- 全域作用域:從宣告的位置開始到源程式的結束均有效
- 函式作用域:只在函式范圍內有效
ES6中增加的塊級作用域
在ES6中使用let關鍵字宣告的變數只在它所在的塊級作用域中有效
第一個Node程式
// 匯入node的http模塊(內置的http服務器模塊)
const http = require('http');
// 創建一個http服務器
// req:request 是客戶端的請求物件 用于向服務器端發送請求
// res:response 是服務器的回應物件 用于向客戶端發送回應資訊的格式
const httpSever = http.createServer(function(req,res){
// 設定回應頭資訊 200是狀態碼 表示請求-回應成功
res.writeHead(200,{'Content-Type':'text/plain'});
// 向客戶端發送字串
res.end('Hello World');
})
// 注冊監聽程式
httpSever.listen(8080,function (){
console.log('服務器在8080埠上監聽');
});

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/293378.html
標籤:其他
上一篇:前端基礎六之jQuery效果
