สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com


NodeJS01_HelloWorld

Node.js คืออะไร

Node.js เป็น open-source และ cross-platform JavaScript runtime environment ที่กำลังได้รับความนิยมอย่างสูง โดยทั่วไปเราจะใช้ JavaScript ในฝั่ง client แต่ Node.js ทำให้เราใช้ JavaScript ในฝั่ง Server ได้ด้วย ซึ่ง Node.js สามารถรันได้บน platform ที่หลากหลายทั้ง Windows, Linux, Unix, Mac OS X ฯลฯ

ประโยชน์ของ Node.js 

จุดเด่นที่สุดของ Node.js คือมันทำงานแบบ asynchronous ผู้อ่านอาจจะสงสัยว่าแล้วมันดีอย่างไร? ลองมาดูตัวอย่างการจัดการไฟล์เมื่อมีการร้องขอจาก client มาที่ server ของ PHP กับ Node.js เทียบกันดูเพื่อให้เข้าใจมากขึ้นนะครับ

กรณี PHP เมื่อมีการร้องขอเข้ามามันจะทำดังนี้

  1. ส่ง task ไปที่ระบบไฟล์ของคอมพิวเตอร์
  2. รอจนกระทั่งระบบไฟล์เปิดและอ่านไฟล์เสร็จ
  3. ส่งเนื้อหาของไฟล์กลับมาให้ client
  4. พร้อมสำหรับรับคำร้องขอถัดไป

กรณี Node.js เมื่อมีการร้องขอเข้ามามันจะทำดังนี้

  1. ส่ง task ไปที่ระบบไฟล์ของคอมพิวเตอร์
  2. พร้อมสำหรับรับคำร้องขอถัดไป
  3. พอระบบไฟล์เปิดและอ่านไฟล์เสร็จ server จะส่งเนื้อหาของไฟล์กลับมาให้ client

จากตัวอย่างด้านบนจะเห็นว่า Node.js จะตัดขั้นตอนการรอทิ้งแล้วไปทำคำร้องถัดไปเลย ที่เป็นเช่นนี้เพราะ Node.js จะรันแบบ single-threaded และในไลบรารีมาตรฐานก็จะมีเซ็ตของ asynchronous I/O primitives ที่ช่วยป้องกันโค้ด JavaScript จากการ blocking ทำให้ระบบเสถียร และมีประสิทธิภาพมากขึ้น

 

อธิบายเพิ่มเติมเกี่ยวกับ Asynchronous และ Blocking ถ้าใครรู้อยู่แล้วก็ข้ามไปเลยครับ

Synchronous vs Asynchronous 

Synchronous คือการรันโค้ดตามลำดับที่เราเขียนไว้ เช่น

alert(1);
alert(2);
alert(3);


ผลลัพธ์ที่ได้คือหน้าจอจะแสดงผล 1 จากนั้นจึงแสดงผล 2 แล้วสุดท้ายจึงแสดงผล 3 ตามลำดับ

Asynchronous คือการรันโค้ดที่ไม่จำเป็นต้องเป็นไปตามลำดับที่เราเขียนไว้ เช่น

alert(1);
setTimeout(() => alert(2), 0);
alert(3);


ในตัวอย่างนี้โค้ด alert(2) ใช้เวลาดำเนินการนานกว่า ทำให้ผลลัพธ์ที่ได้คือหน้าจอจะแสดงผล 1 จากนั้นจึงแสดงผล 3 แล้วสุดท้ายจึงแสดงผล 2

Blocking vs Non-blocking

Blocking หมายถึงการที่เราไม่สามารถดำเนินการต่อไปได้จนกว่าตัวดำเนินการที่กำลังรันอยู่จะเสร็จเสียก่อน เช่น

alert(1);
var value = localStorage.getItem('foo');
alert(2);


คำสั่ง localStorage จะเป็นตัว blocking ทำให้ไม่สามารถทำคำสั่ง alert(2) ได้จนกว่ามันจะดำเนินการเสร็จ ดังนั้นผลลัพธ์ที่ได้คือหน้าจอจะแสดงผล 1 จากนั้นจึงรอจนกว่าคำสั่ง localStorage จะเสร็จจึงแสดงผล 2

Non-blocking หมายถึงการที่ตัวดำเนินการสามารถทำคำสั่งถัดไปได้เลยโดยไม่ต้องรอให้คำสั่งเดิมทำเสร็จก่อน เช่น

alert(1);
fetch('example.com').then(() => alert(2));
alert(3);


ในตัวอย่างนี้ คำสั่ง fetch เป็น non-blocking operation ดังนั้นผลลัพธ์ที่ได้คือหน้าจอจะแสดงผล 1 จากนั้นจึงแสดงผล 3 แล้วพอคำสั่ง fetch เสร็จก็แสดงผล 2

ผู้เรียนสามารถอ่านรายละเอียดเพิ่มเติมได้จาก [3]

ประวัติ Node.js

อย่างที่ผมเคยเล่าให้ฟังในบทความเรื่อง JavaScript แล้วว่าแต่เดิมภาษา JavaScript ถูกพัฒนามาเพื่อใช้สำหรับ Browser ที่ชื่อ Netscape Navigator ในปี 1995 แต่สิ่งที่ผมยังไม่ได้เล่าถึงก็คือความจริงแล้วในตอนนั้น Netscape ตั้งใจจะขาย Web Server ที่มี environment ชื่อ Netscape LiveWire ซึ่งสามารถสร้าง dynamic page โดยใช้ JavaScript ทางฝั่ง server ด้วย แต่น่าเสียดายที่ Netscape LiveWire ไม่ประสบความสำเร็จ และการใช้ JavaScript ทางฝั่ง server ก็ไม่ได้รับความนิยมเลยจนกระทั่ง Node.js ถือกำเนิดขึ้นมา

สิ่งที่ทำให้ Node.js เป็นที่นิยมขึ้นมาคือการที่มันมาในช่วงเวลาที่เหมาะสม เมื่อเทียบกับ JavaScript ที่เกิดมาตั้งแต่ปี 1995 แล้ว Node.js เพิ่งเกิดมาเมื่อปี 2009 เท่านั้น ต้องขอบคุณ "Web 2.0" applications (เช่น Flickr, Gmail ฯลฯ) ที่แสดงให้โลกรู้ว่าเว็บสมัยใหม่ควรหน้าตาเป็นอย่างไร

ไม่กี่ปีก่อนที่ Node.js จะเกิด นักพัฒนาเบื้องหลัง browser ชื่อดังทั้งหลายแข่งขันกันทำงานอย่างหนักเพื่อจะใช้ JavaScript ให้ได้ดีที่สุดและหาทางทำให้ JavaScript สามารถรันได้เร็วมากขึ้น เพื่อให้ผู้ใช้งานได้รับประสิทธิภาพที่ดีที่สุด ซึ่งผลจากการแข่งขันนี้ทำให้เกิดการพัฒนา Chrome V8 (open-source JavaScript engine ของ The Chromium Project) ขึ้นมา และ Node.js ก็ใช้ engine นี้นั่นเอง

แต่การที่ Node.js เป็นที่นิยมขึ้นมาไม่ใช่แค่ว่ามันมาถูกที่ถูกเวลาเท่านั้นนะครับ แต่เพราะมันได้แสดงให้เห็นแล้วว่า การออกแบบและแนวคิดของมันช่วยนักพัฒนาทั้งหลายให้สามารถใช้ JavaScript ทางฝั่ง server ได้ง่ายขึ้นมากด้วยครับ

มาลง Node.js กันเถอะ

  1. ไปที่เว็บ https://nodejs.org/en/ แล้วดาวน์โหลดเวอร์ชันที่ทางเว็บแนะนำ

     
  2. ดับเบิ้ลคลิกไฟล์ที่โหลดมา 

     
  3. Install ตามปกติโดยการกด Next และยอมรับข้อตกลง 

     
  4. รอจนเสร็จ กด Finish

     
  5. เปิด Command Prompt ของ windows ขึ้นมา โดยพิมพ์ cmd ที่ช่องค้นหามุมซ้ายล่าง

     
  6. ทดลองพิมพ์คำสั่ง node -v เพื่อดูเวอร์ชันของ Node.js ที่ติดตั้งในเครื่อง ถ้าได้ผลลัพธ์เป็นเวอร์ชันออกมาโดยไม่มี error แสดงว่าการติดตั้งสำเร็จไม่มีปัญหาอะไรครับ

Project Hello world

หลังจากติดตั้ง Node.js เสร็จเรียบร้อยแล้ว ต่อนี้เราจะมาเขียนโค้ดภาษา JavaScript และใช้ Node.js เพื่อแสดงข้อความ Hello World บนหน้าเว็บอย่างง่ายๆกัน

  1. เริ่มจากสร้างไฟล์นามสกุล .js ที่เราจะใช้เขียนโค้ดขึ้นมาก่อน โดยการคลิกขวาในโฟลเดอร์ที่เราต้องการแล้วเลือก New > Text Document จากนั้นเปลี่ยนชื่อและนามสกุลไฟล์ ในที่นี้ตั้งชื่อว่า node_hello01.js ถ้าไม่เข้าใจให้ย้อนไปดูบทความก่อนๆหน้านี้ (หัวข้อ JavaScript01_HelloWorld นะครับ)
     
  2. เปิดไฟล์ด้วยโปรแกรมทีี่สามารถแก้ไขข้อความในไฟล์ได้ เช่น Notepad หรือ Notepad++ จากนั้นพิมพ์โค้ดต่อไปนี้ลงไป แล้วกด Save

    อธิบายโค้ด: โค้ดนี้เป็นการบอกให้คอมพิวเตอร์แสดงข้อความ Hello World เมื่อมีคนเข้ามาที่ port 8080 ของเครื่อง
     
  3. เปิด Command Prompt ของ windows ขึ้นมา แล้วไปที่โฟล์เดอร์ที่เราบันทึกไฟล์ที่เขียนโค้ดในขั้นตอนที่ 2 ไว้โดยพิมพ์คำสั่ง cd แล้วตามด้วย path ของโฟล์เดอร์ที่เราต้องการ

     
  4. รันไฟล์ node_hello01.js ที่เราเขียนโค้ดไว้แล้วในขั้นตอนที่ 2 ด้วย Node.js โดยพิมพ์คำสั่ง node แล้วตามด้วยชื่อไฟล์

     
  5. สำหรับบางเครื่องที่ติด Firewall จะมีหน้าต่างเตือนแจ้งขึ้นมา ให้กดปุ่ม Allow access 

     
  6. เพียงเท่านี้เราคอมพิวเตอร์ของเราก็จะกลายเป็น server แล้วครับ เย้ๆๆ คราวนี้ให้ลองเปิด Browser ขึ้นมาแล้วไปที่ http://localhost:8080/ จะเห็นว่ามีข้อความ Hello World ปรากฏขึ้นมาในหน้าเว็บ

เท่านี้เราก็จะสามารถเขียนโค้ด JavaScript เพื่อแสดงข้อความ Hello World ในฝั่ง server ได้แล้ว ง่ายใช่ไหมครับ? ถ้าอยากรู้เรื่องของ Node.js หรือ Tutorial เพิ่มเติมก็อ่านได้จาก [1] และ [2] นะครับ 

สุดท้ายนี้ถ้าผู้อ่านอยากเรียนรู้เรื่อง JavaScript, Node.js และเรื่องเกี่ยวกับ Web Programming อย่างลึกซึ้งก็ขอแนะนำคอร์ส Web Programming ของทาง EPT ครับ สามารถดูรายละเอียดคอร์สได้โดยคลิกที่นี่หรือติดต่อได้ที่ 085-350-7540

แล้วพบกันใหม่บทความหน้านะครับ

ที่มาและเว็บไซต์อ้างอิง

[1] https://nodejs.dev/introduction-to-nodejs
[2] https://www.w3schools.com/nodejs/nodejs_intro.asp
[3] https://stackoverflow.com/questions/10570246/what-is-non-blocking-or-asynchronous-i-o-in-node-js


Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android


บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา