มีอะไรใหม่ใน Node.js 21: ค้นพบคุณสมบัติและการอัปเดตล่าสุด
เผยแพร่แล้ว: 2024-03-26เนื่องจากระบบนิเวศแพ็คเกจขนาดใหญ่ การสนับสนุนชุมชนที่แข็งแกร่ง และความเข้ากันได้ข้ามแพลตฟอร์ม Node.js จึงถูกใช้โดย 1.4% ถึง 2.22% ของเว็บไซต์ทั่วโลก ข้อมูลนี้นับประมาณ 30 ล้านเว็บไซต์ [i]
เป็นเวลากว่าทศวรรษแล้วที่ Node.js มีบทบาทสำคัญในการพัฒนาเว็บ โดยให้บริการภาษา JavaScript แบบครบวงจรสำหรับการเขียนสคริปต์ทั้งฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ โมเดล I/O แบบอะซิงโครนัสและไม่มีการบล็อกช่วยให้มั่นใจได้ถึงประสิทธิภาพและประสิทธิภาพสูง ทำให้เหมาะสำหรับการจัดการการเชื่อมต่อที่เกิดขึ้นพร้อมกัน
นอกจากนี้ Node.js ยังใช้ประโยชน์จากรันไทม์ V8 JavaScript ส่งผลให้ดำเนินการได้รวดเร็ว ด้วยความสามารถในการปรับขนาดที่เป็นแกนหลัก Node.js จึงเหมาะอย่างยิ่งสำหรับแอปพลิเคชันแบบเรียลไทม์และสถาปัตยกรรมไมโครเซอร์วิส ฟีเจอร์ทั้งหมดนี้ทำให้เป็นตัวเลือกสำหรับนักพัฒนาที่ต้องการสร้างเว็บแอปพลิเคชันที่ปรับขนาดได้ มีประสิทธิภาพ และทันสมัย
อย่างไรก็ตาม ในวันที่ 17 ตุลาคม 2023 Node.js 21 เวอร์ชันล่าสุดได้เปิดตัวพร้อมกับการปรับปรุงภายในต่างๆ และฟีเจอร์ใหม่บางประการที่ผู้ใช้ต้องเผชิญ การอัปเดตนี้จัดลำดับความสำคัญของการปรับปรุงประสิทธิภาพผ่านการดำเนินการรันไทม์ที่ได้รับการปรับปรุงให้เหมาะสมและลดโอเวอร์เฮดของหน่วยความจำ นอกจากนี้ยังรวมการสนับสนุนที่ได้รับการปรับปรุงสำหรับโมดูล ECMAScript และการบูรณาการอย่างราบรื่นกับเทคโนโลยีเว็บล่าสุด
ในบล็อกโพสต์นี้ เราจะเพิ่มบริบทเพิ่มเติมเกี่ยวกับการปรับปรุงที่โดดเด่นและการอัปเดตฟีเจอร์ใน Node.js 21
มาดำน้ำกันเถอะ!
9 ไฮไลท์ของ Node.js 21 รุ่นล่าสุด
1. อัปเดตเป็น V8 JavaScript Engine
การปรับปรุงที่สำคัญใน Node.js 21 คือการอัปเกรดกลไก V8 เป็นเวอร์ชัน 11.8 การอัปเดตนี้ไม่เพียงแต่นำมาซึ่งประสิทธิภาพที่ดีขึ้นเท่านั้น แต่ยังแนะนำคุณลักษณะ JavaScript ที่โดดเด่นหลายประการอีกด้วย
สิ่งที่น่าสังเกตอีกอย่างหนึ่งคือการแนะนำการจัดกลุ่มอาร์เรย์ ซึ่งช่วยให้สามารถรวบรวมข้อมูลที่คล้ายกันออกเป็นกลุ่มต่างๆ ผ่านการใช้วิธีการเช่นObject.groupBy()และMap.groupBy()นอกจากนี้ ยังมีการนำ API แบบเป็นโปรแกรมใหม่ArrayBuffer.prototype.transferมาใช้เพื่ออำนวยความสะดวกในการโอนความเป็นเจ้าของ ArrayBuffers รุ่นนี้ยังเพิ่มประสิทธิภาพการจัดสรรใหม่และจัดการกับการแปลง ArrayBuffers ที่ปรับขนาดได้ให้เป็นรายการที่มีความยาวคงที่
นอกจากนี้ การอัปเดตยังขยายการสนับสนุน WebAssembly ด้วยการรวมนิพจน์ const แบบขยาย ขยายขีดความสามารถของ Node.js ในการใช้ประโยชน์จากความก้าวหน้าล่าสุดในเทคโนโลยีเว็บและฟังก์ชันการทำงานของ JavaScript
2. การดึงข้อมูลและสตรีมเว็บที่เสถียร
Node.js 21 ทำให้การดึงข้อมูลและ WebStreams API มีความเสถียร โดยเปลี่ยนจากสถานะทดลองเป็นเสถียรและพร้อมสำหรับการใช้งานจริง หากคุณใช้ API เหล่านี้ในเวอร์ชันก่อนหน้านี้ ตอนนี้คุณสามารถรวมเข้ากับเวิร์กโฟลว์การผลิตของคุณได้อย่างมั่นใจ
API การดึงข้อมูลและ WebStreams มอบแนวทางร่วมสมัยและสม่ำเสมอในการโต้ตอบกับทรัพยากร HTTP และสตรีมภายในสภาพแวดล้อม Node.js โดยเป็นไปตามมาตรฐานเว็บที่กำหนดไว้ ความเสถียรนี้ช่วยให้แน่ใจว่านักพัฒนาใช้คุณสมบัติเหล่านี้ในวิธีที่เชื่อถือได้และเป็นมาตรฐานในการจัดการการดึงข้อมูลและการสตรีมแบบอะซิงโครนัสในแอปพลิเคชัน Node.js ของตน
3. การแนะนำแฟล็กการทดลองใหม่สำหรับโมดูล
ในรุ่น Node.js 21 สิ่งที่น่าสังเกตเพิ่มเติมคือการแนะนำการตั้งค่าสถานะ–experimental-default-typeซึ่งออกแบบมาเพื่อให้นักพัฒนาสามารถควบคุมพฤติกรรมเริ่มต้นสำหรับไฟล์อินพุตที่ไม่ได้กำหนดไว้อย่างชัดเจนว่าเป็นโมดูล ES หรือ CommonJS ได้ดียิ่งขึ้น
ในกรณีที่ไม่มีคุณลักษณะแฟล็กนี้ อินพุตดังกล่าวจะถูกตีความตามอัตภาพว่าเป็น CommonJS ด้วยการแนะนำ–experimental-default-type=moduleตอนนี้นักพัฒนามีตัวเลือกในการเปิดใช้งานการใช้งานโมดูล ES ที่ครอบคลุมในสถานการณ์เฉพาะ ซึ่งรวมถึงกรณีที่อินพุตสตริงถูกส่งผ่าน –eval หรือ STDIN โดยเฉพาะอย่างยิ่งหากไม่ได้ระบุ–input-type
นอกจากนี้ เมื่อต้องจัดการกับไฟล์ที่ลงท้ายด้วย .js หรือไฟล์ที่ไม่มีนามสกุล แฟล็กจะเข้ามามีบทบาทเมื่อไม่มีไฟล์ package.json ที่เกี่ยวข้อง หรือฟิลด์พาเรนต์ package.json ที่ใกล้ที่สุดไม่มีฟิลด์ 'type' (ยกเว้นภายในไดเร็กทอรี node_modules ). การเพิ่มประสิทธิภาพนี้ช่วยให้นักพัฒนามีความยืดหยุ่นในการทดลองและนำโมดูล ES มาใช้อย่างกว้างขวางมากขึ้น โดยให้แนวทางการจัดการโมดูลที่เหมาะสมและปรับแต่งได้
4. ไคลเอนต์ Websocket ในตัว
ใน Node.js 21 การปรับปรุงคุณสมบัติที่โดดเด่นอีกอย่างหนึ่งอยู่ในรูปแบบของไคลเอนต์ WebSocket ในตัว ซึ่งนำเสนอการใช้งาน WebSocket ที่เข้ากันได้กับเบราว์เซอร์รุ่นทดลอง คุณสมบัตินี้ช่วยให้นักพัฒนาโต้ตอบกับเซิร์ฟเวอร์ WebSocket ภายในแอปพลิเคชัน Node.js ได้อย่างราบรื่น เพื่อเปิดใช้งานฟังก์ชันนี้ นักพัฒนาสามารถใช้ แฟล็ก –experimental-websocket
อย่างไรก็ตาม สิ่งสำคัญที่ควรทราบก็คือ เนื่องจากเป็นคุณลักษณะทดลอง การใช้งานจึงอาจเปลี่ยนแปลงได้ในรุ่นต่อๆ ไป เนื่องจากจะต้องได้รับการปรับปรุงและรักษาเสถียรภาพตามความคิดเห็นของผู้ใช้และมาตรฐานที่เปลี่ยนแปลงไป การเปิดตัวไคลเอนต์ WebSocket ในตัวช่วยลดความยุ่งยากในการรวมการสื่อสาร WebSocket เข้ากับแอปพลิเคชัน Node.js สิ่งนี้ทำให้นักพัฒนามีวิธีที่สะดวกและเป็นมาตรฐานในการสร้างและจัดการการเชื่อมต่อ WebSocket ในขณะเดียวกันก็รับทราบลักษณะการพัฒนาของฟีเจอร์นี้ในระหว่างระยะทดลอง
5. Node.js Test Runner รองรับ Globs แล้ว
การอัปเดต Node.js 21 ล่าสุดแนะนำการรองรับ globs ในตัวดำเนินการทดสอบ การปรับปรุงนี้ช่วยให้นักพัฒนาสามารถใช้ประโยชน์จากนิพจน์ glob เมื่อระบุพารามิเตอร์ –test ซึ่งเป็นวิธีดำเนินการทดสอบที่มีประสิทธิภาพและยืดหยุ่นยิ่งขึ้น ด้วยคุณสมบัตินี้ นักพัฒนาสามารถใช้รูปแบบ glob ที่หลากหลายเพื่อทำการทดสอบได้อย่างมีประสิทธิภาพมากขึ้น ตัวอย่างเช่น การใช้คำสั่งเช่น node –test **/*.test.jsนักพัฒนาสามารถทำการทดสอบไฟล์ทั้งหมดที่มีนามสกุล.test.jsในหลาย ๆ ไดเร็กทอรีได้อย่างสะดวก ความสามารถนี้ช่วยปรับปรุงกระบวนการทดสอบ โดยมอบความสามารถในการปรับตัวที่ดีขึ้นและความสะดวกในการใช้งานสำหรับนักพัฒนาที่ทำงานในโครงการที่มีโครงสร้างไฟล์ที่หลากหลายและการกำหนดค่าการทดสอบ
6. เพิ่มตัวเลือก Flush ให้กับฟังก์ชัน Fs.writefile()
ใน Node.js 21 การปรับปรุงที่โดดเด่นคือการเพิ่มตัวเลือก 'flush' ให้กับฟังก์ชัน fs.writeFile การปรับปรุงนี้เน้นถึงสถานการณ์ที่ข้อมูลที่เขียนลงในไฟล์อาจไม่ถูกล้างไปยังที่จัดเก็บข้อมูลถาวรทันที ซึ่งอาจนำไปสู่การอ่านข้อมูลเก่าในภายหลัง
ตัวเลือก 'ฟลัช' ใหม่ ซึ่งนำมาใช้ใน Pull Request (PR) นี้ ช่วยให้นักพัฒนาสามารถควบคุมพฤติกรรมการฟลัชได้ดียิ่งขึ้น เมื่อเปิดใช้งาน ตัวเลือกนี้ช่วยให้แน่ใจว่าข้อมูลถูกบังคับไปยังที่จัดเก็บข้อมูลถาวรเมื่อสิ้นสุดการดำเนินการเขียนที่สำเร็จ คุณสมบัตินี้มีประโยชน์อย่างยิ่งในสถานการณ์ที่ความสอดคล้องของข้อมูลในทันทีเป็นสิ่งสำคัญ ป้องกันการเกิดข้อมูลเก่า และช่วยให้นักพัฒนามีกลไกการเขียนไฟล์ที่เชื่อถือได้และคาดการณ์ได้มากขึ้นในแอปพลิเคชัน Node.js
7. การลบ Hook การปรับแต่งโมดูล 'globalPreload'
ใน Node.js 21 นักพัฒนาสามารถลบ hook การปรับแต่งโมดูล 'globalPreload' ได้ นักพัฒนาได้รับการสนับสนุนให้ใช้วิธี 'ลงทะเบียน' ในการส่งข้อมูลจากเธรดแอปพลิเคชันไปยัง hooks การปรับแต่ง และใช้ฮุก 'เริ่มต้น' เพื่อสร้างช่องทางการสื่อสารระหว่างเธรด การปรับเปลี่ยนนี้ให้แนวทางที่มีโครงสร้างและชัดเจนมากขึ้นในการปรับแต่งโมดูล ทำให้เกิดการแบ่งแยกความรับผิดชอบที่ชัดเจนยิ่งขึ้น
วิธีการ 'ลงทะเบียน' อำนวยความสะดวกในการส่งข้อมูลไปยัง hooks การปรับแต่ง ในขณะที่ hook 'เริ่มต้น' มีบทบาทในการตั้งค่าช่องทางการสื่อสารระหว่างเธรด กลไกที่ได้รับการปรับปรุงนี้ช่วยเพิ่มความเป็นโมดูลโดยรวมและความสามารถในการบำรุงรักษาแอปพลิเคชัน Node.js ซึ่งสอดคล้องกับแนวปฏิบัติที่ดีที่สุด และส่งเสริมโครงสร้างโค้ดที่ใช้งานง่ายและเป็นระเบียบมากขึ้นสำหรับนักพัฒนาที่ทำงานกับการปรับแต่งโมดูล
8. Lil HTTP 9.1.2 การบังคับใช้โหมดเข้มงวด
การอัปเดตอื่นใน Node.js 21 คือ llhttp 9.1.2 ซึ่งนำเสนอการบังคับใช้โหมดที่เข้มงวดตามค่าเริ่มต้น ทำให้มั่นใจได้ถึงความน่าเชื่อถือและความปลอดภัยของโค้ดที่ได้รับการปรับปรุง การเปลี่ยนแปลงนี้รวมถึงการบังคับ\r\nหลังส่วนหัวและส่วนต่างๆ เพื่อการประมวลผลข้อมูลที่สอดคล้องกัน นอกจากนี้ ไม่อนุญาตให้ส่งข้อมูลหลังจากข้อความที่มีการเชื่อมต่อ: ปิดส่วนหัวอีกต่อไป ซึ่งสนับสนุนการปฏิบัติตามโปรโตคอลและการจัดการการเชื่อมต่อ เพื่อรองรับกรณีการใช้งานเฉพาะ จึงมีการใช้แฟล็ก–insecure-http-parserเพื่อให้ผู้ใช้มีความยืดหยุ่นในการปิดใช้งานการเปลี่ยนแปลงเหล่านี้ การอัปเดตเหล่านี้มีเป้าหมายเพื่อยกระดับความเสถียรของระบบและความสม่ำเสมอในการประมวลผลข้อมูลในแอปพลิเคชัน Node.js โดยกระตุ้นให้นักพัฒนาตรวจสอบและปรับฐานโค้ดเพื่อการบูรณาการที่ราบรื่น
9. การรวมวัตถุ 'เนวิเกเตอร์'
ด้วยการบูรณาการออบเจ็กต์ 'navigator' ขณะนี้นักพัฒนาสามารถเข้าถึงข้อมูลการทำงานพร้อมกันของฮาร์ดแวร์ได้อย่างราบรื่นผ่าน navigator.hardwareConcurrency ที่เพิ่งเปิดตัวใหม่ การปรับปรุงนี้จะทำให้ Node.js สอดคล้องกับสภาพแวดล้อมของเบราว์เซอร์มากขึ้น ซึ่งเป็นวิธีมาตรฐานสำหรับนักพัฒนาในการดึงรายละเอียดการทำงานพร้อมกันของฮาร์ดแวร์
นอกจากนี้ ด้วยการเพิ่มนี้ Node.js มีความหลากหลายมากขึ้น ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่ใช้ประโยชน์จากทรัพยากรฮาร์ดแวร์ได้อย่างมีประสิทธิภาพมากขึ้น ไม่ว่าจะเพื่อเพิ่มประสิทธิภาพการทำงานหรือใช้กลยุทธ์การประมวลผลแบบขนานก็ตาม
ดูแลการพัฒนา Node.js ของคุณด้วยเวอร์ชัน 21
Node.js 21 นำเสนอการปรับปรุง การปรับปรุง และฟีเจอร์ใหม่ๆ ที่น่าตื่นเต้นมากมาย ซึ่งสัญญาว่าจะยกระดับประสบการณ์การพัฒนาของคุณ ตั้งแต่การเปิดตัวไคลเอนต์ WebSocket ในตัวไปจนถึงการรองรับ globs ใน test runner Node.js 21 มอบเครื่องมืออันทรงพลังให้กับนักพัฒนาสำหรับการสร้างแอปพลิเคชันที่ทันสมัยและมีประสิทธิภาพ ขณะที่คุณสำรวจความก้าวหน้าเหล่านี้ อย่าลืมทดสอบความเข้ากันได้ของแอปพลิเคชันของคุณ และพิจารณาอัปเกรด โดยเฉพาะสถานะสิ้นสุดอายุการใช้งานสำหรับ Node.js 16, 17 หรือ 19 โปรดคำนึงถึงความซับซ้อนของกระบวนการอัปเกรดและการย้ายข้อมูล ที่นี่ พันธมิตรด้านการพัฒนา Node.js ที่เชี่ยวชาญสามารถเปลี่ยนแปลงได้
พร้อมที่จะยกระดับการพัฒนาแอปพลิเคชัน Node.js ของคุณแล้วหรือยัง? พูดคุยกับ Dev Maestros ของเรา!
อ้างอิง:
[i] เทคโนโลยีบาแคนซี