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

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

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

  • เอ็นจิ้น V8 ได้รับการอัปเดตเป็นเวอร์ชัน 10.7 ซึ่งใช้ใน Chromium 107 ท่ามกลางการเปลี่ยนแปลงในเอ็นจิ้นเมื่อเปรียบเทียบกับสาขา Node.js 18 นั้น การใช้งานเวอร์ชันที่สามของ Intl.NumberFormat API นั้นถูกบันทึกไว้ ซึ่งเพิ่มฟังก์ชันใหม่ formatRange (), formatRangeToParts() และ selectRange(), การจัดกลุ่มชุด, ตัวเลือกใหม่สำหรับการปัดเศษและการตั้งค่าความแม่นยำ, ความสามารถในการแปลสตริงเป็นตัวเลขทศนิยม การขึ้นต่อกันที่รวมไว้ llhttp 8.1.0 และ npm 8.19.2 ยังได้รับการอัปเดตด้วย
  • คำสั่งทดลอง "node -watch" ได้รับการเสนอด้วยการนำโหมด watch มาใช้เพื่อให้แน่ใจว่ากระบวนการจะเริ่มต้นใหม่เมื่อไฟล์ที่นำเข้าเปลี่ยนแปลง (ตัวอย่างเช่น หากดำเนินการ "node -watch index.js" กระบวนการจะเป็น จะรีสตาร์ทโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงดัชนี js)
  • สำหรับการเชื่อมต่อ HTTP/HTTPS ขาออกทั้งหมด การสนับสนุนกลไก HTTP 1.1 Keep-Alive จะถูกเปิดใช้งาน ซึ่งจะทำให้การเชื่อมต่อเปิดไว้เป็นระยะเวลาหนึ่งเพื่อประมวลผลคำขอ HTTP หลายรายการภายในการเชื่อมต่อเดียวกัน Keep-Alive คาดว่าจะปรับปรุงปริมาณงานและประสิทธิภาพ ตามค่าเริ่มต้น การหมดเวลาเปิดการเชื่อมต่อจะถูกตั้งค่าเป็น 5 วินาที เพิ่มการสนับสนุนการแยกวิเคราะห์ส่วนหัว Keep-Alive HTTP ในการตอบกลับของเซิร์ฟเวอร์แล้วในการใช้งานไคลเอ็นต์ HTTP และการเพิ่มการตัดการเชื่อมต่ออัตโนมัติของไคลเอ็นต์ที่ไม่ได้ใช้งานโดยใช้ Keep-Alive ในการใช้งานเซิร์ฟเวอร์ Node.js HTTP
  • WebCrypto API ถูกถ่ายโอนไปยังหมวดหมู่ที่เสถียร ยกเว้นฟังก์ชันที่ใช้อัลกอริธึม Ed25519, Ed448, X25519 และ X448 ในการเข้าถึงโมดูล WebCrypto ตอนนี้คุณสามารถใช้ globalThis.crypto หรือ need('node:crypto').webcrypto
  • การสนับสนุนเครื่องมือการติดตาม DTrace, SystemTap และ ETW (Event Tracing สำหรับ Windows) ได้ถูกลบออกแล้ว การบำรุงรักษาซึ่งถือว่าไม่เหมาะสมเนื่องจากความซับซ้อนในการบำรุงรักษาให้ทันสมัยอยู่เสมอหากไม่มีแผนการสนับสนุนที่เหมาะสม

แพลตฟอร์ม 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

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