閱讀深入淺出nodeJS

閱讀筆記:一章章閱讀崭添,記錄個(gè)人比較有用的語句臊岸,包括js + node 的原理部分梗脾,并不總結(jié)尽楔。

node特點(diǎn)

Chrome瀏覽器與Node的組件構(gòu)成.png

異步I/O

js異步調(diào)用中對于結(jié)果值的捕獲是符合Don't call me,I will call you的原則,
圖為經(jīng)典的ajax

Ajax異步請求.png

在node中 異步I/O也很常見衡招,與ajax調(diào)用的方式極其類似

nodeIO異步.png

在node中絕大多數(shù)的操作都是異步篱昔,包括從文件的讀取和網(wǎng)絡(luò)請求等。

事件與回調(diào)函數(shù)

隨著web2.0時(shí)代的到來始腾,js在前端擔(dān)任了更多的職責(zé)州刽,事件也得到了廣泛的應(yīng)用,node不像Rhino那樣受java的影響很大浪箭,而是將前端瀏覽器中應(yīng)用廣泛且成熟的事件引入后端穗椅,配合異步I/O,將事件點(diǎn)暴露給業(yè)務(wù)邏輯奶栖。

單線程

Node保持了JS在瀏覽器中單線程的特點(diǎn)匹表,在Node中门坷,js與其余線程是無法共享任何狀態(tài)的。單線程的最大好處是不用像多線程編程那樣處處在意狀態(tài)的同步問題袍镀,這里沒有死鎖的存在默蚌,也沒有線程上下文交換所帶來的性能上的開銷。
缺點(diǎn):1.無法利用多核CPU2.錯誤會引起整個(gè)應(yīng)用退出苇羡,應(yīng)用的健壯性值得考驗(yàn)3.大量計(jì)算占用CPU導(dǎo)致無法繼續(xù)調(diào)用異步IO绸吸。
Node采用了與web workers相同的思路來解決單線程中大計(jì)算量的問題:child_process ,node通過將計(jì)算分發(fā)給各個(gè)子進(jìn)程设江,將大量計(jì)算分解掉锦茁,再通過進(jìn)程之間的事件消息來傳遞結(jié)果。

Node使用者所注重的特性

  1. 前后端編程語言環(huán)境統(tǒng)一
  2. Node帶來的高性能IO用于實(shí)時(shí)應(yīng)用
  3. 并行IO使得使用者可以更高效地利用分布式環(huán)境
  4. 并行IO 有效利用穩(wěn)定接口提升web渲染能力
  5. 云計(jì)算平臺提供Node支持
  6. 游戲開發(fā)領(lǐng)域
  7. 工具類應(yīng)用

模塊機(jī)制

在WEB2.0流行的過程中叉存,各種前端庫和框架被開發(fā)出來蜻势,它們最初用于兼容各個(gè)版本的瀏覽器,隨后隨著更多的用戶需求被前端實(shí)現(xiàn)鹉胖,javascript也從表單校驗(yàn)躍遷到應(yīng)用開發(fā)的級別上。


javascript的變遷.png

經(jīng)歷了長長的后天努力過程够傍,javascript不斷被類聚和抽象甫菠,以更好地組織業(yè)務(wù)邏輯,從另一個(gè)角度而言冕屯,它也道出了javascript先天就缺乏的一項(xiàng)功能:模塊寂诱,類似其它高級語言中,java有類文件安聘,Python有import機(jī)制痰洒,Ruby有require,PHP有include和require浴韭。

CommonJS

CommonJS規(guī)范的出現(xiàn)---希望javascript能夠在任何地方運(yùn)行丘喻。CommonJS API寫出的應(yīng)用可以具備跨宿主環(huán)境執(zhí)行的能力,這樣不僅可以利用javascript開發(fā)服客戶端應(yīng)用念颈,而且開可以編寫以下應(yīng)用

  1. 服務(wù)端javascript應(yīng)用程序
  2. 命令行工具
  3. 桌面圖形界面應(yīng)用程序
  4. 混合應(yīng)用
    CommonJS為javascript開發(fā)大型應(yīng)用程序指明了道路泉粉,這些規(guī)范涵蓋了模塊、二進(jìn)制榴芳、Buffer嗡靡、字符集編碼、IO流窟感、進(jìn)程環(huán)境讨彼、文件系統(tǒng)、套接字柿祈、單元測試哈误、web服務(wù)器網(wǎng)關(guān)接口哩至、包管理等。
node瀏覽器w3c和commonjs的關(guān)系.png

Node借鑒CommonJS的Modules規(guī)范實(shí)現(xiàn)了一套非常易用的模塊系統(tǒng)黑滴,NPM對Packages規(guī)范的完好支持使得Node應(yīng)用在開發(fā)過程中事半功倍憨募。

CommonJS的模塊規(guī)范:模塊引入,模塊定義袁辈,模塊標(biāo)識菜谣。

Node的模塊實(shí)現(xiàn)

在Node中引入模塊需要經(jīng)歷如下3個(gè)步驟

  1. 路徑分析
  2. 文件定位
  3. 編譯執(zhí)行

優(yōu)先從緩存加載

在Node中,模塊分為兩類:一類是Node提供的模塊晚缩,稱為核心模塊尾膊;另一類是用戶編寫的模塊,稱為文件模塊
核心模塊部分在Node進(jìn)程啟動時(shí)荞彼,部分核心模塊直接加載進(jìn)內(nèi)存冈敛,省去了文件定位和編譯執(zhí)行,而且路徑分析中優(yōu)先判斷鸣皂,所以它的加載速度是最快的
文件模塊則是運(yùn)行時(shí)動態(tài)加載需要完整的三個(gè)過程抓谴。
瀏覽器會緩存靜態(tài)腳本文件以提高性能一樣,Node對引入過的模塊都會進(jìn)行緩存減少二次引入的開銷寞缝,不同的是癌压,瀏覽器僅僅緩存文件,而Node緩存的是編譯和執(zhí)行后的對象荆陆。不管是核心模塊還是文件模塊滩届,require()方法對相同模塊的二次加載都一律采用緩存優(yōu)先的,這是第一優(yōu)先級被啼。不同之處在于核心模塊的緩存檢查優(yōu)先于文件模塊的緩存檢查帜消。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浓体,隨后出現(xiàn)的幾起案子泡挺,更是在濱河造成了極大的恐慌,老刑警劉巖汹碱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘衬,死亡現(xiàn)場離奇詭異,居然都是意外死亡咳促,警方通過查閱死者的電腦和手機(jī)稚新,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跪腹,“玉大人褂删,你說我怎么就攤上這事〕迦祝” “怎么了屯阀?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵缅帘,是天一觀的道長。 經(jīng)常有香客問我难衰,道長钦无,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任盖袭,我火速辦了婚禮失暂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳄虱。我一直安慰自己弟塞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布拙已。 她就那樣靜靜地躺著决记,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倍踪。 梳的紋絲不亂的頭發(fā)上系宫,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音建车,去河邊找鬼笙瑟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛癞志,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播框产,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼凄杯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秉宿?” 一聲冷哼從身側(cè)響起戒突,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎描睦,沒想到半個(gè)月后膊存,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忱叭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年隔崎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韵丑。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爵卒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撵彻,到底是詐尸還是另有隱情钓株,我是刑警寧澤实牡,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站轴合,受9級特大地震影響创坞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜受葛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一题涨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奔坟,春花似錦携栋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澜建,卻和暖如春向挖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炕舵。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工何之, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咽筋。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓溶推,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奸攻。 傳聞我的和親對象是個(gè)殘疾皇子蒜危,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • Node.js是目前非常火熱的技術(shù)睹耐,但是它的誕生經(jīng)歷卻很奇特辐赞。 眾所周知,在Netscape設(shè)計(jì)出JavaScri...
    w_zhuan閱讀 3,609評論 2 41
  • Node.js是目前非诚跹担火熱的技術(shù)响委,但是它的誕生經(jīng)歷卻很奇特。 眾所周知窖梁,在Netscape設(shè)計(jì)出JavaScri...
    Myselfyan閱讀 4,064評論 2 58
  • storm的集群提交方式 StormSubmitter.subnitTopology()方法 問題一赘风、如何把sto...
    夙夜M閱讀 515評論 0 0
  • 為何詩人在社會最底層飄零 經(jīng)歷了秋風(fēng)還有凌厲的寒風(fēng) 臉頰上吹裂的皺紋是否再次被吹裂 流溢的鮮血是否已凝結(jié)成冰 為何...
    青燈先生閱讀 295評論 1 6
  • 源文來自https://github.com/TIGERB/easy-tips贝次,分享給大家 共同進(jìn)步 PHP 5....
    回眸淡然笑閱讀 950評論 0 2