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

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

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

  • เครื่องยนต์ V8 ได้รับการอัปเดตเป็นเวอร์ชัน 11.3 ซึ่งใช้ใน Chromium 113 จากการเปลี่ยนแปลงเมื่อเปรียบเทียบกับสาขา Node.js 19 ซึ่งใช้เครื่องยนต์ Chromium 107, ฟังก์ชัน String.prototype.isWellFormed และ toWellFormed, Array.prototype และเมธอด TypedArray.prototype เพื่อทำงานกับสำเนาการเปลี่ยนแปลงของออบเจกต์ Array และ TypedArray, แฟล็ก "v" ใน RegExp, รองรับการปรับขนาด ArrayBuffer และเพิ่มขนาดของ SharedArrayBuffer, tail-call ใน WebAssembly
  • มีการเสนอกลไกแบบจำลองสิทธิ์การทดลองที่อนุญาตให้คุณจำกัดการเข้าถึงทรัพยากรบางอย่างในระหว่างการดำเนินการ การสนับสนุน Permission Model เปิดใช้งานโดยระบุแฟล็ก "--experimental-permission" เมื่อรัน ในการใช้งานครั้งแรก มีการเสนอตัวเลือกเพื่อจำกัดการเข้าถึงการเขียน (--allow-fs-write) และการอ่าน (--allow-fs-read) ในบางส่วนของ FS, กระบวนการย่อย (--allow-child-process) , ส่วนเสริม (--no-addons ) และเธรด (--allow-worker) ตัวอย่างเช่น หากต้องการอนุญาตให้เขียนไปยังไดเร็กทอรี /tmp และอ่านไฟล์ /home/index.js คุณสามารถระบุ: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js ดัชนี .js

    หากต้องการตรวจสอบการเข้าถึง ขอแนะนำให้ใช้เมธอด process.permission.has() เช่น "process.permission.has('fs.write',"/tmp/test")

  • ตัวจัดการสำหรับโมดูลภายนอก ECMAScript (ESM) ที่โหลดผ่านตัวเลือก "--experimental-loader" ตอนนี้ดำเนินการในเธรดแยกต่างหาก ซึ่งแยกจากเธรดหลัก ซึ่งช่วยลดจุดตัดกันของรหัสแอปพลิเคชันและโมดูล ESM ที่โหลด เช่นเดียวกับเบราว์เซอร์ ตอนนี้เมธอด import.meta.resolve() ทำงานพร้อมกันเมื่อเรียกจากภายในแอปพลิเคชัน ในหนึ่งในสาขาถัดไปของ Node.js การสนับสนุนการโหลด ESM มีแผนที่จะย้ายไปยังหมวดหมู่ของคุณสมบัติที่เสถียร
  • โมดูล node:test (test_runner) ออกแบบมาเพื่อสร้างและเรียกใช้การทดสอบ JavaScript ที่ส่งคืนผลลัพธ์ในรูปแบบ TAP (Test Anything Protocol) ถูกย้ายไปที่เสถียรแล้ว
  • มีการจัดตั้งทีมประสิทธิภาพแยกต่างหาก ซึ่งในการเตรียมพร้อมสำหรับสาขาใหม่ ได้ทำงานเพื่อเพิ่มความเร็วให้กับคอมโพเนนต์รันไทม์ต่างๆ รวมถึงการแยกวิเคราะห์ URL, fetch() และ EventTarget ตัวอย่างเช่น ค่าใช้จ่ายในการเริ่มต้น EventTarget ลดลงครึ่งหนึ่ง ประสิทธิภาพของเมธอด URL.canParse() ได้รับการปรับปรุงอย่างมีนัยสำคัญ และประสิทธิภาพของตัวจับเวลาได้รับการปรับปรุง นอกจากนี้ยังมีการเปิดตัวตัวแยกวิเคราะห์ URL ที่มีประสิทธิภาพสูง - Ada 2.0 ซึ่งเขียนด้วย C ++ ซึ่งรวมอยู่ในองค์ประกอบ
  • การพัฒนาคุณลักษณะทดลองสำหรับการส่งมอบแอปพลิเคชันในรูปแบบของไฟล์เรียกทำงานเดี่ยว (SEA, Single Executable Applications) ได้ดำเนินต่อไป ขณะนี้การสร้างไฟล์เรียกทำงานต้องมีการแทนที่ blob ที่สร้างจากไฟล์การกำหนดค่า JSON (แทนการแทนที่ไฟล์ JavaScript)
  • ปรับปรุงความเข้ากันได้ของ Web Crypto API กับการใช้งานจากโครงการอื่นๆ
  • เพิ่มการสนับสนุนอย่างเป็นทางการสำหรับ Windows บนระบบ ARM64
  • การสนับสนุนอย่างต่อเนื่องสำหรับส่วนขยาย WASI (WebAssembly System Interface) สำหรับการสร้างแอปพลิเคชัน WebAssembly แบบสแตนด์อโลน ลบความจำเป็นในการระบุแฟล็กบรรทัดคำสั่งพิเศษเพื่อเปิดใช้งานการสนับสนุน WASI

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

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