node之發(fā)展背景(一)

一. Node.js介紹

Node.js發(fā)布于2009年5月,由Ryan Dahl(瑞恩·達爾)在GitHub上發(fā)布了最初版本的部分Node.js包球化,隨后幾個月里,有人開始使用Node.js開發(fā)應(yīng)用
Node.js是一個基于Chrome JavaScript運行時建立的平臺签夭, 是一個Javascript運行環(huán)境
Node 是一個服務(wù)器程序, 用Javascript這個語言開發(fā)服務(wù)器
Node.js的實質(zhì)是對Chrome V8引擎進行了封裝
V8 JavaScript 引擎是 Google 用于其 Chrome 瀏覽器的底層 JavaScript 引擎
傳統(tǒng)意義上的 JavaScript 運行在瀏覽器上尝艘,這是因為瀏覽器內(nèi)核實際上分為兩個部分:渲染引擎和 JavaScript 引擎。前者負(fù)責(zé)渲染 HTML + CSS炕吸,后者則負(fù)責(zé)運行 JavaScript伐憾。Chrome 使用的 JavaScript 引擎是 V8,它的速度非澈漳#快

二树肃、Node.js的特點

單線程:

這里的單線程是指主線程為“單線程”,所有的阻塞部分交給部分的線程池處理瀑罗,然后這個主線程通過一個隊列跟線程池協(xié)作胸嘴,Node.js以單線程為基礎(chǔ)的,這個正是Node.js保持輕量級和高性能的關(guān)鍵斩祭。

非阻塞I/O

在Node.js提供的支持模塊中劣像,我們可以看到包括文件在內(nèi)的許多函數(shù)都是異步執(zhí)行的,這與傳統(tǒng)語言有著一定的區(qū)別停忿。為了方便服務(wù)器的開發(fā)驾讲,Node.js的網(wǎng)絡(luò)模塊特別多,包括HTTP席赂、DNS吮铭、net、UDP颅停、HTTPS谓晌、TLS等 ,開發(fā)人員可以快速的構(gòu)建web服務(wù)器癞揉。
一個異步I/O的大致流程:

(1) 發(fā)起I/O調(diào)用

用戶通過JavaScript代碼調(diào)用Node核心模塊纸肉,將參數(shù)和回調(diào)函數(shù)傳入核心模塊溺欧。
Node核心模塊會將傳入的參數(shù)和回調(diào)函數(shù)封裝成一個請求對象。
將這個請求對象推入I/O線程池等待執(zhí)行柏肪。
JavaScript發(fā)起的異步調(diào)用結(jié)束姐刁,JavaScript線程繼續(xù)執(zhí)行后續(xù)操作。

(2)執(zhí)行回調(diào)

I/O操作完成后會將結(jié)果存儲到請求對象的result屬性上烦味,并發(fā)出操作完成的通知聂使。每次事件循環(huán)時會檢查是否有完成的I/O操作,如果有就將請求對象加入觀察者隊列中谬俄,之后當(dāng)做事件處理柏靶。
處理I/O觀察者事件時會取出之前封裝在請求對象中的回調(diào)函數(shù),執(zhí)行這個回調(diào)函數(shù)溃论,并將result當(dāng)做參數(shù)屎蜓,以完成JavaScript回調(diào)的目的。

事件驅(qū)動

在某一些傳統(tǒng)語言的網(wǎng)絡(luò)編程中钥勋,我們會用到回調(diào)函數(shù)炬转,比如當(dāng)Socket資源達到某種狀態(tài)的時,注冊的回調(diào)函數(shù)就會執(zhí)行笔诵。Node.js的設(shè)計思想以事件驅(qū)動為核心返吻,它提供的絕大多數(shù)API都是基于事件的、異步的風(fēng)格乎婿。以Net模塊為例子测僵,其中的net.Socket對象有以下的事件:connect、data谢翎、end捍靠、timeout、drain森逮、error榨婆、close等。使用Node.js的開發(fā)人員需要根據(jù)自己的業(yè)務(wù)邏輯注冊相應(yīng)的回調(diào)函數(shù)褒侧。這些回調(diào)函數(shù)都是異步執(zhí)行的良风。這意味著雖然在代碼結(jié)構(gòu)中這些函數(shù)是依次注冊的,但是它們并不依賴于自身出現(xiàn)的順序闷供,而是等待相應(yīng)的事件觸發(fā)烟央。
事件驅(qū)動的優(yōu)勢在于充分利用了系統(tǒng)資源,執(zhí)行代碼無須等待某種操作完成歪脏,有限的資源可以用于其他的任務(wù)疑俭。Node.js的目標(biāo)是為后端的網(wǎng)絡(luò)服務(wù)編程,在服務(wù)器的開發(fā)中,并發(fā)的請求處理是一個大問題婿失,阻塞式的函數(shù)會導(dǎo)致資源的浪費和時間的延遲钞艇。通過事件的注冊啄寡、異步函數(shù),開發(fā)人員可以提高資源的利用率哩照,性能也會改善挺物。

三、Node.js優(yōu)缺點

Node.js優(yōu)點:
采用事件驅(qū)動葡秒、異步編程姻乓,為網(wǎng)絡(luò)服務(wù)而設(shè)計嵌溢。其實Javascript的匿名函數(shù)和閉包特性非常適合事件驅(qū)動眯牧、異步編程。而且JavaScript也簡單易學(xué)赖草,很多前端設(shè)計人員可以很快上手做后端設(shè)計学少。
Node.js非阻塞模式的IO處理給Node.js帶來在相對低系統(tǒng)資源耗用下的高性能與出眾的負(fù)載能力,非常適合用作依賴其它IO資源的中間層服務(wù)秧骑。
Node.js輕量高效版确,可以認(rèn)為是數(shù)據(jù)密集型分布式部署環(huán)境下的實時應(yīng)用系統(tǒng)的完美解決方案。Node非常適合如下情況:在響應(yīng)客戶端之前乎折,您預(yù)計可能有很高的流量绒疗,但所需的服務(wù)器端邏輯和處理不一定很多。
Node.js缺點:
可靠性低
單進程骂澄,單線程吓蘑,只支持單核CPU,不能充分的利用多核CPU服務(wù)器坟冲。
一旦這個進程崩掉磨镶,那么整個web服務(wù)就崩掉了。

四健提、Node.js使用介紹

Node.js使用Module模塊去劃分不同的功能琳猫,以簡化App開發(fā),Module就是庫私痹,跟組件化差不多脐嫂,一個功能一個庫。
NodeJS內(nèi)建了一個HTTP服務(wù)器紊遵,可以輕而易舉的實現(xiàn)一個網(wǎng)站和服務(wù)器的組合账千,不像PHP那樣,在使用PHP的時候癞蚕,必須先搭建一個Apache之類的HTTP服務(wù)器蕊爵,然后通過HTTP服務(wù)器的模塊加載CGI調(diào)用,才能將PHP腳本的執(zhí)行結(jié)果呈現(xiàn)給用戶
require() 函數(shù)桦山,用于在當(dāng)前模塊中加載和使用其他模塊攒射;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末醋旦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子会放,更是在濱河造成了極大的恐慌饲齐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咧最,死亡現(xiàn)場離奇詭異捂人,居然都是意外死亡,警方通過查閱死者的電腦和手機矢沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門滥搭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捣鲸,你說我怎么就攤上這事瑟匆。” “怎么了栽惶?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵愁溜,是天一觀的道長。 經(jīng)常有香客問我外厂,道長冕象,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任汁蝶,我火速辦了婚禮渐扮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穿仪。我一直安慰自己席爽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布啊片。 她就那樣靜靜地躺著只锻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪紫谷。 梳的紋絲不亂的頭發(fā)上齐饮,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音笤昨,去河邊找鬼祖驱。 笑死,一個胖子當(dāng)著我的面吹牛瞒窒,可吹牛的內(nèi)容都是我干的捺僻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匕坯!你這毒婦竟也來了束昵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葛峻,失蹤者是張志新(化名)和其女友劉穎锹雏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體术奖,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡礁遵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了采记。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佣耐。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挺庞,靈堂內(nèi)的尸體忽然破棺而出晰赞,到底是詐尸還是另有隱情,我是刑警寧澤选侨,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站然走,受9級特大地震影響援制,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芍瑞,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一晨仑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拆檬,春花似錦洪己、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屑那,卻和暖如春拱镐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背持际。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工沃琅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜘欲。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓益眉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子郭脂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容