node.js使用事件驅動模型,當web server接收到請求,就把它關閉然後進行處理,然後去服務下乙個web請求。當這個請求完成,它被放回處理佇列,當到達佇列開頭,這個結果被返回給使用者。這個模型非常高效可擴充套件性非常強,因為webserver一直接受請求而不等待任何讀寫操作。(這也被稱之為非阻塞式io或者事件驅動io)
這邊引用之前看過的一篇部落格上的圖及settimeout的說明
這邊就要借用settimeout()函式來說明node的事件驅動機制,首先執行下面一段函式
console.log("aaaa");執行結果:for(i=1;i<3;i++),0)
}console.log("bbbb");
比較怪異的是console完aaaa之後並沒有立即console settimeout裡的函式,當然如果這裡去掉settimeout改為console結果還是會如我們想象的一樣,當然我們要講的是事件驅動,所以這邊用乙個settimeout(fuc,0)來表示立即執行。而我們看到了settimeout執行落在了正常事件的最後,之前看的一篇部落格,博主寫的是settimeout函式如果置零,也不會立即執行,因為html5預設規範對於settimeout函式有2ms的延遲,那會不會是因為這2ms的延遲致使輸出延時了呢,於是我們改進下**console
console.log("aaaa");執行結果:for(i=1;i<3;i++),500);console.log("bbbb");
}for(n=1;n<4;n++)
console.log("cccc");
設定了500ms延遲,之後也用了for迴圈做了3s的阻塞,但是輸出結果還是延時,所以settimeout執行的延時並非我們想象的那樣,而結合nodejs的事件**,我們得知當js執行到settimeout時,實際上為了不造成阻塞,會將settimeout時間扔到瀏覽器的時間佇列中,當函式從頭到尾執行完後,再丟擲我們settimeout的輸出結果
Node模組 學習筆記(二)
node的模組分為三大類 全域性模組 系統模組 自定義模組 demo示例 1.js console.log process.env if process.env.dev else console.log dirname 常用的系統模組 demo示例 1 path模組的示例 2.js let path...
Node 學習筆記
一.第乙個node伺服器 傳送響應資料 hello world response.end hello world n listen 8888 終端列印如下資訊 console.log server running at 二.使用express搭建第乙個伺服器 var express require ...
node學習筆記
node是什麼?官網 如何安裝?nodejs入門 一 nodejs詳細安裝步驟 如何驗證安裝成功?在cmd中輸入node v 接下來就是正文了 怎樣建立伺服器 引入http模組 建立伺服器 為伺服器物件新增請求事件 res.end ok 建立埠3000 const mongoose require ...