2024-08-22|閱讀時間 ‧ 約 26 分鐘

Node.js 程式札記 : 事件驅動和非阻塞I/O、模組、npm

由於 Node.js 其非同步和事件驅動的特性,Node.js 特別適合構建高效能的網絡應用程式。本文將介紹 Node.js 的三個基礎概念:事件驅動和非阻塞I/O、模組系統以及 npm 套件管理器。

事件驅動和非阻塞I/O

在傳統的伺服器架構中,每一個請求通常會分配一個單獨的執行緒來處理,這種方式雖然簡單,但會在大量並發請求時消耗大量的資源。Node.js 則不同, Node.js 是採用了事件驅動和非阻塞 I/O 的架構。

事件驅動

Node.js 使用單執行緒來處理所有請求,但它會透過事件驅動的方式來管理。當一個請求到達時,Node.js 將其分派給事件迴圈(Event Loop),並註冊一個回調函數來處理該請求。當 I/O 操作(如讀寫文件或查詢數據庫)完成後,回調函數會被觸發,繼續處理後續邏輯。

非阻塞I/O

在傳統的阻塞 I/O 模式中,執行緒會等待 I/O 操作完成後再繼續後續的操作。這樣會導致資源的浪費。Node.js 則採用了非阻塞 I/O,即在發出 I/O 請求後,Node.js 會繼續處理其他請求,而不會等待 I/O 操作完成。當 I/O 操作完成後,對應的回調函數才會被執行。

以下是一個簡單的例子來說明非阻塞 I/O:

const fs = require('fs');

fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});

console.log('這行程式碼會先執行,即使文件尚未讀取完成');

在這段程式碼中,readFile 是一個非阻塞方法,它不會等待文件讀取完成,而是立即繼續執行後續程式碼。

模組系統

Node.js 內建了一個強大的模組系統,使得開發者可以將程式碼分解為小而易於管理的模組。每個模組都是一個單獨的文件,具有自己的作用域。這樣的設計有助於避免變量衝突,並程式碼碼更具可維護性。

在 Node.js 中,我們可以通過 require 函數來加載模組。例如:

// 加載內建的 http 模組
const http = require('http');

// 創建一個簡單的 HTTP 伺服器
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});

server.listen(3000, '127.0.0.1', () => {
console.log('伺服器運行在 http://127.0.0.1:3000/');
});

這段程式碼展示了如何使用 Node.js 的內建模組 http 來創建一個簡單的 HTTP 伺服器。模組系統不僅限於內建模組,你也可以創建自己的模組並在項目中使用。

npm 套件管理器

npm(Node Package Manager)是 Node.js 的套件管理工具,它允許開發者輕鬆地分享和管理項目中的依賴套件。透過 npm,你可以安裝現成的開源套件,節省開發時間。

例如,要安裝一個名為 express 的 web 框架,你只需運行以下命令:

npm install express

安裝完成後,你可以在項目中使用這個套件:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
res.send('Hello World');
});

app.listen(3000, () => {
console.log('伺服器運行在 http://localhost:3000/');
});

npm 也提供了套件的版本管理功能,讓你可以鎖定某個特定版本,確保項目的穩定性。此外,透過 package.json 文件,你可以清晰地定義項目的依賴關係,讓其他開發者能夠輕鬆地在自己的環境中復製你的開發環境。

總結

Node.js 的事件驅動和非阻塞 I/O 架構,使其在高並發應用中表現優異。模組系統讓程式碼結構更清晰,而 npm 套件管理器則提高了開發效率。這些是學習 Node.js 的基礎概念,理解它們能夠幫助你更好地掌握 Node.js。


😊 感謝你的耐心閱讀,若是你喜歡這篇內容,可以透過以下方式表達你的喜歡 😊

❤️按個愛心|💬留言互動|🔗分享此文|📌追蹤阿梧

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.