Nút JS là JavaScript

Nút. js là môi trường máy chủ mã nguồn mở đa nền tảng có thể chạy trên Windows, Linux, Unix, macOS, v.v. Nút. js là môi trường thời gian chạy JavaScript phụ trợ, chạy trên Công cụ JavaScript V8 và thực thi mã JavaScript bên ngoài trình duyệt web

Nút. js cho phép các nhà phát triển sử dụng JavaScript để viết các công cụ dòng lệnh và cho kịch bản phía máy chủ. Chức năng chạy tập lệnh phía máy chủ tạo nội dung trang web động trước khi trang được gửi tới trình duyệt web của người dùng. Do đó, nút. js đại diện cho mô hình "JavaScript ở mọi nơi",[6] thống nhất phát triển ứng dụng web xung quanh một ngôn ngữ lập trình duy nhất, thay vì các ngôn ngữ khác nhau cho tập lệnh phía máy chủ và phía máy khách

Nút. js có kiến ​​trúc hướng sự kiện có khả năng I/O không đồng bộ. Các lựa chọn thiết kế này nhằm mục đích tối ưu hóa thông lượng và khả năng mở rộng trong các ứng dụng web có nhiều thao tác nhập/xuất, cũng như cho các ứng dụng Web thời gian thực (e. g. , chương trình giao tiếp thời gian thực và trò chơi trên trình duyệt). [7]

nút. js trước đây được quản lý bởi Node. js Foundation,[8] và hiện đã hợp nhất với JS Foundation để tạo thành OpenJS Foundation. OpenJS Foundation được hỗ trợ bởi chương trình Dự án cộng tác của Linux Foundation. [9]

Người dùng doanh nghiệp của Node. js bao gồm GoDaddy,[10] Groupon,[11] IBM,[12] LinkedIn,[13][14] Microsoft,[15][16] Netflix,[17] PayPal,[18][19] SAP,[ . ,[22] và Dịch vụ web của Amazon. [23]

Lịch sử[sửa]

Ryan Dahl, người tạo ra Nút. js, năm 2010

Nút. js ban đầu được viết bởi Ryan Dahl vào năm 2009,[24] khoảng mười ba năm sau khi giới thiệu môi trường JavaScript phía máy chủ đầu tiên, Netscape's LiveWire Pro Web. [25] Bản phát hành đầu tiên chỉ hỗ trợ Linux và Mac OS X. Sự phát triển và bảo trì của nó được dẫn dắt bởi Dahl và sau đó được tài trợ bởi Joyent. [26]

Dahl chỉ trích khả năng hạn chế của máy chủ web phổ biến nhất trong năm 2009, Máy chủ HTTP Apache, để xử lý nhiều kết nối đồng thời (lên đến 10.000 và hơn thế nữa) và cách phổ biến nhất để tạo mã (lập trình tuần tự), khi mã bị chặn . [27]

Dahl đã trình diễn dự án tại lễ khai mạc European JSConf vào ngày 8 tháng 11 năm 2009. [28][29][30] Nút. js đã kết hợp công cụ JavaScript V8 của Google, vòng lặp sự kiện và API I/O cấp thấp. [31]

Vào tháng 1 năm 2010, một trình quản lý gói đã được giới thiệu cho Node. môi trường js được gọi là npm. [32] Trình quản lý gói giúp lập trình viên xuất bản và chia sẻ mã nguồn của Node dễ dàng hơn. js và được thiết kế để đơn giản hóa việc cài đặt, cập nhật và gỡ cài đặt các gói. [31]

Vào tháng 6 năm 2011, Microsoft và Joyent đã triển khai phiên bản Windows gốc của Node. js. [33] Nút đầu tiên. js hỗ trợ Windows được phát hành vào tháng 7 năm 2011

Vào tháng 1 năm 2012, Dahl bước sang một bên, thăng chức cho đồng nghiệp và người sáng tạo npm Isaac Schlueter để quản lý dự án. [34] Vào tháng 1 năm 2014, Schlueter thông báo rằng Timothy J. Fontaine sẽ lãnh đạo dự án. [35]

Vào tháng 12 năm 2014, Fedor Indutny bắt đầu io. js, một nhánh của Node. js. Do xung đột nội bộ về quyền quản trị của Joyent, io. js được tạo ra như một giải pháp thay thế quản trị mở với một ủy ban kỹ thuật riêng biệt. [36][37] Không giống nút. js,[38] các tác giả dự định giữ io. js được cập nhật với các bản phát hành mới nhất của Google V8 JavaScript engine. [39]

Vào tháng 2 năm 2015, ý định hình thành một Node trung lập. js Foundation đã được công bố. Đến tháng 6 năm 2015, Node. js và io. js đã bỏ phiếu để làm việc cùng nhau trong Node. Quỹ js. [40]

Vào tháng 9 năm 2015, Nút. js v0. 12 và io. v3. 3 đã được hợp nhất lại với nhau thành Node v4. 0. [41] Sự hợp nhất này đã đưa các tính năng V8 ES6 vào Node. js và chu kỳ phát hành hỗ trợ dài hạn. [42] Kể từ năm 2016, io. js khuyên các nhà phát triển nên quay lại Node. js và không có bản phát hành nào nữa của io. js được lên kế hoạch do hợp nhất. [43]

Năm 2019, JS Foundation và Node. js Foundation được sáp nhập để tạo thành OpenJS Foundation

Vào tháng 9 năm 2022, Nút. js 18. 9. 0 đã được phát hành. [44]

Tổng quan[sửa]

Nút. js cho phép tạo các máy chủ Web và các công cụ mạng bằng JavaScript và một tập hợp các "mô-đun" xử lý các chức năng cốt lõi khác nhau. [28][31][45][46][47] Các mô-đun được cung cấp cho hệ thống tệp I/O, kết nối mạng (DNS, HTTP, TCP, TLS/SSL hoặc UDP), dữ liệu nhị phân (bộ đệm), chức năng mật mã, . [31][46][48] Nút. các mô-đun của js sử dụng API được thiết kế để giảm độ phức tạp của việc viết các ứng dụng máy chủ. [31][46]

JavaScript là ngôn ngữ duy nhất mà Node. js hỗ trợ nguyên bản, nhưng có sẵn nhiều ngôn ngữ biên dịch thành JS. [49] Kết quả là, Nút. js có thể được viết bằng CoffeeScript,[50] Dart, TypeScript, ClojureScript và các ứng dụng khác

Nút. js chủ yếu được sử dụng để xây dựng các chương trình mạng như máy chủ Web. [45] Sự khác biệt đáng kể nhất giữa Node. js và PHP là hầu hết các hàm trong PHP đều bị chặn cho đến khi hoàn thành (các lệnh chỉ thực thi sau khi các lệnh trước đó kết thúc), trong khi Node. js không bị chặn (các lệnh thực thi đồng thời hoặc thậm chí song song,[51][52] và sử dụng lệnh gọi lại để báo hiệu hoàn thành hoặc thất bại). [45]

Nút. js được hỗ trợ chính thức trên Linux, macOS và Microsoft Windows 8. 1 và Server 2012 (và phiên bản mới hơn),[3] với hỗ trợ cấp 2 cho SmartOS và IBM AIX và hỗ trợ thử nghiệm cho FreeBSD. OpenBSD cũng hoạt động và các phiên bản LTS có sẵn cho IBM i (AS/400). [53] Mã nguồn được cung cấp cũng có thể được xây dựng trên các hệ điều hành tương tự với các hệ điều hành được hỗ trợ chính thức hoặc được bên thứ ba sửa đổi để hỗ trợ các hệ điều hành khác như NonStop OS[54] và máy chủ Unix

Kiến trúc nền tảng[sửa]

Nút. js mang lập trình hướng sự kiện đến máy chủ web, cho phép phát triển máy chủ web nhanh bằng JavaScript. [31] Các nhà phát triển có thể tạo các máy chủ có khả năng mở rộng mà không cần sử dụng luồng, bằng cách sử dụng một mô hình lập trình hướng sự kiện đơn giản hóa sử dụng lệnh gọi lại để báo hiệu việc hoàn thành tác vụ. [31] Nút. js kết nối sự dễ dàng của ngôn ngữ kịch bản (JavaScript) với sức mạnh của lập trình mạng Unix. [31]

Nút. js được xây dựng dựa trên công cụ JavaScript V8 của Google vì nó có mã nguồn mở theo giấy phép BSD. Nó thành thạo với các nguyên tắc cơ bản về internet như HTTP, DNS và TCP. [28] JavaScript cũng là một ngôn ngữ nổi tiếng, làm cho Node. js có thể truy cập vào cộng đồng phát triển web. [28]

Hỗ trợ công nghiệp[sửa | sửa mã nguồn]

Có hàng ngàn thư viện nguồn mở cho Node. js, hầu hết chúng được lưu trữ trên trang web npm. Có nhiều hội nghị và sự kiện dành cho nhà phát triển hỗ trợ Node. js, bao gồm NodeConf, Node Interactive và Node Summit cũng như một số sự kiện khu vực

Cộng đồng nguồn mở đã phát triển các khung web để đẩy nhanh quá trình phát triển ứng dụng. Những khuôn khổ như vậy bao gồm Connect, Express. js, Ổ cắm. IO, Lông vũ. js, Koa. js, hapi. js, Cánh buồm. js, Meteor, Derby và nhiều thứ khác. [31][55] Nhiều gói khác nhau cũng đã được tạo để giao tiếp với các ngôn ngữ hoặc môi trường thời gian chạy khác như Microsoft. NET. [56]

IDE máy tính để bàn hiện đại cung cấp các tính năng chỉnh sửa và gỡ lỗi dành riêng cho Node. ứng dụng js. Những IDE như vậy bao gồm Atom, Brackets, JetBrains WebStorm,[57][58] Microsoft Visual Studio (với Node. js cho Visual Studio,[59] hoặc TypeScript với định nghĩa Nút,[60][61][62][63]) NetBeans,[64] Nodeclipse Enide Studio[65] (dựa trên Eclipse) và Visual Studio Code. [66][67] Một số IDE dựa trên web trực tuyến cũng hỗ trợ Node. js, chẳng hạn như Codeanywhere, Codenvy, Cloud9 IDE, Koding và trình chỉnh sửa luồng hình ảnh trong Node-RED

Nút. js được hỗ trợ trên một số nền tảng lưu trữ đám mây như Jelastic, Google Cloud Platform, AWS Elastic Beanstalk, Joyent và các nền tảng khác

Phát hành[sửa]

Phát hành[68]Trạng tháiTên mãNgày phát hànhKết thúc bảo trìPhiên bản cũ, không còn bảo trì. 0. 10. xPhiên bản cũ, không còn được bảo trì. End-of-Life2013-03-112016-10-31Phiên bản cũ, không còn được bảo trì. 0. 12. xPhiên bản cũ, không còn được bảo trì. End-of-Life2015-02-062016-12-31Phiên bản cũ, không còn được bảo trì. 4. xPhiên bản cũ, không còn được bảo trì. End-of-LifeArgon[69]2015-09-082018-04-30Phiên bản cũ, không còn được bảo trì. 5. xPhiên bản cũ, không còn được bảo trì. End-of-Life 2015-10-292016-06-30 Phiên bản cũ, không còn được bảo trì. 6. xPhiên bản cũ, không còn được bảo trì. End-of-LifeBoron[69]2016-04-262019-04-30Phiên bản cũ, không còn được bảo trì. 7. xPhiên bản cũ, không còn được bảo trì. End-of-Life 2016-10-252017-06-30 Phiên bản cũ, không còn được bảo trì. số 8. xPhiên bản cũ, không còn được bảo trì. End-of-LifeCarbon[69]2017-05-302019-12-31Phiên bản cũ, không còn được bảo trì. 9. xPhiên bản cũ, không còn được bảo trì. End-of-Life 2017-10-012018-06-30 Phiên bản cũ, không còn được bảo trì. 10. xPhiên bản cũ, không còn được bảo trì. End-of-LifeDubnium[69]2018-04-242021-04-30Phiên bản cũ, không còn được bảo trì. 11. xPhiên bản cũ, không còn được bảo trì. End-of-Life2018-10-232019-06-01Phiên bản cũ, không còn được bảo trì. 12. xPhiên bản cũ, không còn được bảo trì. End-of-LifeEbium[69]2019-04-232022-04-30Phiên bản cũ, không còn được bảo trì. 13. xPhiên bản cũ, không còn được bảo trì. End-of-Life2019-10-222020-06-01Phiên bản cũ hơn, nhưng vẫn được bảo trì. 14. x Phiên bản cũ hơn, nhưng vẫn được duy trì. Bảo trì LTSFermium[69]2020-04-212023-04-30Phiên bản cũ, không còn bảo trì. 15. xPhiên bản cũ, không còn được bảo trì. End-of-Life2020-10-202021-06-01Phiên bản cũ hơn nhưng vẫn được bảo trì. 16. x Phiên bản cũ hơn, nhưng vẫn được duy trì. Bảo trì LTSGallium[69]2021-04-202023-09-11[70]Phiên bản cũ, không còn bảo trì. 17. xPhiên bản cũ, không còn được bảo trì. End-of-Life2021-10-192022-06-01Phiên bản cũ hơn nhưng vẫn được bảo trì. 18. x Phiên bản cũ hơn, nhưng vẫn được duy trì. Active LTSHydrogen[69]2022-04-192025-04-30Phiên bản ổn định hiện tại. 19. x Phiên bản ổn định hiện tại. Hiện tại2022-10-182023-06-01Phát hành trong tương lai. 20. xFuture phát hành. Đã lên kế hoạch2023-04-182026-04-30

Phiên bản cũ hơn, vẫn được duy trì

Các bản phát hành chính mới của Node. js bị cắt khỏi nhánh chính GitHub sáu tháng một lần. Phiên bản số chẵn bị cắt vào tháng 4 và phiên bản số lẻ bị cắt vào tháng 10. Khi một phiên bản lẻ mới được phát hành, phiên bản chẵn trước đó sẽ trải qua quá trình chuyển đổi sang Hỗ trợ dài hạn (LTS), mang lại cho phiên bản đó 18 tháng hỗ trợ tích cực kể từ ngày được chỉ định là LTS. Sau khi 18 tháng này hết hạn, bản phát hành LTS sẽ nhận được thêm 12 tháng hỗ trợ bảo trì. Một phiên bản đang hoạt động nhận được các bản cập nhật thay đổi liên tục vài tuần sau khi chúng xuất hiện trong bản phát hành hiện tại. Bản phát hành bảo trì chỉ nhận các bản sửa lỗi quan trọng và bản cập nhật tài liệu. [69] Nhóm làm việc LTS quản lý chiến lược và chính sách phối hợp với Ban chỉ đạo kỹ thuật của nút. Quỹ js

Chi tiết kỹ thuật[sửa]

Nút. js là môi trường thời gian chạy JavaScript xử lý các yêu cầu đến trong một vòng lặp, được gọi là vòng lặp sự kiện

Nội bộ [ chỉnh sửa ]

Nút. js sử dụng libuv dưới mui xe để xử lý các sự kiện không đồng bộ. Libuv là một lớp trừu tượng cho chức năng mạng và hệ thống tệp trên cả Windows và các hệ thống dựa trên POSIX như Linux, macOS, OSS trên NonStop và Unix

Luồng [ chỉnh sửa ]

Nút. js hoạt động trên vòng lặp sự kiện đơn luồng, sử dụng lệnh gọi I/O không chặn, cho phép nó hỗ trợ hàng chục nghìn kết nối đồng thời mà không phát sinh chi phí chuyển ngữ cảnh luồng. [71] Thiết kế chia sẻ một luồng duy nhất trong số tất cả các yêu cầu sử dụng mẫu quan sát viên nhằm mục đích xây dựng các ứng dụng đồng thời cao, trong đó bất kỳ chức năng nào thực hiện I/O đều phải sử dụng lệnh gọi lại. Để phù hợp với vòng lặp sự kiện đơn luồng, Node. js sử dụng thư viện libuv—đến lượt thư viện này sử dụng nhóm luồng có kích thước cố định để xử lý một số thao tác I/O không đồng bộ không chặn. [7]

Nhóm luồng xử lý việc thực thi các tác vụ song song trong Nút. js. Hàm luồng chính gọi các tác vụ gửi đến hàng đợi tác vụ được chia sẻ, mà các luồng trong nhóm luồng sẽ kéo và thực thi. Các chức năng hệ thống không chặn vốn có, chẳng hạn như mạng dịch sang ổ cắm không chặn phía nhân, trong khi các chức năng hệ thống chặn vốn có như tệp I/O chạy theo cách chặn trên các luồng của riêng chúng. Khi một luồng trong nhóm luồng hoàn thành một tác vụ, nó sẽ thông báo cho luồng chính về điều này, do đó, luồng này sẽ thức dậy và thực hiện cuộc gọi lại đã đăng ký

Nhược điểm của cách tiếp cận đơn luồng này là Node. js không cho phép thay đổi quy mô theo chiều dọc bằng cách tăng số lượng lõi CPU của máy mà nó đang chạy mà không sử dụng mô-đun bổ sung, chẳng hạn như cụm,[51] StrongLoop Process Manager,[72] hoặc pm2. [73] Tuy nhiên, nhà phát triển có thể tăng số lượng luồng mặc định trong nhóm luồng libuv. Hệ điều hành máy chủ (HĐH) có khả năng phân phối các luồng này trên nhiều lõi. [74] Một vấn đề khác là các tính toán kéo dài và các tác vụ khác liên quan đến CPU sẽ đóng băng toàn bộ vòng lặp sự kiện cho đến khi hoàn thành. [cần dẫn nguồn]

V8 là công cụ thực thi JavaScript ban đầu được xây dựng cho Google Chrome. Sau đó, nó được Google mã nguồn mở vào năm 2008. Được viết bằng C++, V8 biên dịch mã nguồn JavaScript thành mã máy gốc khi chạy. [7] Kể từ năm 2016, nó cũng bao gồm Ignition, trình thông dịch bytecode

Quản lý gói[sửa]

npm là trình quản lý gói được cài đặt sẵn cho Node. nền tảng máy chủ js. Nó cài đặt Node. js từ sổ đăng ký npm, tổ chức cài đặt và quản lý Node của bên thứ ba. chương trình js. Các gói trong sổ đăng ký npm có thể bao gồm từ các thư viện trợ giúp đơn giản như Lodash đến các trình chạy tác vụ như Grunt

API hợp nhất[sửa]

Nút. js có thể được kết hợp với trình duyệt có trang web của bạn, cơ sở dữ liệu hỗ trợ dữ liệu JSON (chẳng hạn như Postgres,[75] MongoDB hoặc CouchDB) và JSON cho ngăn xếp phát triển JavaScript hợp nhất. Với sự điều chỉnh của các mẫu phát triển phía máy chủ cơ bản như MVC, MVP, MVVM, v.v. , Nút. js cho phép sử dụng lại cùng một mô hình và giao diện dịch vụ giữa phía máy khách và phía máy chủ

Vòng lặp sự kiện[sửa]

Nút. js đăng ký với hệ điều hành để hệ điều hành thông báo về các kết nối và đưa ra lệnh gọi lại. Trong nút. js, mỗi kết nối là một phân bổ heap nhỏ. Theo truyền thống, các quy trình hoặc luồng hệ điều hành tương đối nặng xử lý từng kết nối. Nút. js sử dụng một vòng lặp sự kiện để có khả năng mở rộng, thay vì các quy trình hoặc luồng. [76] Trái ngược với các máy chủ hướng sự kiện khác, Node. vòng lặp sự kiện của js không cần phải được gọi rõ ràng. Thay vào đó, các cuộc gọi lại được xác định và máy chủ sẽ tự động vào vòng lặp sự kiện ở cuối định nghĩa cuộc gọi lại. Nút. js thoát khỏi vòng lặp sự kiện khi không có cuộc gọi lại nào nữa được thực hiện

WebAssembly[sửa]

Nút. js hỗ trợ WebAssugging và kể từ Node 14 đã hỗ trợ thử nghiệm WASI, Giao diện hệ thống WebAssugging

Các ràng buộc gốc [ chỉnh sửa ]

Nút. js cung cấp một cách để tạo "tiện ích bổ sung" thông qua API dựa trên C có tên là N-API, có thể được sử dụng để tạo các mô-đun .node có thể tải (có thể nhập) từ mã nguồn được viết bằng C/C++. [77] Các mô-đun có thể được tải trực tiếp vào bộ nhớ và được thực thi từ bên trong môi trường JS dưới dạng các mô-đun CommonJS đơn giản. Việc triển khai N-API dựa trên Nút C/C++ nội bộ. js và các đối tượng V8 yêu cầu người dùng nhập (#include) Nút. js vào mã nguồn gốc của chúng. [77] Là nút. js liên tục phát triển, khả năng tương thích API có thể thay đổi và đôi khi có thể bị hỏng bởi một phiên bản mới (do đó, các mô-đun phải được xây dựng dựa trên Node cụ thể. js hoạt động chính xác). Để giải quyết vấn đề này, các bên thứ ba đã giới thiệu các trình bao bọc С/С++ nguồn mở bên trên API giúp giảm bớt một phần vấn đề. Chúng đơn giản hóa các giao diện, nhưng như một tác dụng phụ, chúng cũng có thể gây ra sự phức tạp mà những người bảo trì phải giải quyết. Mặc dù chức năng cốt lõi của Node. js nằm trong thư viện tích hợp JavaScript, các mô-đun được viết bằng C++ có thể được sử dụng để nâng cao khả năng và cải thiện hiệu suất của ứng dụng

Để tạo ra các mô-đun như vậy, người ta cần phải có trình biên dịch C++ thích hợp và các tiêu đề cần thiết (cái sau thường được vận chuyển cùng với Node. js chính nó). gcc, clang hoặc MSVC++

N-API tương tự như Java Native Interface

Quản lý dự án[sửa | sửa mã nguồn]

Vào năm 2015, các nhánh khác nhau của Node lớn hơn. cộng đồng js bắt đầu hoạt động theo Node trung lập với nhà cung cấp. Quỹ js. Mục đích đã nêu của tổ chức "là cho phép áp dụng rộng rãi và giúp đẩy nhanh quá trình phát triển Node. js và các mô-đun liên quan khác thông qua mô hình quản trị mở khuyến khích sự tham gia, đóng góp kỹ thuật và khuôn khổ quản lý lâu dài bởi một hệ sinh thái được đầu tư vào Node. js thành công. “[78]

nút. js Foundation Technical Steering Committee (TSC) là cơ quan quản lý kỹ thuật của Node. Quỹ js. TSC chịu trách nhiệm về Nút lõi. js repo cũng như các dự án phụ thuộc và liền kề. Nói chung, TSC ủy quyền quản lý các dự án này cho các nhóm hoặc ủy ban làm việc. [79] Nhóm LTS quản lý các bản phát hành được hỗ trợ dài hạn là một trong những nhóm như vậy. Các nhóm hiện tại khác bao gồm Trang web, Luồng, Bản dựng, Chẩn đoán, i18n, Truyền giáo, Docker, API Addon, Đo điểm chuẩn, Khám nghiệm tử thi, Quốc tế, Tài liệu và Thử nghiệm. [80]

Tháng 8/2017, 1/3 thành viên TSC từ chức do tranh chấp liên quan đến quy tắc ứng xử của dự án. [81]

JavaScript và nút JS có giống nhau không?

Sự khác biệt giữa Nodejs và JavaScript. Javascript là một ngôn ngữ lập trình được sử dụng để viết script trên trang web. NodeJS là môi trường thời gian chạy Javascript . 2. Javascript chỉ có thể chạy trên trình duyệt.

NodeJs có phải là một phần của JavaScript không?

Nút. js® là thời gian chạy JavaScript được xây dựng trên công cụ JavaScript V8 của Chrome . Nút. js sử dụng mô hình I/O không chặn, hướng sự kiện giúp nó nhẹ và hiệu quả.

Là nút JS JavaScript hay Java?

Node js là môi trường thời gian chạy JavaScript sử dụng công cụ V8 của Google. Công cụ này được thiết kế để chạy mã JavaScript nhanh và hiệu quả. Node js nhanh hơn java vì nó sử dụng mô hình I/O hướng sự kiện không đồng bộ và không có chi phí hoạt động của môi trường thời gian chạy Java.

Nút JS là JavaScript hay bản đánh máy?

Nút. js là một khung phát triển nguồn mở được triển khai để thực thi JavaScript ở phía máy chủ.