ฉันรู้สึกเจ็บปวดแค่ไหน!
เช่นเดียวกับหลาย ๆ คนฉันพบว่ามันยากที่จะเข้าถึงสาระสำคัญของ Node.js เพราะคนส่วนใหญ่เขียน / พูดถึงเฉพาะส่วนของ Node ที่พวกเขาคิดว่ามีประโยชน์ - และส่วนที่พวกเขาคิดว่าน่าสนใจมักจะเป็นประโยชน์รองของ Node มากกว่าที่จะเป็นหลัก วัตถุประสงค์. ฉันต้องบอกว่าฉันคิดว่ามันบ้ามากที่มีคนบอกว่า Node เป็นเพียงรันไทม์ JavaScript การใช้ JavaScript ของ Node - และการเลือกรันไทม์ V8 เป็นเพียงการยุติเครื่องมือที่ดีที่สุดสำหรับปัญหาที่นักพัฒนาของ Node ต้องการแก้ไข
จุดประสงค์หลักของ Node คือทำให้การจัดการเหตุการณ์ของผู้ใช้ในเว็บแอปมีประสิทธิภาพมากขึ้น ดังนั้น Node จึงนำโด่งใช้ที่ส่วนหลังของเว็บแอป การจัดการเหตุการณ์ต้องการให้บางสิ่งบางอย่างกำลังรับฟังอยู่ที่เครื่องเซิร์ฟเวอร์สำหรับเหตุการณ์ของผู้ใช้เหล่านี้ ดังนั้นต้องตั้งค่าเซิร์ฟเวอร์ http เพื่อกำหนดเส้นทางแต่ละเหตุการณ์ไปยังสคริปต์ตัวจัดการที่เหมาะสม Node จัดเตรียมเฟรมเวิร์กสำหรับการตั้งค่าเซิร์ฟเวอร์อย่างรวดเร็วเพื่อรับฟังพอร์ตเฉพาะสำหรับคำขอของผู้ใช้ Node ใช้ JavaScript สำหรับการจัดการเหตุการณ์เนื่องจาก JavaScript มีฟังก์ชันการเรียกกลับซึ่งทำให้สามารถระงับงานหนึ่งงานได้จนกว่าจะส่งคืนผลลัพธ์ของงานที่เกี่ยวข้อง มีภาษาอื่น ๆ ไม่มากนักที่มีคุณสมบัตินี้และภาษาที่อาจไม่มีล่ามที่มีประสิทธิภาพเท่ากับรันไทม์ V8 ของ Google นักพัฒนาเว็บส่วนใหญ่รู้จัก JavaScript ดังนั้นจึงไม่มีการเรียนรู้ภาษาเพิ่มเติมด้วย Node ยิ่งไปกว่านั้นการมีฟังก์ชั่นการโทรกลับช่วยให้สามารถวางงานของผู้ใช้ทั้งหมดไว้ในเธรดเดียวโดยไม่ต้องใช้การบล็อกอย่างชัดเจนกับงานที่ต้องการเข้าถึงฐานข้อมูลหรือระบบไฟล์ และนี่คือสิ่งที่นำไปสู่ประสิทธิภาพการดำเนินการที่เหนือกว่าของ Node ภายใต้การใช้งานพร้อมกันอย่างหนัก - จุดประสงค์หลักสำหรับการพัฒนา
เพื่อช่วยให้ผู้ใช้ Node สามารถเขียนโค้ดปลายทางได้อย่างรวดเร็วนักพัฒนาของ Node ยังได้จัดระเบียบทั้งไลบรารี JS ในตัวสำหรับงานประจำ (เช่นเรื่องที่เกี่ยวข้องกับคำขอ HTTP, การเข้ารหัสสตริง (de), สตรีมและอื่น ๆ ) และ NPM (Node Package Manager) repositary : นี่คือชุดแพ็กเกจสคริปต์แบบโอเพนซอร์สที่ดูแลโดยผู้ใช้สำหรับฟังก์ชันมาตรฐานและแบบกำหนดเองต่างๆ โปรเจ็กต์โหนดทั้งหมดอนุญาตให้อิมพอร์ตแพ็กเกจ NPM ไปยังโปรเจ็กต์ผ่าน คำสั่งnpm install ที่กำหนดไว้
คำขอของผู้ใช้ที่จัดการผ่าน Node จะเป็นสิ่งที่จำเป็นสำหรับเว็บแอปเช่นการตรวจสอบความถูกต้องการสืบค้นฐานข้อมูลการจัดการเนื้อหา (Strapi CMS) เป็นต้นทั้งหมดนี้จะถูกส่งไปยังพอร์ต Node (ในกรณีที่การวิเคราะห์ข้อมูลที่ได้รับจากฐานข้อมูลใช้เวลา CPU มากกระบวนการประเภทนี้ควรวางไว้บนเธรดแยกต่างหากดังนั้นจึงไม่ทำให้คำขอของผู้ใช้ที่ง่ายกว่าช้าลง) คำขอของผู้ใช้ประเภทอื่นเช่นการโหลดหน้าเว็บอื่น ดาวน์โหลดไฟล์ CSS / JS / รูปภาพ ฯลฯ เบราว์เซอร์จะส่งต่อไปยังพอร์ตเริ่มต้นบนเครื่องเซิร์ฟเวอร์ซึ่งโปรแกรมเว็บเซิร์ฟเวอร์ (Apache, NGinx ฯลฯ ) จะจัดการกับไฟล์เหล่านี้
ดังนั้นในทางปฏิบัติ Node เป็นเฟรมเวิร์กสำหรับการสร้างเซิร์ฟเวอร์และการจัดการเหตุการณ์อย่างรวดเร็ว แต่เป็นเฟรมเวิร์กที่แทนที่ฟังก์ชันบางอย่างของโปรแกรมเว็บเซิร์ฟเวอร์เท่านั้น
การใช้งานโหนดอื่น ๆ ที่ไม่ใช่แบ็กเอนด์เพียงแค่ใช้ประโยชน์จากคุณสมบัติอย่างใดอย่างหนึ่งเช่นเครื่องยนต์ V8 ตัวอย่างเช่น frontend build tools Grunt และ Gulp ใช้ Node.js ในการประมวลผล build script ที่สามารถเข้ารหัสเพื่อแปลง SASS เป็น CSS ย่อขนาดไฟล์ CSS / JS ปรับขนาด / โหลดรูปภาพให้เหมาะสมเป็นต้น แต่งานประเภทนี้จริงๆ การใช้ Node ผลพลอยได้ไม่ใช่การใช้งานหลักซึ่งมีไว้เพื่อสร้างกระบวนการแบ็กเอนด์ที่มีประสิทธิภาพสำหรับเว็บแอปพลิเคชัน