Nền tảng JavaScript Node.js 22.0.0 có sẵn

Node.js 22.0 đã được phát hành, một nền tảng để chạy các ứng dụng mạng bằng JavaScript. Node.js 22.0 được phân loại là nhánh hỗ trợ dài hạn, nhưng trạng thái này sẽ chỉ được chỉ định vào tháng 22, sau khi ổn định. Node.js 30.x sẽ được hỗ trợ cho đến ngày 2027 tháng 20 năm 2026. Việc bảo trì nhánh LTS trước đây của Node.js 18.x sẽ kéo dài đến tháng 2025 năm 21 và năm trước nhánh LTS 1.x cuối cùng cho đến tháng 2024 năm XNUMX. Nhánh dàn dựng của Node.js XNUMX.x sẽ ngừng hoạt động vào ngày XNUMX tháng XNUMX năm XNUMX.

Cải tiến chính:

  • Engine V8 đã được cập nhật lên phiên bản 12.4, được sử dụng trong Chrome 124. Trong số những thay đổi so với nhánh Node.js 21 sử dụng engine V8 11.8), cần lưu ý:
    • Hỗ trợ tiện ích mở rộng WasmGC, giúp đơn giản hóa việc chuyển các chương trình được viết bằng ngôn ngữ lập trình sử dụng trình thu gom rác (Kotlin, PHP, Java, v.v.) sang WebAssembly. WasmGC bổ sung các loại cấu trúc và mảng mới có thể sử dụng phân bổ bộ nhớ phi tuyến tính.
    • Hỗ trợ phương thức Array.fromAsync(), trả về không đồng bộ một phiên bản mới của đối tượng Array được sao chép từ một đối tượng lặp giống như mảng, có thể lặp hoặc không đồng bộ.
    • Hỗ trợ các phương thức lặp như .map, .filter, .find, .take, .drop, .forEach và .reduce.
    • Hỗ trợ đối tượng Set xác định một tập hợp các giá trị và cung cấp các phương thức triển khai các hoạt động tập hợp phổ biến, chẳng hạn như giao, hợp, hiệu và cộng.
  • Trình biên dịch JIT tối ưu hóa Maglev được bật theo mặc định, nhằm mục đích tạo nhanh mã máy hiệu suất cao cho mã JavaScript được sử dụng nhiều. Việc kích hoạt Maglev có thể tăng tốc đáng kể các ứng dụng CLI tồn tại trong thời gian ngắn không thực hiện các hoạt động dài hạn, chẳng hạn như thời gian hoàn thành bài kiểm tra Jetstrea giảm 7.5% và bài kiểm tra Đồng hồ tốc độ giảm 5%.
  • Hoạt động với các luồng đã được tăng tốc bằng cách tăng giá trị của tùy chọn highWaterMark từ 16 KB lên 65 KB (xác định giới hạn mà bản ghi được lưu vào bộ đệm). Thay đổi này dẫn đến mức tiêu thụ bộ nhớ tăng lên, do đó, các ứng dụng được thiết kế để chạy trên RAM hạn chế có thể cần phải hoàn nguyên về giá trị cũ thông qua lệnh gọi tới setDefaultHighWaterMark().
  • Cải thiện hiệu suất của API tìm nạp() và API chạy thử nghiệm bằng cách làm cho quá trình khởi tạo AbortSignal hiệu quả hơn. Hiệu suất của các API liên quan đến công việc đồng bộ với hệ thống tệp đã được cải thiện.
  • Một tính năng thử nghiệm đã được cung cấp để sử dụng lệnh gọi "require()" để tải các mô-đun JavaScript ESM (Mô-đun ECMAScript) ở chế độ đồng bộ. Các mô-đun ESM được sử dụng trong trình duyệt và thay thế các mô-đun CommonJS dành riêng cho Node.js. Để tải qua "require()", mô-đun ESM phải được thực thi ở chế độ đồng bộ (không chờ đợi ở cấp cao nhất). Hỗ trợ được kích hoạt thông qua cờ “--experimental-require-module”.
  • Đã thêm khả năng thử nghiệm để chạy các tập lệnh được xác định trong tệp pack.json bằng lệnh "--run" "
  • Lệnh “node –watch” đã được chuyển sang danh mục ổn định với việc triển khai chế độ đồng hồ để đảm bảo rằng quá trình được khởi động lại khi tệp đã nhập thay đổi (ví dụ: nếu “node –watch index.js” được thực thi, lệnh quá trình sẽ được tự động khởi động lại khi index.js thay đổi).
  • Quá trình triển khai gốc của API WebSocket đã được ổn định, cho phép sử dụng WebSocket ở chế độ máy khách mà không cần cài đặt các phần phụ thuộc bổ sung.
  • Đã thêm hỗ trợ một phần cho API Điều hướng.
  • API Webstreams đã thêm hỗ trợ cho định dạng nén thô giảm phát.
  • Đã thêm các hàm glob và globSync vào node:fsmodule để khớp mẫu đường dẫn tệp.
  • Cải thiện việc xử lý các ngăn xếp IPv6 được cấu hình không chính xác. Đã triển khai thuật toán Happy Eyeballs để khôi phục nhanh chóng trong trường hợp có sự cố với hoạt động của IPv6.
  • API tiện ích không còn được dùng nữa.
  • Các phiên bản phụ thuộc được cập nhật: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, ada 2.7.7 và undici 6.6.0 .

Nền tảng Node.js có thể được sử dụng cả để hỗ trợ phía máy chủ cho các ứng dụng web và để tạo ra các chương trình mạng phía máy khách và máy chủ tiêu chuẩn. Để mở rộng chức năng của các ứng dụng Node.js, một bộ sưu tập lớn các mô-đun đã được chuẩn bị, bao gồm cả những mô-đun triển khai may chủ và các máy khách của HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, các mô-đun để tích hợp với nhiều khung web khác nhau, trình xử lý WebSocket và Ajax, trình kết nối với hệ quản trị cơ sở dữ liệu (MySQL, PostgreSQL, SQLite, MongoDB), công cụ tạo mẫu, công cụ CSS, triển khai các thuật toán mã hóa và hệ thống ủy quyền (OAuth), trình phân tích cú pháp XML.

Để xử lý số lượng lớn yêu cầu song song, Node.js sử dụng mô hình thực thi mã không đồng bộ dựa trên việc xử lý sự kiện không chặn và xác định trình xử lý gọi lại. Các phương thức được hỗ trợ cho kết nối ghép kênh bao gồm epoll, kqueue, /dev/poll và select. Để ghép kênh kết nối, thư viện libuv được sử dụng, đây là một tiện ích bổ sung cho libev trên hệ thống Unix và IOCP trên Windows. Thư viện libeio được sử dụng để tạo nhóm luồng và c-ares được tích hợp để thực hiện các truy vấn DNS ở chế độ không chặn. Tất cả các cuộc gọi hệ thống gây ra việc chặn đều được thực thi trong nhóm luồng và sau đó, giống như các trình xử lý tín hiệu, chuyển kết quả công việc của chúng trở lại thông qua một đường dẫn không tên.

Việc thực thi mã JavaScript được đảm bảo thông qua việc sử dụng công cụ V8 do Google phát triển (ngoài ra, Microsoft đang phát triển phiên bản Node.js với công cụ Chakra-Core). Về cốt lõi, Node.js tương tự như Perl AnyEvent, Ruby Event Machine, Python Twisted framework và việc triển khai các sự kiện trong Tcl, nhưng vòng lặp sự kiện trong Node.js bị ẩn khỏi nhà phát triển và giống với quá trình xử lý sự kiện trong ứng dụng web chạy trên trình duyệt.

Nguồn: opennet.ru

Thêm một lời nhận xét