Node.js คืออะไร

  1. Node.js คืออะไร
  2. Node.js ทำงานอย่างไร
  3. การติดตั้งและตั้งค่า Node.js
  4. การสร้างเซิร์ฟเวอร์ Node.js อย่างง่าย
  5. สถาปัตยกรรม Node.js: ขับเคลื่อนด้วยเหตุการณ์ (Event-Driven), I/O ที่ไม่ปิดกั้น (Non-blocking)

สำหรับนักพัฒนาที่เชี่ยวชาญใน JavaScript เป็นอย่างดี Node.js คือขั้นตอนต่อไปที่จะขยายทักษะการเขียนโปรแกรมของคุณออกไปนอกขอบเขตของเบราว์เซอร์ Node.js เป็นที่รู้จักในด้านความอเนกประสงค์และประสิทธิภาพ ได้กลายเป็นตัวเลือกยอดนิยมสำหรับการทำแอพ ในบทความนี้ เราจะเจาะลึกโลกอันน่าทึ่งของ Node.js สถาปัตยกรรม การติดตั้ง และการตั้งค่าเซิร์ฟเวอร์ที่เรียบง่าย

1. Node.js คืออะไร

Node.js เป็นสภาพแวดล้อมรันไทม์ JavaScript แบบโอเพ่นซอร์สข้ามแพลตฟอร์ม อนุญาตให้เรียกใช้ JavaScript นอกเว็บเบราว์เซอร์ โดยหลักแล้วทำงานบนเซิร์ฟเวอร์ Node.js คิดค้นโดย Ryan Dahl ในปี 2009 สร้างขึ้นบนเอ็นจิ้น V8 JavaScript ของ Chrome ซึ่งจะคอมไพล์ JavaScript ลงในรหัสเครื่องโดยตรง มีโมเดล I/O ที่ขับเคลื่อนด้วยเหตุการณ์และไม่มีการปิดกั้น ซึ่งทำให้มีประสิทธิภาพอย่างไม่น่าเชื่อสำหรับแอปพลิเคชันเรียลไทม์ที่ต้องใช้ข้อมูลจำนวนมาก

ด้วยการใช้ประโยชน์จากรูปแบบการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ของ JavaScript และรวมเข้ากับการดำเนินการ I/O ระดับต่ำที่มีประสิทธิภาพ Node.js ได้เปลี่ยนแปลงพื้นฐานที่ JavaScript สามารถทำได้ ขณะนี้นักพัฒนาสามารถใช้ JavaScript เพื่อสร้างเครื่องมือบรรทัดคำสั่งหรือแม้แต่ดำเนินการสคริปต์ฝั่งเซิร์ฟเวอร์

2. Node.js ทำงานอย่างไร

Node.js ทำงานบนเอ็นจิ้น V8 JavaScript ซึ่งเป็นเอ็นจิ้นเดียวกับที่ขับเคลื่อน Google Chrome เครื่องยนต์ V8 ใช้รหัส JavaScript และแปลงเป็นรูปแบบที่เร็วกว่าและเครื่องอ่านได้ อย่างไรก็ตาม ความมหัศจรรย์ที่แท้จริงของ Node.js อยู่ที่สถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์และโมเดล I/O ที่ไม่ปิดกั้น

ภาษาฝั่งเซิร์ฟเวอร์ดั้งเดิม เช่น PHP หรือ Java ทำตามโมเดล I/O แบบซิงโครนัส แบบมัลติเธรด ซึ่งหมายความว่าคำขอของไคลเอ็นต์แต่ละรายการที่ส่งไปยังเซิร์ฟเวอร์จะสร้างเธรดใหม่หรือแม้แต่กระบวนการแยกต่างหาก หากคำขอต้องการการดำเนินการ I/O เช่น การอ่านจากฐานข้อมูล เธรดจะถูกบล็อกและรอจนกว่าการดำเนินการจะเสร็จสิ้น โมเดลนี้อาจนำไปสู่ความไร้ประสิทธิภาพที่มีนัยสำคัญเมื่อมีการเชื่อมต่อพร้อมกันจำนวนมาก

ในทางตรงกันข้าม Node.js ทำงานบนลูปเหตุการณ์แบบเธรดเดียวและติดตามโมเดล I/O แบบอะซิงโครนัสที่ไม่ปิดกั้น หมายความว่า Node.js ไม่รอให้การดำเนินการ I/O เสร็จสิ้น แต่จะลงทะเบียนฟังก์ชันการโทรกลับแทน ฟังก์ชันนี้จะถูกเรียกใช้เมื่อการดำเนินการเสร็จสิ้น ทำให้ Node.js สามารถจัดการงานอื่นๆ ได้พร้อมกัน ลูปเหตุการณ์จะประมวลผลคำขอที่เข้ามาอย่างต่อเนื่องและดำเนินการเรียกกลับที่เกี่ยวข้องกับการดำเนินการ I/O ที่เสร็จสมบูรณ์ แนวทางนี้ส่งผลให้มีแอปพลิเคชันที่ปรับขนาดได้สูงและมีประสิทธิภาพสูงที่สามารถจัดการการเชื่อมต่อพร้อมกันหลายพันครั้งได้อย่างมีประสิทธิภาพ

อ้างอิงโมเดลการทำงานพร้อมกันของ JavaScript และคู่มือการวนรอบเหตุการณ์สำหรับรายละเอียดเพิ่มเติม

3. การติดตั้งและตั้งค่า Node.js

ก่อนเริ่มใช้งาน Node.js คุณต้องติดตั้งบนเครื่องของคุณ Node.js เข้ากันได้กับ Windows, Linux และ MacOS

คุณสามารถดาวน์โหลด Node.js เวอร์ชันเสถียรล่าสุดได้จากเว็บไซต์อย่างเป็นทางการของNode.js เลือกเวอร์ชันที่เหมาะสมกับระบบปฏิบัติการของคุณ แพ็คเกจ Node.js มีทั้งรันไทม์ Node.js และ npm, Node Package Manager ซึ่งให้คุณติดตั้งโมดูลและแพ็คเกจของบุคคลที่สาม

เมื่อการดาวน์โหลดเสร็จสิ้น ให้เปิดโปรแกรมติดตั้งและปฏิบัติตามคำแนะนำ ในการตรวจสอบการติดตั้งที่สำเร็จ ให้เปิดเทอร์มินัลหรือหน้าต่างพรอมต์คำสั่งแล้วรันคำสั่งต่อไปนี้:

node -v
npm -v

คำสั่งเหล่านี้ควรแสดงเวอร์ชันที่ติดตั้งของ Node.js และ npm ตามลำดับ

4. การสร้างเซิร์ฟเวอร์ Node.js อย่างง่าย

เมื่อติดตั้ง Node.js แล้ว เรามาดำดิ่งและเขียนคำง่ายๆ ว่า “Hello, World!” เซิร์ฟเวอร์

ขั้นแรก สร้างไฟล์ใหม่ชื่อapp.js(หรือชื่ออื่นที่คุณต้องการ) เปิดไฟล์นี้ในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและเพิ่มรหัสต่อไปนี้:

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

const port = 3000;
server.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

บันทึกไฟล์และเรียกใช้ด้วย Node.js จากเทอร์มินัลของคุณ:

node app.js

Server running at http://localhost:3000/คุณควรเห็น เอาต์พุตคอนโซล หากคุณไปที่ URL นี้ในเว็บเบราว์เซอร์ คุณควรเห็นข้อความ “Hello, World!”

ข้อมูลโค้ดนี้สร้างเซิร์ฟเวอร์ HTTP อย่างง่ายที่รับฟังคำขอบนพอร์ต 3000 สำหรับแต่ละคำขอ จะตอบกลับด้วย ‘Hello, World!’ ข้อความ. โมดูล http ที่เราใช้สร้างเซิร์ฟเวอร์นั้นเป็นโมดูลในตัวใน Node.js เมธอด createServer ส่งคืนอินสแตนซ์ใหม่ของ http.Server เซิร์ฟเวอร์นี้รับฟังเหตุการณ์ ‘คำขอ’ ซึ่งจะเริ่มทำงานทุกครั้งที่ได้รับคำขอ HTTP ใหม่

5. สถาปัตยกรรม Node.js: ขับเคลื่อนด้วยเหตุการณ์ (Event-Driven), I/O ที่ไม่ปิดกั้น (Non-blocking)

สถาปัตยกรรมของ Node.js แตกต่างอย่างมากจากภาษาฝั่งเซิร์ฟเวอร์แบบดั้งเดิม โมเดล I/O ที่ขับเคลื่อนด้วยเหตุการณ์และไม่มีการบล็อกช่วยให้สามารถรับส่งข้อมูลได้สูงและปรับขนาดได้ ทำให้เหมาะสำหรับแอปพลิเคชันเรียลไทม์ที่ต้องใช้ข้อมูลมาก

ในรูปแบบการบล็อก I/O แบบดั้งเดิม เซิร์ฟเวอร์จะจัดการคำขอทีละรายการ โดยรอให้การดำเนินการแต่ละรายการเสร็จสิ้นก่อนที่จะดำเนินการต่อไปยังรายการถัดไป ในทางตรงกันข้าม Node.js ใช้การวนรอบเหตุการณ์ ซึ่งคล้ายกับในเบราว์เซอร์ เพื่อจัดการกับไคลเอ็นต์ที่ทำงานพร้อมกันหลายเครื่อง เมื่อจำเป็นต้องมีการดำเนินการ I/O Node.js จะส่งไปยังระบบและประมวลผลเหตุการณ์อื่นๆ ต่อไป เมื่อการดำเนินการเสร็จสิ้น การเรียกกลับจะถูกส่งไปยังลูปเหตุการณ์เพื่อดำเนินการ

สถาปัตยกรรมนี้ช่วยให้ Node.js จัดการการเชื่อมต่อจำนวนมากพร้อมกันในเธรดเดียว สิ่งสำคัญที่ควรทราบคือ แม้ว่า Node.js เองจะเป็น single-threaded แต่การดำเนินการ I/O จำนวนมากกลับไม่ใช่ การดำเนินการเหล่านี้จะถูกโอนไปยังระบบ ทำให้เธรด Node.js ว่างเพื่อจัดการกับเหตุการณ์อื่นๆ


Node.js แสดงถึงการเปลี่ยนแปลงในกระบวนทัศน์การเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ อนุญาตให้ใช้ JavaScript ซึ่งแต่เดิมเป็นภาษาฝั่งไคลเอ็นต์บนฝั่งเซิร์ฟเวอร์ ส่งผลให้ระบบนิเวศของ JavaScript เต็มสแต็ก ด้วยสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์และ I/O ที่ไม่ปิดกั้น Node.js ช่วยให้สามารถทำแอพที่ปรับขนาดได้สูงและใช้ข้อมูลมาก

ในบทความต่อๆ ไป เราจะสำรวจเพิ่มเติมเกี่ยวกับการทำงานกับ Node.js เช่น โมดูล ระบบเครือข่าย การเขียนโปรแกรมแบบอะซิงโครนัส และอื่นๆ อีกมากมาย เมื่อคุณเริ่มต้นทำแอพกับ Node.js อย่าลืมอ้างอิงความรู้ JavaScript ของคุณกลับมา สำหรับผู้ที่ต้องการทบทวน JavaScript คุณสามารถดูคู่มือ JavaScript ที่ครอบคลุมนี้ได้


Node.js คืออะไร

Node.js คือ ตอนที่ 1 : โมดูล (Modules)
Node.js คือ ตอนที่ 2 : การเขียนโปรแกรมแบบอะซิงโครนัส (Asynchronous Programming)
Node.js คือ ตอนที่ 3 : ระบบเครือข่าย (Networking) และ HTTP
Node.js คือ ตอนที่ 4 : การใช้งานฐานข้อมูล (Databases)
Node.js คือ ตอนที่ 5 : การทำแอพแบบ Real-time ด้วย Socket.io
Node.js คือ ตอนที่ 6 : การ Deployment และประสิทธิภาพ (Performance)