Node.js คือ JavaScript Runtime ที่ทำงานบน V8 Engine นอกเบราว์เซอร์ ทำให้ JavaScript ใช้สร้าง Server, CLI, API และระบบ Real-time ได้ โดยจุดเด่นคือ Single-threaded, Non-blocking I/O ซึ่งช่วยรับงานจำนวนมากโดยไม่ต้องรอ I/O ทีละงาน
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart LR
subgraph Era1["ยุค Browser JS / Browser Era"]
A["JavaScript ใน Browser
Client-side only"]
end
subgraph Era2["ยุค Server JS / Node.js Era"]
B["Node.js + V8
JS นอก Browser"]
C["npm Ecosystem
Package จำนวนมาก"]
end
subgraph Era3["ยุค Real-time API / Modern Backend"]
D["Non-blocking I/O
API และ Real-time"]
E["Full-stack JS
ภาษาเดียวทั้งระบบ"]
end
A --> B --> C --> D --> E
node -v และ npm -v| รูปแบบ | ลักษณะ | ผลกระทบ | เหมาะกับ |
|---|---|---|---|
| Blocking I/O | รอให้งานเสร็จทีละงาน | ผู้ใช้ถัดไปต้องรอ | Script เล็ก ๆ |
| Non-blocking I/O | ส่งงานไปทำแล้วรับ callback/promise | รองรับ request จำนวนมาก | API Server |
| CPU-intensive | คำนวณหนัก | อาจบล็อก Event Loop | ควรใช้ Worker/Queue |
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart TD
A["Call Stack
โค้ดที่กำลังทำงาน"] --> B["Node APIs
File/Network/Timer"]
B --> C["Microtask Queue
Promise callbacks"]
B --> D["Callback Queue
Timer/I/O callbacks"]
C --> A
D --> A
A --> E["Event Loop
ตัวจัดคิวงาน"]
E --> C
E --> D
// event-loop-demo.js
// สาธิตลำดับงาน synchronous, microtask และ timer
console.log('1. start');
setTimeout(() => {
console.log('4. timer callback');
}, 0);
Promise.resolve().then(() => {
console.log('3. promise microtask');
});
console.log('2. end');
// ตัวอย่างการใช้งาน:
// node event-loop-demo.js
// ผลลัพธ์โดยทั่วไป:
// 1. start
// 2. end
// 3. promise microtask
// 4. timer callback
node -vsetTimeout หลายค่าและสังเกตลำดับผลลัพธ์