若要加载模块二进制_春哥说 | 浅谈NodeJs的模块机制-2
★ 目錄 ★
01
Node的模塊實現概述
02
優先從緩存中加載
03
路徑分析和文件定位
Node的模塊實現概述
Nodejs再集成CommonJs的模塊機制的規范時進行了取舍,同時增加了特性。
Nodejs在引入模塊,主要是分為三個步驟:
- 路徑分析
- 文件定位
- 文件編譯
同時,模塊主要分為兩類。核心模塊和文件模塊。
核心模塊:
由NodeJs提供的模塊,并且部分核心模塊在NodeJS進程啟動時就編譯成二進制文件,加載進了內存中。
在引入時則省略文件定位和文件編譯兩個步驟,并且具有最高優先級。
文件模塊:
由用戶提供的模塊,在NodeJs進程動態運行時進行引入。
優先從緩存中加載
NodeJs在引入模塊的過程中,會使用緩存進行優化性能。
與瀏覽器緩存文件不同,NodeJs會對引入過的文件進行緩存,緩存編譯執行后的對象。
此時緩存進內存中的模塊具有最高優先級。核心模塊緩存檢查高于文件模塊緩存檢查。
路徑分析和文件定位
文件標識符存在多種形式,那么對于這些差異,模塊的查找和定位也存在區別。
模塊標識符的分析
在通過require()進行引入模塊時,需要傳入一個標識符。
標識符主要具有以下類型:
- 核心模塊http,buffer,fs等;
- .或..開始的相對路徑;
- 以/開始的絕對路徑;
- 非路徑形式的文件模塊,如自定義的connect模塊。
核心模塊
核心模塊在服務啟動時就已經編譯成二進制代碼,其加載過程最快,優先級僅次于緩存加載。
路徑形式的模塊
以.,..和/開始的標識符都被轉換為真實文件路徑為索引的模塊,并且在編譯后將會加載進緩存中,其速度僅次于核心模塊加載。
自定義模塊
自定義模塊非核心模塊也不是路徑形式的標識符,是一種特殊的文件模塊。可能是一個文件或一個包的形式,這類模塊的查找是最費事的,也是所有方式中最慢的。
在這之前我們先知道什么是模塊路徑。
模塊路徑是Node在定位文件模塊的具體文件時制定的查找策略,具體表現為一個路徑組成的數組。
我們可以動手嘗試以下:
module_path.js
然后執行這個腳本
可以看出模塊路徑的生成規則,從當前目錄下的node_module的文件夾開始,遞歸搜索父目錄直至根目錄。
類似于Javascript的原型鏈或者作用域鏈。在加載過程中逐個嘗試模塊路徑路徑,直至找到目標文件。
并且可以看出文件嵌套越深,耗時越久,這也是為什么自定義模塊加載最慢的原因。
文件定位
文件拓展名的分析
require()在分析標識符時,會出現沒有文件拓展名的情況。在這種情況,使用的是CommonJs的處理方式,是按js,json和node拓展名依次嘗試。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的若要加载模块二进制_春哥说 | 浅谈NodeJs的模块机制-2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拼接图像亮度均匀调整_液晶拼接屏如何才能
- 下一篇: fpga电平约束有什么作用_FPGA从串