แพลตฟอร์ม JavaScript ฝั่งเซิร์ฟเวอร์ Node.js 21.0 พร้อมใช้งาน

Node.js 21.0 เปิดตัวแล้ว ซึ่งเป็นแพลตฟอร์มสำหรับเรียกใช้แอปพลิเคชันเครือข่ายใน JavaScript สาขา Node.js 21.0 จะได้รับการสนับสนุนเป็นเวลา 6 เดือน ในอีกไม่กี่วันข้างหน้า การรักษาเสถียรภาพของสาขา Node.js 20 จะเสร็จสมบูรณ์ ซึ่งจะได้รับสถานะ LTS และจะรองรับจนถึงเดือนเมษายน 2026 การบำรุงรักษาสาขา LTS ก่อนหน้าของ Node.js 18.0 จะคงอยู่จนถึงเดือนกันยายน 2025 และปีก่อนสาขา LTS 16.0 สุดท้ายจนถึงเดือนเมษายน 2024

การปรับปรุงหลัก:

  • Fetch API ได้รับการประกาศว่ามีเสถียรภาพ โดยออกแบบมาเพื่อการโหลดทรัพยากรผ่านเครือข่าย และลดความซับซ้อนในการเขียนโค้ด JavaScript สากลที่เหมาะสำหรับการทำงานบนเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ การใช้งานจะขึ้นอยู่กับโค้ดจากไคลเอ็นต์ HTTP/1.1 undici และใกล้เคียงกับ API ที่คล้ายกันที่ให้ไว้ในเบราว์เซอร์มากที่สุด API รวมถึงเมธอด fetch() และออบเจ็กต์ส่วนหัว คำขอและการตอบสนอง ซึ่งเป็นตัวแทนของส่วนหัว HTTP คำขอและการตอบกลับ const res = รอการดึงข้อมูล ('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = รอ res.json(); console.log(ข้อมูล); }
  • การสนับสนุน WebStreams API ซึ่งให้การเข้าถึงสตรีมข้อมูลที่ได้รับผ่านเครือข่ายได้รับความเสถียร API ช่วยให้สามารถเพิ่มตัวจัดการของคุณเองที่ทำงานกับข้อมูลเมื่อข้อมูลมาถึงเครือข่าย โดยไม่ต้องรอให้ดาวน์โหลดไฟล์ทั้งหมด ออบเจ็กต์ที่มีอยู่ใน Node.js ได้แก่ ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream และ DecompressionStream
  • เพิ่มการใช้งานทดลองของไคลเอ็นต์ WebSocket ซึ่งเข้ากันได้กับเบราว์เซอร์ หากต้องการเปิดใช้งานการสนับสนุน WebSocket จะมีการจัดเตรียมแฟล็ก "--experimental-websocket"
  • เพิ่มโหมดทดลองสำหรับใช้งานเริ่มต้นของโมดูล JavaScript ESM (โมดูล ECMAScript ใช้ในโมดูลสำหรับเบราว์เซอร์) แทน CommonJS (เฉพาะ Node.js) การเปลี่ยนแปลงไม่ส่งผลกระทบต่อโมดูลที่มีการกำหนดรูปแบบอย่างชัดเจนผ่านฟิลด์ "type" ใน package.json ซึ่งระบุผ่านแฟล็ก "--input-type" หรือเห็นได้ชัดเจนเนื่องจากนามสกุลไฟล์ (.mjs สำหรับ ESM, .cjs สำหรับ CommonJS) อย่างไรก็ตาม โมดูลที่ไม่ได้กำหนดไว้อย่างชัดเจนว่าเป็น CommonJS (เช่น มีส่วนขยาย “.js”) จะถือเป็นโมดูล ESM เมื่อเปิดใช้งานโหมดใหม่ เพื่อเปิดใช้งานการตั้งค่าโมดูลใหม่ มีการเสนอแฟล็ก "--experimental-default-type"
  • เอ็นจิ้น V8 ได้รับการอัปเดตเป็นเวอร์ชัน 11.8 ซึ่งใช้ใน Chromium 118 ซึ่งขณะนี้รองรับวิธี ArrayBuffer.prototype.transfer ความสามารถในการจัดกลุ่มอาร์เรย์ (วิธี groupBy) และคำแนะนำ WebAssembly สำหรับการประมวลผลค่าคงที่ (i32.add, i32.sub, i32.mul, i64 .add, i64.sub และ i64.mul)
  • การสนับสนุนตัวจัดการ globalPreload ถูกยกเลิกแล้ว เพื่อสนับสนุนการลงทะเบียนและเริ่มต้นการโทรเพื่อกำหนดค่าโมดูล
  • มีการเพิ่มตัวเลือก "ฟลัช" ในฟังก์ชัน fs.writeFile เพื่อบังคับให้ล้างข้อมูลลงในไดรฟ์หลังจากการดำเนินการเขียนแต่ละครั้ง
  • ปรับปรุงประสิทธิภาพของโค้ดที่เกี่ยวข้องกับการแยกวิเคราะห์ URL, การดึงข้อมูล API, สตรีม, node:fs และ HTTP
  • เพิ่มวัตถุนำทางทั่วโลก ตัวอย่างเช่น หากต้องการรับข้อมูลเกี่ยวกับจำนวนแกน CPU คุณสามารถใช้คุณสมบัติ navigator.hardwareConcurrency
  • ในพารามิเตอร์ “—test” มีการเพิ่มการรองรับ glob masks สำหรับการเลือกการทดสอบที่จะรัน (เช่น คุณสามารถระบุ “—test **/*.test.js”)
  • ตัวจัดการแพ็กเกจที่รวมไว้ npm 10.2.0 และ parser llhttp 9.1.2 ได้รับการอัพเดตแล้ว
  • การสนับสนุน Visual Studio 2019 และ macOS เวอร์ชันเก่ากว่า 11.0 ถูกยกเลิกแล้ว

แพลตฟอร์ม Node.js สามารถใช้ได้ทั้งสำหรับการบำรุงรักษาเซิร์ฟเวอร์ของเว็บแอปพลิเคชัน และสำหรับการสร้างโปรแกรมเครือข่ายไคลเอนต์และเซิร์ฟเวอร์ทั่วไป เพื่อขยายการทำงานของแอปพลิเคชันสำหรับ Node.js ได้มีการเตรียมชุดโมดูลจำนวนมากซึ่งคุณสามารถค้นหาโมดูลที่มีการใช้งาน HTTP, SMTP, XMPP, DNS, FTP, IMAP, เซิร์ฟเวอร์และไคลเอนต์ POP3 โมดูลสำหรับการรวม ด้วยเว็บเฟรมเวิร์กต่างๆ ตัวจัดการ WebSocket และ Ajax ตัวเชื่อมต่อ DBMS (MySQL, PostgreSQL, SQLite, MongoDB), เทมเพลตเอ็นจิ้น, เอ็นจิ้น CSS, การใช้งานอัลกอริทึมการเข้ารหัสลับและระบบการอนุญาต (OAuth), ตัวแยกวิเคราะห์ XML

เพื่อให้แน่ใจว่าการประมวลผลคำขอแบบขนานจำนวนมาก Node.js ใช้โมเดลการดำเนินการโค้ดแบบอะซิงโครนัสตามการจัดการเหตุการณ์ที่ไม่ปิดกั้นและคำจำกัดความของตัวจัดการการเรียกกลับ วิธีการที่รองรับสำหรับการเชื่อมต่อมัลติเพล็กซ์คือ epoll, kqueue, /dev/poll และ select สำหรับการเชื่อมต่อมัลติเพล็กซ์ จะใช้ไลบรารี libuv ซึ่งเป็นส่วนเสริมสำหรับ libev บนระบบ Unix และ IOCP บน Windows ไลบรารี libeio ใช้เพื่อสร้างเธรดพูล และรวม c-ares เพื่อดำเนินการสืบค้น DNS ในโหมดไม่ปิดกั้น การเรียกใช้ระบบทั้งหมดที่ทำให้เกิดการบล็อกจะดำเนินการภายในเธรดพูล จากนั้น เช่นตัวจัดการสัญญาณ ถ่ายโอนผลลัพธ์ของการทำงานกลับผ่านไพพ์ที่ไม่มีชื่อ (ไพพ์) การดำเนินการโค้ด JavaScript มีให้โดยใช้เอ็นจิ้น V8 ที่พัฒนาโดย Google (นอกจากนี้ Microsoft กำลังพัฒนาเวอร์ชันของ Node.js ด้วยเอ็นจิ้น Chakra-Core)

โดยพื้นฐานแล้ว Node.js นั้นคล้ายกับ Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks และ Tcl events แต่ event loop ใน Node.js ถูกซ่อนจากผู้พัฒนาและคล้ายกับการจัดการเหตุการณ์ในเว็บแอปพลิเคชันที่กำลังทำงานอยู่ ในเบราว์เซอร์ เมื่อเขียนแอปพลิเคชันสำหรับ node.js คุณต้องพิจารณาลักษณะเฉพาะของการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ เช่น แทนที่จะทำ "var result = db.query("select..");" ด้วยการรอการทำงานให้เสร็จสิ้นและการประมวลผลผลลัพธ์ที่ตามมา Node.js ใช้หลักการของการดำเนินการแบบอะซิงโครนัสนั่นคือ โค้ดจะถูกแปลงเป็น "db.query("select..", ฟังก์ชัน (ผลลัพธ์) {การประมวลผลผลลัพธ์});" ซึ่งการควบคุมจะส่งผ่านไปยังโค้ดเพิ่มเติมทันที และผลลัพธ์ของคิวรีจะถูกประมวลผลเมื่อข้อมูลมาถึง

ที่มา: opennet.ru

เพิ่มความคิดเห็น