日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

若要加载模块二进制_春哥说 | 浅谈NodeJs的模块机制-2

發布時間:2025/6/17 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 若要加载模块二进制_春哥说 | 浅谈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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。