Đã có nền tảng JavaScript phía máy chủ Node.js 20.0

Việc phát hành Node.js 20.0, một nền tảng để thực thi các ứng dụng mạng bằng JavaScript, đã diễn ra. Node.js 20.0 đã được chỉ định cho nhánh hỗ trợ dài hạn, nhưng trạng thái này sẽ không được chỉ định cho đến tháng 20, sau khi ổn định. Node.js 30.x sẽ được hỗ trợ cho đến ngày 2026 tháng 18 năm 2025. Việc bảo trì nhánh Node.js 16.x LTS trước đó sẽ kéo dài đến tháng 2023 năm 14 và nhánh 30.x LTS trước đó cho đến tháng 19 năm 1. Nhánh XNUMX.x LTS sẽ ngừng hoạt động vào ngày XNUMX tháng XNUMX và nhánh tạm thời Node.js XNUMX.x vào ngày XNUMX tháng XNUMX.

Cải tiến chính:

  • Công cụ V8 đã được cập nhật lên phiên bản 11.3, được sử dụng trong Chromium 113. Trong số các thay đổi so với nhánh Node.js 19, sử dụng công cụ Chromium 107, các hàm String.prototype.isWellFormed và toWellFormed, Array.prototype và các phương thức TypedArray.prototype để hoạt động với bản sao khi thay đổi các đối tượng Array và TypedArray, cờ "v" trong RegExp, hỗ trợ thay đổi kích thước ArrayBuffer và tăng kích thước của SharedArrayBuffer, gọi đuôi trong WebAssugging.
  • Cơ chế Mô hình quyền thử nghiệm được đề xuất cho phép bạn hạn chế quyền truy cập vào một số tài nguyên nhất định trong quá trình thực thi. Hỗ trợ Mô hình quyền được bật bằng cách chỉ định cờ "--experimental-permission" khi chạy. Trong quá trình triển khai ban đầu, các tùy chọn đã được đề xuất để hạn chế quyền truy cập ghi (--allow-fs-write) và đọc (--allow-fs-read) đối với một số phần nhất định của FS, quy trình con (--allow-child- process) , tiện ích bổ sung (--no-addons ) và chủ đề (--allow-worker). Ví dụ: để cho phép ghi vào thư mục /tmp và đọc tệp /home/index.js, bạn có thể chỉ định: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js chỉ mục .js

    Để kiểm tra quyền truy cập, bạn nên sử dụng phương thức process.permission.has(), ví dụ: " process.permission.has('fs.write',"/tmp/test").

  • Trình xử lý cho các mô-đun bên ngoài ECMAScript (ESM) được tải thông qua tùy chọn "--experimental-loader" hiện được thực thi trong một luồng riêng biệt, tách biệt với luồng chính, giúp loại bỏ giao điểm của mã ứng dụng và các mô-đun ESM đã tải. Tương tự như trình duyệt, phương thức import.meta.resolve() hiện thực thi đồng bộ khi được gọi từ bên trong ứng dụng. Ở một trong những nhánh tiếp theo của Node.js, hỗ trợ tải ESM được lên kế hoạch chuyển sang danh mục tính năng ổn định.
  • Mô-đun node:test (test_runner), được thiết kế để tạo và chạy các thử nghiệm JavaScript trả về kết quả ở định dạng TAP (Giao thức thử nghiệm mọi thứ), đã được chuyển sang ổn định.
  • Một nhóm hiệu suất riêng đã được thành lập, để chuẩn bị cho nhánh mới, nhóm này đã làm việc để tăng tốc các thành phần thời gian chạy khác nhau, bao gồm phân tích cú pháp URL, tìm nạp() và EventTarget. Ví dụ: chi phí khởi tạo EventTarget đã giảm một nửa, hiệu suất của phương thức URL.canParse() đã được cải thiện đáng kể và hiệu quả của bộ hẹn giờ đã được cải thiện. Ngoài ra, việc phát hành trình phân tích cú pháp URL hiệu suất cao - Ada 2.0, được viết bằng C ++, được bao gồm trong thành phần.
  • Việc phát triển một tính năng thử nghiệm để phân phối các ứng dụng dưới dạng một tệp thực thi duy nhất (SEA, Các ứng dụng có thể thực thi đơn lẻ) đã tiếp tục. Việc tạo một tệp thực thi hiện yêu cầu thay thế một đốm màu được tạo từ tệp cấu hình JSON (thay vì thay thế tệp JavaScript).
  • Cải thiện khả năng tương thích API Web Crypto với các triển khai từ các dự án khác.
  • Đã thêm hỗ trợ chính thức cho Windows trên các hệ thống ARM64.
  • Tiếp tục hỗ trợ các tiện ích mở rộng WASI (Giao diện hệ thống WebAssembly) để tạo các ứng dụng WebAssembly độc lập. Đã loại bỏ nhu cầu chỉ định cờ dòng lệnh đặc biệt để bật hỗ trợ WASI.

Nền tảng Node.js có thể được sử dụng cho cả việc bảo trì máy chủ của các ứng dụng Web và để tạo các chương trình mạng máy chủ và máy khách thông thường. Để mở rộng chức năng của các ứng dụng cho Node.js, một bộ sưu tập lớn các mô-đun đã được chuẩn bị, trong đó bạn có thể tìm thấy các mô-đun với việc triển khai các máy chủ và máy khách HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, các mô-đun để tích hợp với các khung web khác nhau, trình xử lý WebSocket và Ajax , trình kết nối DBMS (MySQL, PostgreSQL, SQLite, MongoDB), công cụ tạo khuôn mẫu, công cụ CSS, triển khai 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.

Để đảm bảo xử lý một số lượng lớn các 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 xử lý sự kiện không chặn và định nghĩa về 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 là epoll, kqueue, /dev/poll và select. Để ghép kênh kết nối, thư viện libuv được sử dụng, đây là 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 chặn được thực thi bên trong nhóm luồng và sau đó, giống như các bộ 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 ống (pipe) không tên. Việc thực thi mã JavaScript được cung cấp 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ư các khung công tác Perl AnyEvent, Ruby Event Machine, Python Twisted và triển khai sự kiện 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 như xử lý sự kiện trong ứng dụng web đang chạy trong trình duyệt. Ví dụ: khi viết ứng dụng cho node.js, bạn cần xem xét các chi tiết cụ thể của lập trình hướng sự kiện, thay vì thực hiện "var result = db.query("select..");" với việc chờ hoàn thành công việc và xử lý kết quả sau đó, Node.js sử dụng nguyên tắc thực thi không đồng bộ, tức là mã được chuyển đổi thành "db.query("select..", function (result) {result processing});", trong đó kiểm soát sẽ ngay lập tức chuyển sang mã tiếp theo và kết quả truy vấn sẽ được xử lý khi dữ liệu đến.

Nguồn: opennet.ru

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