《深入淺出nodejs》筆記

第二章:模塊機(jī)制

總結(jié):nodejs遵循commonjs規(guī)范,commonjs定義了模塊、I/O、二進(jìn)制、文件等規(guī)范,其中最重要的就是nodejs模塊規(guī)范,下面總結(jié)一下nodejs的模塊加載:
nodejs的模塊分為核心模塊和文件模塊,核心模塊在nodejs源代碼編譯中,已經(jīng)編譯進(jìn)了二進(jìn)制可執(zhí)行文件中,只要node啟動(dòng),就已經(jīng)被加載到內(nèi)存中,所以加載速度比較快。像文件模塊就需要經(jīng)歷路徑解析、文件定位和編譯執(zhí)行的過(guò)程。
路徑解析可以是一個(gè)標(biāo)識(shí)符、相對(duì)路徑或者絕對(duì)路徑,最終require方法會(huì)轉(zhuǎn)換成真實(shí)路徑。
文件定位包括文件擴(kuò)展名分析和包目錄分析等,其中文件擴(kuò)展名沒(méi)帶時(shí),是以.js .json .node的順序進(jìn)行解析的。
完成路徑解析和文件定位后,node會(huì)新建一個(gè)模塊對(duì)象,這時(shí)候就有了exports、module等變量,再具體的編譯過(guò)程中,node會(huì)對(duì)加載的js文件進(jìn)行頭尾的包裝(包裝見(jiàn)下面示例代碼),包裝的過(guò)程中,將模塊對(duì)象的module exports __filename __dirname等變量傳遞給function函數(shù),這就是我們沒(méi)有在js文件中定義module等變量,卻可以使用的原因。

    //(function(exports, require, module, __filename, __dirname){//頭
        var a = 123;
        exports.add = function(b){
            return a+b;
        }
        //...
    //});//尾

另外,node對(duì)于模塊的加載是有緩存的,以減少二次引用時(shí)的性能開(kāi)銷(核心模塊的緩存檢查優(yōu)先于文件模塊的緩存檢查)。

////////////////
筆記:

  1. nodejs特點(diǎn):
    單線程、數(shù)據(jù)驅(qū)動(dòng)、異步、速度快、耗費(fèi)內(nèi)存多

劣勢(shì):

  • 默認(rèn)不支持多核,但可以用cluster實(shí)現(xiàn)
  • 不支持服務(wù)器集群 ,但可以用node-http-proxy實(shí)現(xiàn)
  • 借助nginx實(shí)現(xiàn)負(fù)載均衡
  • 災(zāi)難恢復(fù) 可以用node-cluster實(shí)現(xiàn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容