กลับไปหน้าบทความ

อ่าน 12 นาที

โนด.เจ.

Node.js เป็น สภาพแวดล้อมรันไทม์ JavaScript แบบโอเพนซอร์ส ข้าม แพลตฟอร์ม ที่สามารถทำงานได้บน Windows , Linux , Unix , macOS และอื่นๆ Node.

โนด.เจ.

โนด.เจ.
ผู้เขียนต้นฉบับไรอัน ดาห์ล
นักพัฒนามูลนิธิ OpenJS
ปล่อย27 พฤษภาคม 2552 [ 1 ] ( 27 พฤษภาคม 2552 )
เวอร์ชันเสถียร
26.3.0 [ 2 ] แก้ไขข้อมูลนี้บนวิกิดาต้า / 1 มิถุนายน 2026 ( 1 มิถุนายน 2569 )
เขียนเป็นJavaScript , C++ , Python , C
ระบบปฏิบัติการz/OS , Linux , macOS , Microsoft Windows , SmartOS , FreeBSD , OpenBSD , IBM AIX [ 3 ]
พิมพ์สภาพแวดล้อมรันไทม์
ใบอนุญาตใบอนุญาต MIT [ 4 ] [ 5 ]
เว็บไซต์nodejs.org แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • github.com/nodejs/node

Node.jsเป็นสภาพแวดล้อมรันไทม์JavaScript แบบโอเพนซอร์สข้ามแพลตฟอร์มที่สามารถทำงานได้บนWindows , Linux , Unix , macOSและอื่นๆ Node.js ทำงานบนเอ็นจิ้น JavaScript V8และดำเนินการโค้ด JavaScript นอกเว็บเบราว์เซอร์จากผลสำรวจนักพัฒนา Stack Overflow พบว่า Node.js เป็นหนึ่งในเทคโนโลยีเว็บที่ใช้กันมากที่สุด[ 6 ]

Node.js อนุญาตให้นักพัฒนาใช้ JavaScript สำหรับเขียนเครื่องมือบรรทัดคำสั่งและสคริปต์ฝั่งเซิร์ฟเวอร์การรัน JavaScript บนเซิร์ฟเวอร์มักใช้เพื่อสร้าง เนื้อหา เว็บเพจแบบไดนามิก ก่อนที่จะส่งหน้าเว็บไปยังเว็บเบราว์เซอร์ของผู้ใช้ ด้วยเหตุนี้ Node.js จึงแสดงถึง แนวคิด "JavaScript ทุกที่" [ 7 ]ซึ่ง รวมการพัฒนา เว็บแอปพลิเคชัน ไว้รอบ ภาษาการเขียนโปรแกรมเดียวแทนที่จะใช้ภาษาที่แตกต่างกันสำหรับการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์

Node.js มีสถาปัตยกรรมแบบขับเคลื่อนด้วยเหตุการณ์ที่สามารถรองรับ I/O แบบอะซิงโครนัสได้ทางเลือกในการออกแบบเหล่านี้มีเป้าหมายเพื่อเพิ่มประสิทธิภาพปริมาณงานและความสามารถในการขยายขนาดในแอปพลิเคชันเว็บที่มีการดำเนินการอินพุต/เอาต์พุตจำนวนมาก รวมถึง แอปพลิเคชัน เว็บแบบเรียลไทม์ (เช่น โปรแกรม การสื่อสารแบบเรียลไทม์และเกมบนเบราว์เซอร์ ) [ 8 ]

โครงการ พัฒนาแบบกระจาย Node.js ก่อนหน้านี้อยู่ภายใต้การกำกับดูแลของ Node.js Foundation [ 9 ]และปัจจุบันได้รวมเข้ากับJS Foundationเพื่อก่อตั้งOpenJS Foundation OpenJS Foundation ได้รับการสนับสนุนจากโครงการ Collaborative Projects ของLinux Foundation [ 10 ]

ประวัติศาสตร์

ไรอัน ดาห์ล ผู้สร้าง Node.js ในปี 2010
Rocket Turtle มาสคอตอย่างเป็นทางการของ Node.js ตั้งแต่เดือนกุมภาพันธ์ 2024

Node.js ถูกเขียนขึ้นครั้งแรกโดยRyan Dahlในปี 2009 [ 11 ]ประมาณ 13 ปีหลังจากการเปิดตัวสภาพแวดล้อม JavaScript ฝั่งเซิร์ฟเวอร์ตัวแรก คือLiveWire Pro Web ของNetscape [ 12 ] เวอร์ชันเริ่มต้นรองรับเฉพาะ Linux และ Mac OS X เท่านั้น การพัฒนาและการบำรุงรักษา ได้รับการนำโดย Dahl และต่อมาได้รับการสนับสนุนโดยJoyent [ 13 ]

ดาล์วิจารณ์ถึงความสามารถที่จำกัดของApache HTTP Serverในการจัดการการเชื่อมต่อพร้อมกันจำนวนมาก (มากกว่า 10,000 รายการ) รวมถึงรูปแบบการเขียนโปรแกรมแบบลำดับที่แพร่หลาย ซึ่งแอปพลิเคชันอาจบล็อกกระบวนการทั้งหมดหรือทำให้เกิดการสร้างสแต็กการทำงานหลายรายการสำหรับการเชื่อมต่อพร้อมกัน

Dahl ได้สาธิตโครงการนี้ในงาน JSConf ครั้งแรกของยุโรปเมื่อวันที่ 8 พฤศจิกายน 2009 [ 14 ] [ 15 ] [ 16 ] Node.js ได้รวมเอาเอ็นจิ้น JavaScript V8ของGoogle , ลูปเหตุการณ์ และ API I/Oระดับต่ำเข้าไว้ ด้วยกัน [ 17 ]

ในเดือนมกราคม พ.ศ. 2553 ได้มีการนำ ตัวจัดการแพ็กเกจสำหรับสภาพแวดล้อม Node.js ที่เรียกว่าnpm มา ใช้[ 18 ]ตัวจัดการแพ็กเกจนี้อนุญาตให้นักโปรแกรมเผยแพร่และแบ่งปันแพ็กเกจ Node.js พร้อมกับซอร์สโค้ดที่เกี่ยวข้อง และได้รับการออกแบบมาเพื่อลดความซับซ้อนในการติดตั้ง อัปเดต และถอนการติดตั้งแพ็กเกจ[ 17 ]

ในเดือนมิถุนายน พ.ศ. 2554 Microsoft และ Joyent ได้นำNode.js เวอร์ชันWindows ดั้งเดิมมาใช้ [ 19 ] Node.js เวอร์ชันแรกที่รองรับ Windows ได้รับการเผยแพร่ในเดือนกรกฎาคม พ.ศ. 2554

ในเดือนมกราคม พ.ศ. 2555 ดาห์ลยอมมอบการบริหารจัดการโครงการให้กับผู้สร้าง npm Isaac Schlueter ใน เดือนมกราคม 2014 Schlueter ประกาศว่า Timothy J. Fontaine จะเป็นผู้นำโครงการนี้[ 21 ]

ในเดือนธันวาคม 2014 Fedor Indutny ได้สร้าง io.js ซึ่งเป็นการแยกสาขาของ Node.js ขึ้นมาเนื่องจากไม่พอใจกับการกำกับดูแลของ Joyent โดยเป็น ทางเลือกใน การกำกับดูแลแบบเปิดที่มีคณะกรรมการทางเทคนิคแยกต่างหาก เป้าหมายคือการสร้างโครงสร้างที่เปิดรับความคิดเห็นจากชุมชนมากขึ้น รวมถึงการอัปเดต io.js ด้วยเอนจิ้น JavaScript Google V8 รุ่นล่าสุด ซึ่งแตกต่างจากแนวทางของ Node.js ในขณะนั้น[ 22 ]

มูลนิธิ Node.js ซึ่งก่อตั้งขึ้นเพื่อรวม Node.js และ io.js เข้าด้วยกันภายใต้ชื่อเดียวกัน ได้รับการประกาศในเดือนกุมภาพันธ์ 2015 [ 23 ]การควบรวมกิจการเกิดขึ้นในเดือนกันยายน 2015 โดย Node.js v0.12 และ io.js v3.3 รวมกันเป็น Node v4.0 [ 24 ]การควบรวมนี้ทำให้ Node.js มีคุณสมบัติ V8 ES6และเริ่มต้นวงจรการเผยแพร่ที่ได้รับการสนับสนุนในระยะยาว[ 25 ]ภายในปี 2016 เว็บไซต์ io.js แนะนำให้กลับไปใช้ Node.js และประกาศว่าจะไม่มีการเผยแพร่ io.js เพิ่มเติมอีกต่อไป ซึ่งเป็นการยุติการแยกสาขาและยืนยันความสำเร็จของการควบรวมกิจการ[ 26 ]

ในปี 2019 JS Foundation และ Node.js Foundation ได้รวมกันเพื่อก่อตั้งOpenJS Foundation

การสร้างแบรนด์

โลโก้ Node.js มีรูปหกเหลี่ยมสีเขียวที่มีแถบซ้อนทับกันเพื่อแสดงถึงลักษณะการทำงานข้ามแพลตฟอร์มของรันไทม์[ 27 ] Rocket Turtle ได้รับเลือกให้เป็นมาสคอตอย่างเป็นทางการของ Node.js ในเดือนกุมภาพันธ์ 2024 หลังจากการประกวดออกแบบ[ 28 ]

ภาพรวม

Node.js อนุญาตให้สร้างเว็บเซิร์ฟเวอร์และเครื่องมือเครือข่ายโดยใช้JavaScriptและชุด "โมดูล" ที่จัดการฟังก์ชันหลักต่างๆ[ 14 ] [ 17 ] [ 29 ] [ 30 ] [ 31 ]มีโมดูลสำหรับการรับส่งข้อมูลไฟล์ , เครือข่าย ( DNS , HTTP , TCP , TLS/SSLหรือUDP ), ข้อมูลไบนารี (บัฟเฟอร์), ฟังก์ชันการเข้ารหัส, สตรีมข้อมูลและฟังก์ชันหลักอื่นๆ[ 17 ] [ 30 ] [ 32 ]โมดูลของ Node.js ใช้ API ที่ออกแบบมาเพื่อลดความซับซ้อนของการเขียนแอปพลิเคชัน เซิร์ฟเวอร์ [ 17 ] [ 30 ]

ตั้งแต่เวอร์ชัน 22.6.0 เป็นต้นมา Node.js รองรับทั้งJavaScriptและTypeScript โดยธรรมชาติ ทำให้สามารถเรียกใช้ไฟล์ TypeScript ได้โดยไม่ต้องมีขั้นตอนการคอมไพล์แยกต่างหาก[ 33 ]การสนับสนุน TypeScript นี้ได้รับการสนับสนุนโดย Marco Ippolito สมาชิก TSC ของ Node.js นอกจากนี้ยังมีภาษาคอมไพล์เป็น JS มากมาย [ 34 ]ทำให้แอปพลิเคชัน Node.js สามารถเขียนด้วยCoffeeScript [ 35 ] Dart , ClojureScriptและอื่นๆ ได้อีกด้วย

Node.js ส่วนใหญ่ใช้ในการสร้างโปรแกรมเครือข่าย เช่น เว็บเซิร์ฟเวอร์[ 29 ]ความแตกต่างที่สำคัญที่สุดระหว่าง Node.js และPHPคือ ฟังก์ชันส่วนใหญ่ใน PHP จะบล็อกจนกว่าจะเสร็จสมบูรณ์ (คำสั่งจะทำงานก็ต่อเมื่อคำสั่งก่อนหน้าเสร็จสิ้นแล้วเท่านั้น) ในขณะที่ฟังก์ชันของ Node.js จะไม่บล็อก (คำสั่งจะทำงานพร้อมกันและใช้ฟังก์ชันเรียกกลับเพื่อส่งสัญญาณว่าเสร็จสมบูรณ์หรือล้มเหลว) [ 29 ]

Node.js is officially supported by Linux, macOS and Microsoft Windows 8.1 and Server 2012 (and later),[3] with Tier 2 support for SmartOS and IBM AIX and experimental support for FreeBSD. OpenBSD also works, and LTS versions are available for IBM i (AS/400).[36] The source code may also be built on similar operating systems that are not officially supported, such as NonStop OS[37] and Unix servers.

Platform architecture

Node.js enables development of fast web servers in JavaScript using event-driven programming.[17] Developers can create scalable servers without using threading by using a simplified model that uses callbacks to signal the completion of a task.[17] Node.js connects the ease of a scripting language (JavaScript) with the power of Unix network programming.[17]

Node.js was built on top of Google's V8 JavaScript engine since it was open-sourced under the BSD license, and it contains comprehensive support for fundamental protocols such as HTTP, DNS and TCP.[14] JavaScript's existing popularity made Node.js accessible to the web-development community.[14]

Industry support

There are thousands of open-source libraries for Node.js, most of which are hosted on the npm website. Multiple developer conferences and events are held that support the Node.js community, including NodeConf, Node Interactive, and Node Summit, as well as a number of regional events.

The open-source community has developed web frameworks to accelerate the development of applications. Such frameworks include Express.js, Socket.IO, Sails.js, Next.js and Meteor.[17][38] Various packages have also been created for interfacing with other languages or runtime environments such as Microsoft .NET.[39]

IDEบนเดสก์ท็อปสมัยใหม่มีคุณสมบัติการแก้ไขและการดีบักเฉพาะสำหรับแอปพลิเคชัน Node.js IDE ดังกล่าวได้แก่Atom , Brackets , JetBrains WebStorm [ 40 ] [ 41 ] Microsoft Visual Studio (พร้อม Node.js Tools for Visual Studio [ 42 ]หรือTypeScriptพร้อมคำจำกัดความ Node [ 43 ] [ 44 ] [ 45 ] [ 46 ] ), NetBeans [ 47 ] Nodeclipse IDE Studio [ 48 ] ( ใช้ Eclipseเป็นพื้นฐาน) และVisual Studio Code [ 49 ] [ 50 ] IDEออนไลน์บางตัวยังรองรับ Node.js เช่นCodeanywhere , Eclipse Che , Cloud9 IDEและตัวแก้ไขโฟลว์ภาพในNode- RED

Node.js รองรับการ ใช้ งานบนแพลตฟอร์มคลาวด์หลายแห่ง เช่นJelastic , Google Cloud Platform , AWS Elastic Beanstalk , Azure Web AppsและJoyent

การเผยแพร่

การออกเวอร์ชันหลักใหม่ของ Node.js จะถูกเผยแพร่จาก สาขาหลัก ของ GitHubทุก ๆ หกเดือน เวอร์ชันเลขคู่จะเผยแพร่ในเดือนเมษายน และเวอร์ชันเลขคี่จะเผยแพร่ในเดือนตุลาคม เมื่อมีการออกเวอร์ชันเลขคี่ใหม่ เวอร์ชันเลขคู่ก่อนหน้าจะเปลี่ยนสถานะเป็นLong Term Support (LTS) ซึ่งจะให้การสนับสนุนการใช้งานเป็นเวลา 12 เดือนนับจากวันที่กำหนดให้เป็น LTS หลังจาก 12 เดือนนี้หมดลง เวอร์ชัน LTS จะได้รับการสนับสนุนการบำรุงรักษาเพิ่มเติมอีก 18 เดือน เวอร์ชันที่ใช้งานอยู่จะได้รับการอัปเดตแบบ backport ที่ไม่ทำให้เกิดปัญหาหลังจากเวอร์ชันปัจจุบันเผยแพร่ไปแล้วไม่กี่สัปดาห์ เวอร์ชันบำรุงรักษาจะได้รับการแก้ไขที่สำคัญและการอัปเดตเอกสารเท่านั้น[ 51 ]กลุ่มทำงาน LTS จัดการกลยุทธ์และนโยบายโดยความร่วมมือกับคณะกรรมการกำกับดูแลด้านเทคนิคของมูลนิธิ Node.js

ปล่อย[ 52 ]สถานะ ชื่อรหัส วันที่วางจำหน่าย สิ้นสุดการบำรุงรักษา
ไม่รองรับ:0.10.x ไม่รองรับ:วาระสุดท้ายของชีวิต11 มีนาคม 2556 31 ตุลาคม 2559
ไม่รองรับ:0.12.xไม่รองรับ:วาระสุดท้ายของชีวิต2015-02-06 31 ธันวาคม 2016
ไม่รองรับ:4.xไม่รองรับ:วาระสุดท้ายของชีวิตอาร์กอน[ 51 ]8 กันยายน 2558 30 เมษายน 2561
ไม่รองรับ:5.xไม่รองรับ:วาระสุดท้ายของชีวิต29 ตุลาคม 2558 30 มิถุนายน 2559
ไม่รองรับ:6.xไม่รองรับ:วาระสุดท้ายของชีวิตโบรอน[ 51 ]26 เมษายน 2559 30 เมษายน 2562
ไม่รองรับ:7.xไม่รองรับ:วาระสุดท้ายของชีวิต25 ตุลาคม 2559 30 มิถุนายน 2560
ไม่รองรับ:8.xไม่รองรับ:วาระสุดท้ายของชีวิตคาร์บอน[ 51 ]30 พฤษภาคม 2560 31 ธันวาคม 2019
ไม่รองรับ:9.xไม่รองรับ:วาระสุดท้ายของชีวิต1 ตุลาคม 2560 30 มิถุนายน 2561
ไม่รองรับ:10.xไม่รองรับ:วาระสุดท้ายของชีวิตดับเนียม[ 51 ]24 เมษายน 2561 30 เมษายน 2564
ไม่รองรับ:11.xไม่รองรับ:วาระสุดท้ายของชีวิต23 ตุลาคม 2561 1 มิถุนายน 2019
ไม่รองรับ:12.xไม่รองรับ:วาระสุดท้ายของชีวิตเออร์เบียม[ 51 ]23 เมษายน 2562 30 เมษายน 2565
ไม่รองรับ:13.xไม่รองรับ:วาระสุดท้ายของชีวิต22 ตุลาคม 2019 1 มิถุนายน 2020
ไม่รองรับ:14.xไม่รองรับ:วาระสุดท้ายของชีวิตเฟอร์เมียม[ 51 ]21 เมษายน 2020 30 เมษายน 2566
ไม่รองรับ:15.xไม่รองรับ:วาระสุดท้ายของชีวิต2020-10-20 1 มิถุนายน 2021
ไม่รองรับ:16.xไม่รองรับ:วาระสุดท้ายของชีวิตแกลเลียม[ 51 ]2021-04-20 2023-09-11 [ 53 ]
ไม่รองรับ:17.xไม่รองรับ:วาระสุดท้ายของชีวิต19 ตุลาคม 2021 1 มิถุนายน 2022
ไม่รองรับ:18.xไม่รองรับ:วาระสุดท้ายของชีวิตไฮโดรเจน[ 51 ]19 เมษายน 2565 30 เมษายน 2568
ไม่รองรับ:19.xไม่รองรับ:วาระสุดท้ายของชีวิต18 ตุลาคม 2022 1 มิถุนายน 2023
ไม่รองรับ:20.xไม่รองรับ:วาระสุดท้ายของชีวิตเหล็ก[ 54 ]18 เมษายน 2566 30 เมษายน 2569
ไม่รองรับ:21.xไม่รองรับ:วาระสุดท้ายของชีวิต[ 51 ]17 ตุลาคม 2023 1 มิถุนายน 2024
รองรับ:22.xรองรับ:การบำรุงรักษา LTSโจด[ 54 ] [ 51 ]24 เมษายน 2567 30 เมษายน 2560
ไม่รองรับ:23.xไม่รองรับ:วาระสุดท้ายของชีวิต[ 51 ]15 ตุลาคม 2024 1 มิถุนายน 2025
เวอร์ชันล่าสุด:24.xเวอร์ชันล่าสุด:LTS ที่ใช้งานอยู่คริปตัน[ 54 ]22 เมษายน 2568 30 เมษายน 2561
เวอร์ชันตัวอย่าง:25.xเวอร์ชันตัวอย่าง:ปัจจุบัน2025-10-15 [ 55 ]1 มิถุนายน 2026
เวอร์ชันในอนาคต:26.xเวอร์ชันในอนาคต:วางแผนไว้ลิเธียม[ 54 ]2026 2029
เวอร์ชันในอนาคต:28.xเวอร์ชันในอนาคต:วางแผนไว้แมกนีเซียม[ 54 ]2027 2030
เวอร์ชันในอนาคต:30.xเวอร์ชันในอนาคต:วางแผนไว้นีออน[ 54 ]2028 2031
เวอร์ชันในอนาคต:32.xเวอร์ชันในอนาคต:วางแผนไว้ออกซิเจน[ 54 ]2029 2032
เวอร์ชันในอนาคต:34.xเวอร์ชันในอนาคต:วางแผนไว้แพลทินัม[ 54 ]2030 2033
ตำนาน:
ไม่ได้รับการสนับสนุน
ได้รับการสนับสนุน
เวอร์ชั่นล่าสุด
เวอร์ชันตัวอย่าง
เวอร์ชันในอนาคต

รายละเอียดทางเทคนิค

Node.js คือสภาพแวดล้อมการทำงานของ JavaScript ที่ประมวลผลคำขอที่เข้ามาในรูปแบบลูป ซึ่งเรียกว่าลูปเหตุการณ์ (event loop )

ภายใน

Node.js ใช้ไลบรารี libuvในการจัดการเหตุการณ์แบบอะซิงโครนัส libuv เป็นเลเยอร์นามธรรมสำหรับฟังก์ชันการทำงานของเครือข่ายและระบบไฟล์บนทั้งระบบ Windows และ ระบบที่ใช้ POSIXเช่น Linux, macOS , OSS บนNonStopและ Unix Node.js อาศัย nghttp2 สำหรับการสนับสนุน HTTP ตั้งแต่เวอร์ชัน 20 เป็นต้นไป Node.js ใช้ไลบรารี ada ซึ่งให้ ความสอดคล้องกับมาตรฐาน URL ของ WHATWG ที่ ทันสมัย ​​ตั้งแต่เวอร์ชัน 19.5 เป็นต้นไป Node.js ใช้ไลบรารี simdutf สำหรับการตรวจสอบและแปลงรหัส Unicode อย่างรวดเร็ว ตั้งแต่เวอร์ชัน 21.3 เป็นต้นไป Node.js ใช้ไลบรารี simdjson สำหรับการแยกวิเคราะห์ JSON อย่างรวดเร็ว

การร้อยด้าย

Node.js ทำงานบนลูปเหตุการณ์แบบเธรดเดียว โดยใช้ การเรียก I/O แบบไม่บล็อกทำให้สามารถรองรับการเชื่อมต่อพร้อมกันได้หลายหมื่นรายการโดยไม่ต้องเสียค่าใช้จ่ายในการสลับบริบทของเธรด[ 56 ]การออกแบบการใช้เธรดเดียวร่วมกันระหว่างคำขอทั้งหมดที่ใช้รูปแบบผู้สังเกตการณ์นั้นมีจุดประสงค์เพื่อสร้างแอปพลิเคชันที่มีการทำงานพร้อมกันสูง ซึ่งฟังก์ชันใดๆ ที่ทำการ I/O จะต้องใช้การเรียกกลับเพื่อรองรับลูปเหตุการณ์แบบเธรดเดียว Node.js ใช้ ไลบรารี libuvซึ่งในทางกลับกันจะใช้พูลเธรดขนาดคงที่ที่จัดการการดำเนินการ I/O แบบอะซิงโครนัสที่ไม่บล็อกบางส่วน[ 8 ]

ใน Node.js กลุ่มเธรด (Thread pool) ทำหน้าที่จัดการการทำงานของงานแบบขนาน ฟังก์ชันของเธรดหลักจะส่งงานไปยังคิวงานที่ใช้ร่วมกัน ซึ่งเธรดในกลุ่มเธรดจะดึงงานเหล่านั้นไปประมวลผล ฟังก์ชันระบบที่ไม่บล็อกโดยธรรมชาติ เช่น การเชื่อมต่อเครือข่าย จะถูกแปลงเป็นซ็อกเก็ตที่ไม่บล็อกฝั่งเคอร์เนล ในขณะที่ฟังก์ชันระบบที่บล็อกโดยธรรมชาติ เช่น การอ่าน/เขียนไฟล์ จะทำงานในลักษณะบล็อกบนเธรดของตัวเอง เมื่อเธรดในกลุ่มเธรดทำงานเสร็จสิ้น มันจะแจ้งให้เธรดหลักทราบ ซึ่งเธรดหลักจะตื่นขึ้นและเรียกใช้ฟังก์ชันเรียกกลับที่ลงทะเบียนไว้

ข้อเสียของวิธีการแบบเธรดเดียวนี้คือ Node.js ไม่อนุญาตให้ปรับขนาดในแนวตั้งโดยการเพิ่มจำนวนคอร์ CPUของเครื่องที่กำลังทำงานอยู่โดยไม่ต้องใช้โมดูลเพิ่มเติม เช่น cluster [ 57 ] StrongLoop Process Manager [ 58 ]หรือ pm2 [ 59 ]อย่างไรก็ตาม นักพัฒนาสามารถเพิ่มจำนวนเธรดเริ่มต้นในพูลเธรด libuv ได้ระบบปฏิบัติการเซิร์ฟเวอร์ (OS)มีแนวโน้มที่จะกระจายเธรดเหล่านี้ไปยังหลายคอร์[ 60 ]ปัญหาอีกประการหนึ่งคือการคำนวณที่ใช้เวลานานและงานอื่นๆ ที่ใช้ CPU มากจะทำให้ลูปเหตุการณ์ทั้งหมดหยุดทำงานจนกว่าจะเสร็จสมบูรณ์

วี8

V8 คือเอ็นจิ้นการประมวลผล JavaScript ซึ่งสร้างขึ้นครั้งแรกสำหรับGoogle Chromeจากนั้น Google ได้เปิดซอร์สโค้ดในปี 2008 V8 เขียนด้วยภาษาC++และคอมไพล์ซอร์สโค้ด JavaScript เป็นโค้ดเครื่องจักรแบบเนทีฟในขณะรันไทม์[ 8 ]ณ ปี 2016 ยังรวมถึง Ignition ซึ่งเป็นตัวแปลไบต์โค้ดด้วย

การจัดการพัสดุ

npmคือตัวจัดการแพ็กเกจที่ติดตั้งไว้ล่วงหน้าสำหรับแพลตฟอร์มเซิร์ฟเวอร์ Node.js โดยจะติดตั้งโปรแกรม Node.js จากรีจิสทรี npm และช่วยจัดการการติดตั้งและการควบคุมโปรแกรม Node.js จากผู้พัฒนาภายนอก

ลูปเหตุการณ์

Node.js ลงทะเบียนกับระบบปฏิบัติการเพื่อให้ระบบปฏิบัติการแจ้งให้ทราบถึง เหตุการณ์ I/O แบบอะซิงโครนัสเช่น การเชื่อมต่อใหม่ ภายในรันไทม์ของ Node.js เหตุการณ์จะเรียกใช้การเรียกกลับ และการเชื่อมต่อแต่ละครั้งจะได้รับการจัดการเป็นการจัดสรรฮีปขนาด เล็ก ตามธรรมเนียมแล้ว กระบวนการหรือเธรดของระบบปฏิบัติการที่มีขนาดค่อนข้างใหญ่จะจัดการการเชื่อมต่อแต่ละครั้ง Node.js ใช้ลูปเหตุการณ์สำหรับ I/O พร้อมกัน แทนที่จะใช้กระบวนการหรือเธรด[ 61 ]แตกต่างจากเซิร์ฟเวอร์ที่ขับเคลื่อนด้วยเหตุการณ์อื่นๆ ลูปเหตุการณ์ของ Node.js ไม่จำเป็นต้องถูกเรียกอย่างชัดเจน แต่จะมีการกำหนดการเรียกกลับ และเซิร์ฟเวอร์จะเข้าสู่ลูปเหตุการณ์โดยอัตโนมัติเมื่อสิ้นสุดการกำหนดการเรียกกลับ Node.js จะออกจากลูปเหตุการณ์เมื่อไม่มีการเรียกกลับเพิ่มเติมที่จะต้องดำเนินการ

เว็บแอสเซมบลี

Node.js รองรับWebAssemblyและตั้งแต่ Node 14 เป็นต้นไปได้มีการเพิ่มการรองรับWASI (WebAssembly System Interface) ในเชิงทดลอง

การเชื่อมต่อแบบเนทีฟ

Node.js มีวิธีการสร้าง "ส่วนเสริม" ผ่าน API ที่ใช้ภาษา Cเรียกว่า N-API ซึ่งสามารถใช้สร้าง.nodeโมดูลที่โหลดได้ (นำเข้าได้) จากซอร์สโค้ดที่เขียนด้วยภาษา C/C++ [ 62 ]โมดูลเหล่านี้สามารถโหลดลงในหน่วยความจำและเรียกใช้งานได้โดยตรงจากภายในสภาพแวดล้อม JS ในรูปแบบโมดูล CommonJS ง่ายๆ การใช้งาน N-API อาศัยอ็อบเจ็กต์ Node.js และ V8 ภายในที่เขียนด้วยภาษา C/C++ ซึ่งผู้ใช้ต้องนำเข้า ( #include ) เฮดเดอร์เฉพาะของ Node.js ลงในซอร์สโค้ดดั้งเดิมของตน[ 62 ]

เนื่องจาก API ของ Node.js อาจมีการเปลี่ยนแปลงที่ส่งผลกระทบต่อการทำงานในระดับไบนารี โมดูลจึงต้องถูกสร้างและเผยแพร่โดยคำนึงถึงเวอร์ชันของ Node.js ที่เฉพาะเจาะจงเพื่อให้ทำงานได้อย่างถูกต้อง เพื่อแก้ไขปัญหานี้ บุคคลที่สามได้นำเสนอไลบรารีโอเพนซอร์สที่เขียนด้วยภาษา C/C++ มาไว้บน API ซึ่งช่วยบรรเทาปัญหาได้บางส่วน ไลบรารีเหล่านี้ทำให้ส่วนต่อประสานง่ายขึ้น แต่ผลข้างเคียงก็คืออาจทำให้เกิดความซับซ้อนมากขึ้น ซึ่งผู้ดูแลระบบต้องรับมือ แม้ว่าฟังก์ชันหลักของ Node.js จะอยู่ในไลบรารีในตัวของ JavaScript แต่โมดูลที่เขียนด้วยภาษา C++ สามารถนำมาใช้เพื่อเพิ่มขีดความสามารถและปรับปรุงประสิทธิภาพของแอปพลิเคชันได้

ในการสร้างโมดูลดังกล่าว จำเป็นต้องมีคอมไพเลอร์ C++ ที่เหมาะสมและเฮดเดอร์ที่จำเป็น (โดยทั่วไปแล้วเฮดเดอร์เหล่านี้จะมาพร้อมกับ Node.js อยู่แล้ว) เช่นgcc , clangหรือMSVC ++

N-API มีลักษณะคล้ายกับJava Native Interface OpenHarmony และ ArkTS ก็ใช้ N-API เช่นกัน โดยมีการเขียนการใช้งานภายในใหม่[ 63 ]

การกำกับดูแลโครงการ

ในปี 2558 สาขาต่างๆ ของชุมชน Node.js ขนาดใหญ่ได้เริ่มทำงานภายใต้มูลนิธิ Node.js ที่เป็นกลางต่อผู้จำหน่าย วัตถุประสงค์ที่ระบุไว้ขององค์กรคือ "เพื่อส่งเสริมการนำไปใช้ในวงกว้างและช่วยเร่งการพัฒนา Node.js และโมดูลอื่นๆ ที่เกี่ยวข้องผ่านรูปแบบการกำกับดูแลแบบเปิดที่ส่งเสริมการมีส่วนร่วม การสนับสนุนทางเทคนิค และกรอบการทำงานสำหรับการดูแลระยะยาวโดยระบบนิเวศที่มุ่งมั่นในความสำเร็จของ Node.js" [ 64 ]

คณะกรรมการอำนวยการด้านเทคนิค (TSC) ของมูลนิธิ Node.js เป็นหน่วยงานกำกับดูแลด้านเทคนิคของมูลนิธิ Node.js TSC มีหน้าที่รับผิดชอบคลังเก็บโค้ดหลักของ Node.js รวมถึงโครงการที่เกี่ยวข้องและโครงการใกล้เคียง โดยทั่วไป TSC จะมอบหมายการบริหารจัดการโครงการเหล่านี้ให้กับกลุ่มทำงานหรือคณะกรรมการ[ 65 ]กลุ่ม LTS ที่จัดการการเผยแพร่ที่ได้รับการสนับสนุนในระยะยาวเป็นหนึ่งในกลุ่มดังกล่าว กลุ่มอื่นๆ ในปัจจุบัน ได้แก่ เว็บไซต์ สตรีม การสร้าง การวินิจฉัย i18n การเผยแพร่ Docker API ส่วนเสริม การวัดประสิทธิภาพ การวิเคราะห์หลังเกิดเหตุ ระหว่างประเทศ เอกสารประกอบ และการทดสอบ[ 66 ]

ในเดือนสิงหาคม พ.ศ. 2560 สมาชิก TSC หนึ่งในสามลาออกเนื่องจากข้อพิพาทที่เกี่ยวข้องกับจรรยาบรรณของโครงการ พวกเขาลาออกหลังจากมีการลงคะแนนไม่สำเร็จในการถอดถอนสมาชิกคนหนึ่งออกจากกลุ่มผู้นำซึ่งมีการร้องเรียนหลายครั้ง[ 67 ]

สมาชิก TSC ปัจจุบัน[ 68 ]
ชื่อผู้ใช้ชื่อเต็ม
aduh95อองตวน ดู ฮาเมล
อนริกยาจิซ นิซิปลี
เบนจามิงเกอร์เบนจามิน กรุนบอม
BridgeARรูเบน บริดจ์วอเตอร์
กิรีชปุนาธิลกีรีช ปูนาธิล
จัสเนลล์เจมส์ เอ็ม สเนลล์
จอยอีชองจอยอี จาง
ตำนานเฉิงจง วู
มาร์โค-อิปโปลิโตมาร์โค อิปโปลิโต
แมคคอลลิน่ามัตเตโอ คอลลินา
เอ็มดอว์สันไมเคิล ดอว์สัน
ราฟาเอลจีเอสเอสราฟาเอล กอนซากา
ริชาร์ดลอว์ริชาร์ด เลา
โรนาคโรเบิร์ต นากี้
รุยาดอร์โนรุย อดอร์โน
โชกุนแพนด้าเปาโล อินโซญญา
ทาร์กอสมิเชล ซัสโซ
ทนีสเซ่นโทเบียส นีสเซน

อ่านเพิ่มเติม

  • Hughes-Croucher, Tom; Wilson, Mike (เมษายน 2012), เริ่มต้นใช้งาน Node.js , O'Reilly Media , ISBN 978-1-4493-9858-3
  • ออร์นโบ, จอร์จ (กันยายน 2012), Sams Teach Yourself Node.js in 24 Hours , สำนักพิมพ์ SAMS , ISBN 978-0-672-33595-2
  • Teixeira, Pedro (ตุลาคม 2555), Professional Node.js , John Wiley & Sons , ISBN 978-1-118-22754-1
  • Randal L. Schwartzและ Aaron Newcomb (9 มกราคม 2013). "ตอนที่ 237: Node.js" . twit.tv/show/floss-weekly (พอดแคสต์). TWiT.tv . เหตุการณ์เกิดขึ้นที่เวลา 1:08:13 . สืบค้นเมื่อ9 มกราคม 2013 .
  • Gackenheimer, Cory (ตุลาคม 2013), Node.js Recipes: A Problem-Solution Approach , Apress , ISBN 978-1-4302-6058-5
  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Node.js&oldid=1360799001 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ โนด.เจ.

Node.js เป็น สภาพแวดล้อมรันไทม์ JavaScript แบบโอเพนซอร์ส ข้าม แพลตฟอร์ม ที่สามารถทำงานได้บน Windows , Linux , Unix , macOS และอื่นๆ Node.

ประวัติศาสตร์

Node.js ถูกเขียนขึ้นครั้งแรกโดย Ryan Dahl ในปี 2009 [ 11 ] ประมาณ 13 ปีหลังจากการเปิดตัวสภาพแวดล้อม JavaScript ฝั่งเซิร์ฟเวอร์ตัวแรก คือLiveWire Pro Web ของ Netscape [ 12 ] เวอร์ชันเริ่มต้นรองรับเฉพาะ Linux และ Mac OS X เท่านั้น การพัฒนาและการบำรุงรักษา ได้...

การสร้างแบรนด์

โลโก้ Node.js มีรูปหกเหลี่ยมสีเขียวที่มีแถบซ้อนทับกันเพื่อแสดงถึงลักษณะการทำงานข้ามแพลตฟอร์มของรันไทม์ [ 27 ] Rocket Turtle ได้รับเลือกให้เป็นมาสคอตอย่างเป็นทางการของ Node.js ในเดือนกุมภาพันธ์ 2024 หลังจากการประกวดออกแบบ [ 28 ]

ภาพรวม

Node.js อนุญาตให้สร้าง เว็บเซิร์ฟเวอร์ และเครื่องมือเครือข่ายโดยใช้ JavaScript และชุด "โมดูล" ที่จัดการฟังก์ชันหลักต่างๆ [ 14 ] [ 17 ] [ 29 ] [ 30 ] [ 31 ] มีโมดูลสำหรับ การรับส่งข้อมูลไฟล์ , เครือข่าย ( DNS , HTTP , TCP , TLS/SSL หรือ UDP ), ข้อมูล ไบนารี...