【番外篇】node.js

有些比較瑣碎的知識點,這裏再整理下:)node

模塊加載機制

模塊的類型

  • node內置的核心模塊(http\fs\net\vm)
  • 第三方的文件模塊(npm安裝、本地文件模塊)

模塊加載 require()

  • 加載模塊名:首先先查找同名內置核心模塊,若是沒有則查找 node_modules 目錄加載模塊
    require('koa')
    複製代碼
    當 require 遇到一個既不是核心模塊,又不是以路徑形式表示的模塊名稱時,會試圖在當前目錄下的 node_modules 目錄中來查找是否是有這樣一個模塊。若是沒有找到,則會在當前目錄的上一層中的 node_modules 目錄中繼續查找,反覆執行這一過程,直到遇到根目錄爲止
  • 按路徑加載,在不顯式指定文件模塊擴展名的時候,Node.js 會分別試圖加上 .js、.json 和 .node擴展名

加載緩存

  • Node.js 對於已經加載過的文件模塊,會緩存在內存中,之後屢次require引用時,直接從內存中獲取
  • 經過文件名緩存全部加載過的文件模塊,而不是 require() 提供的參數緩存的,也就是說即便你分別經過 require('express') 和 require('./node_modules/express') 加載兩次,也不會重 復加載,由於儘管兩次參數不一樣,解析到的文件倒是同一個

Node.js應用部署

  • 故障恢復的能力
  • 日誌(訪問日誌與 錯誤日誌)
  • 利用多核提高性能
  • 共享同一端口(設置web服務器反向代理+虛擬主機)
    server {
          listen 80;
          server_name mysite.com; #虛擬主機名
    
          location / {
              proxy_pass http://localhost:3000;  #設置反向代理
          }
      }
    複製代碼
  • 提供自動重啓服務的能力(代碼有部署更新時,無需手動重啓)

Node.js不適合作的服務

  • 計算密集型的服務:node.js單線程+事件驅動的異步編程方式,當遇到計算量很大的事件時,每每會阻塞隊列中後續的響應事件,對於多核資源利用效率不高
  • 單用戶多任務型應用:須要同時執行多個任務在多個進程時,多進程之間的協做不夠便捷
  • 邏輯十分複雜的事務:對於線性且多步驟複雜的操做,其中一個步驟失敗都須要回滾到最初狀態。Node.js更善於處理那些邏輯簡單但訪問頻繁的任務,而不適合完成邏輯十分複雜的工做
相關文章
相關標籤/搜索