fbpx
维基百科

Node.js

Node.js 是能夠在伺服器端運行 JavaScript開放原始碼跨平台執行環境。Node.js 由 OpenJS Foundation[4] (原為 Node.js Foundation,已与 JS Foundation 合并)持有和維護[5],亦为 Linux 基金會的项目[6]。Node.js 採用 Google 開發的 V8 執行程式碼,使用事件驅動、非阻塞和非同步輸入輸出模型等技術來提高效能,可優化應用程式的傳輸量和規模。這些技術通常用於資料密集的即時應用程式。

Node.js
原作者瑞安·達爾
開發者OpenJS Foundation英语OpenJS Foundation
首次发布2009年5月28日,​13年前​(2009-05-28[1]
目前版本
  • 19.4.0 (2023年1月6日)[2]
源代码库
  • github.com/nodejs/node
编程语言CC++JavaScript
操作系统macOS, Linux, Windows, FreeBSD, OpenBSD[3]
类型事件驅動網路
许可协议
网站nodejs.org 

Node.js 大部分基本模組都用 JavaScript 語言編寫。在 Node.js 出現之前,JavaScript 通常作為用戶端程式設計語言使用,以JavaScript 寫出的程式常在用戶的瀏覽器上執行。Node.js 的出現使 JavaScript 也能用於伺服器端編程。Node.js 含有一系列內置模組,使得程式可以脫離 Apache HTTP ServerIIS,作為獨立伺服器執行。

目前,Node.js 已被IBM[7]Microsoft[8][9]Yahoo![10]Walmart[11]Groupon[12]SAP[13]LinkedIn[14][15]RakutenPayPal[16][17]、Voxer[18]GoDaddy[19]等企業採用。

概覽

Node.js可透過JavaScript和一系列模块来编写服务器端应用和网络相关的应用。[20][21][22]核心模組包括文件系统I/O、网络(HTTPTCPUDPDNSTLS/SSL等)、二进制数据流、加密算法、数据流等等。[21][23]Node模块的API形式简单,降低了编程的复杂度。[21]

使用框架可以加速开发。常用的框架有Express.jsSocket.IO和Connect等。[24]Node.js的程序可以在Microsoft WindowsLinuxUnixMac OS X等服务器上运行。Node.js也可以使用CoffeeScript(一种旨在简化JavaScript的替代语言,其代码可按照一定规则转化为合法的JavaScript代码)、TypeScript(微软开发的强化了数据类型的JavaScript变体)、Dart语言,以及其他能够编译成JavaScript的语言编程。[25][25]

Node.js主要用于编写像Web服务器一样的网络应用,这和PHPPython是类似的。[20]但是Node.js与其他语言最大的不同之处在于,PHP等语言是阻塞的(只有前一条命令执行完毕才会执行后面的命令),而Node.js是非阻塞的(多条命令可以同时被运行,通过回调函数得知命令已结束运行)。[20]

Node.js是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽如人意。Node.js正是在这个前提下被创造出来。Node.js把JavaScript的易学易用和Unix網路编程的强大结合起來。

Node.js使用Google V8 JavaScript引擎,因为:

  • V8是基于BSD许可证的开源软件
  • V8速度非常快
  • V8专注于网络功能,在HTTP、DNS、TCP等方面更加成熟

Node.js已经有数十万模組,它们可以透过一个名为npm的管理器免费下载。Node.js开发社区主要有两个邮件列表、一个在freenode的名为#node.js的IRC频道。社区集中在NodeConf[26][27]

歷史

 
Node.js的创始人瑞安·達爾,摄于2010年

Node.js于2009年写成,原始作者是美國軟體工程師瑞安·達爾Ryan Dahl[28]。Node.js结合了GoogleV8、事件驱动模式和低级I/O接口[29],其设计灵感源自Flickr的一款上传进度栏:在上传过程中,浏览器并不清楚有多少文件已经发送到服务器,除非向服务器进行查询,于是达尔想出了一个更简便的方法[30]。Node.js的开发和维护工作由达尔本人主持,而他所在的Joyent公司也提供了赞助[31]。2009年11月8日,達爾在欧洲JSConf大会上展示了Node.js项目[32][33][34],并受到了观众赞赏[35]。在演讲中,达尔针对Apache HTTP Server和顺序编程方式提出了批评,认为Apache处理大量并发连接(10,000甚至更多)的可能性有限,而且顺序编程方式在多连接情况下会造成阻塞,或者消耗更多资源;而Node.js提供了基于事件驱动和非阻塞的接口,可用于编写高并发状态下的程序,而且JavaScript的匿名函数、闭包、回调函数等特性就是为事件驱动而设计的[36]

2010年1月,一款名为“npm”的软件包管理系统诞生[37]。npm使程序员能够更方便地发布和分享Node.js类库及源代码,而且简化了类库安装、升级与卸载的过程[29]。Node.js最初只支持Linux和Mac OS X操作系统。2011年6月,微软和Joyent共同合作,把Node.js移植到了Windows系统上面[38],并且在7月发布了第一个正式支持Windows系统的版本。

2012年1月,达尔离开了Node.js项目,开发工作由他的同事以及npm创始人艾薩克·施呂特(Isaac Schlueter)继续主持[39]。2014年2月,蒂莫西·费里斯(Timothy J. Fontaine)接任项目主管[40]

由于长期对Joyent的管理感到不满,Node.js核心开发者Fedor Indutny在2014年12月制作了分支版本,并起名“io.js”。与Node.js相对的是,io.js采用开放管理模式进行管理[41][42],并计划始终采用最新版的V8引擎[43][44]。为了在用户、厂商和开发者之间取得平衡,Node.js基金会于2015年初成立。基金会得到了IBM、Intel、微软、Joyent等公司的支持。6月,Node.js和io.js开发者社区共同决定合并到Node.js基金会之下[45]。同年9月,Node 4.0发布,Node.js和io.js正式合并[46]。4.0版引入了ES6的语言特性和“长期支持版本”的发布周期[46]。到了2016年,io.js宣布不再发布新版本,并建议开发者换回Node.js[47]

程式範例

用Node.js撰寫的HTTP Serverhello world範例:

const http = require('http'); http.createServer((request, response) => { response.writeHead(200, { 'Content-Type': 'text/plain' }); response.end('Hello World!'); }).listen(8000); console.log('Server running at http://127.0.0.1:8000/'); 

另一個簡單的TCP伺服器範例,監聽(Listening)端口7000並輸出(echo)之前輸入的訊息:

const net = require('net'); net.createServer(stream => { stream.write('hello\r\n'); stream.on('end', () => stream.end('goodbye\r\n')); stream.pipe(stream); }).listen(7000); 

技術

執行緒

Node.js以單執行緒執行,使用非阻塞I/O呼叫,這樣既可以支援數以萬計的並行連線,又不會因多執行緒本身的特點而帶來麻煩。眾多請求只使用單執行緒的設計意味著可以用於建立高並行應用程式。Node.js應用程式的設計目標是任何需要操作I/O的函式都使用回呼函式

這種設計的缺點是,如果不使用cluster[48]、StrongLoop Process Manager[49]或pm2[50]等模組,Node.js就難以處理多核或多執行緒等情況。

V8

V8是为Google Chrome设计的JavaScript运行引擎,Google于2008年将其开源。V8用C++写成,它将JavaScript源代码编译成本地机器码而不是解释执行。

Node.js用libuv来处理异步事件,而V8提供了JavaScript的实时运行环境。libuv是一个网络和文件系统功能的抽象层,既可以用于Windows又可以用于符合POSIX标准的系统,例如Linux、OS X和Unix。

Node.js的核心功能被包含进一个JavaScript库,并通过C++将各部分与操作系统进行联系。

npm

npm是Node.js附带的包管理器。npm是一个命令行工具,用于从NPM Registry中下载、安装Node.js程序,同时解决依赖问题。npm提高了开发的速度,因为它能够负责第三方Node.js程序的安装与管理。

统一API

Node.js将浏览器、数据(例如MongoDBCouchDB)等组合到一起,通过JSON提供一个统一的接口。由于前端框架和一些基本的后端开发技术(如MVC、MVP、MVVM等)变得流行,Node.js也支持客户端和服务器端重新利用相同的模型和接口。

事件循环

Node.js将其注册到操作系统中,这样可以及时注意到新连接的产生。当新连接产生时,操作系统会产生一个回调。在Node.js运行时内部,每个连接都被分配一个小型的堆。与其他服务器程序不同的是,Node.js不使用进程或线程处理连接,而是采用事件循环来处理并发连接。[51]而且Node.js的事件循环不需要手动调用。在回调函数定义之后,服务器进入事件循环。当回调函数均被执行完毕之后,Node.js结束事件循环。

开发工具

桌面IDE
在线编辑器
运行时和调试器
框架

替代品

JXcore

JXcore是一个开放源代码的Node.js的分支,旨在支持移动设备和物联网。第一个Beta版本于2014年1月发布。它于2015年2月13日开源[69]并且可从GitHub仓库[70]获得。JXcore同时使用Google V8Mozilla SpiderMonkey两个引擎。因此JXcore可以通过Mozilla SpiderMonkey在iOS设备上运行Node应用程序。

其他语言

类似的语言和开发环境有:

参见

  • Rhino (JavaScript引擎)
  • npm:广泛使用的Node.js安装包管理器
  • MEAN
  • JSAN(JavaScript Archive Network),一个不太常用的JavaScript安装包管理器

参考文献

  1. ^ Ry Dahl. Release v0.0.1 · nodejs/node. GitHub. 28 May 2009 [2019-12-24]. (原始内容于2020-04-09) (英语). First! 
  2. ^ Release 19.4.0. 2023年1月6日 [2023年1月13日]. 
  3. ^ nodejs/node. GitHub. [2019-04-09]. (原始内容于2019-04-22). 
  4. ^ The Linux Foundation. Node.js Foundation and JS Foundation Merge to Form OpenJS Foundation. Linux Foundation. The Linux Foundation. March 12, 2019 [2019-12-24]. (原始内容于2020-08-03) (英语). OPEN SOURCE LEADERSHIP SUMMIT, Half Moon Bay, Calif. — March 12, 2019 — The Node.js Foundation and the JS Foundation today announced they are merging to form the OpenJS Foundation. 
    Node.js. Introducing the OpenJS Foundation: The Next Phase of JavaScript Ecosystem Growth. Medium. Mar 13, 2019 [2019-12-24]. (原始内容于2019-12-06) (英语). the Node.js Foundation and the JS Foundation are merging to form the OpenJS Foundation. 
  5. ^ . Node.js. [4 July 2015]. (原始内容存档于2015-07-05) (英语). 
  6. ^ . Linux Foundation. [4 July 2015]. (原始内容存档于2016-03-07) (英语). 
    Open Source Projects. Linux 基金会. [2019-12-24]. (原始内容于2019-12-23) (中文(中国大陆)). 
  7. ^ IBM Bluemix. [4 July 2015]. (原始内容于2019-10-18). 
  8. ^ Here's why you should be happy that Microsoft is embracing Node.js. The Guardian. November 9, 2011 [May 10, 2012]. (原始内容于2013-07-25). 
  9. ^ . [2 August 2014]. (原始内容存档于2015-08-03). 
  10. ^ Yahoo! Announces Cocktails Shaken, Not Stirred. [7 April 2015]. (原始内容存档于2015年4月8日). 
  11. ^ Why Walmart is using Node.js. VentureBeat. January 24, 2012 [May 10, 2012]. (原始内容于2015-08-29). 
  12. ^ Geitgey, Adam. . Groupon. 30 October 2013 [30 April 2014]. (原始内容存档于2015-09-10). 
  13. ^ SAP AppBuilder. SAP. March 10, 2014 [March 10, 2014]. (原始内容于2015-08-17). 
  14. ^ You'll never believe how LinkedIn built its new iPad app. VentureBeat. May 2, 2012 [May 10, 2012]. (原始内容于2015-08-12). 
  15. ^ . [7 April 2015]. (原始内容存档于2015-09-10). 
  16. ^ Clash of the Titans: Releasing the Kraken, NodeJS @paypal. fluentconf.com. May 28, 2013 [September 11, 2013]. (原始内容于2015-07-25). 
  17. ^ All such companies and their products in which Node.js is used. [2 August 2014]. (原始内容于2015-08-10). 
  18. ^ The Node Ahead: JavaScript leaps from browser into future (页面存档备份,存于互联网档案馆), The Register, March 1, 2011
  19. ^ Why GoDaddy’s Nodejitsu deal is great for Node.js (页面存档备份,存于互联网档案馆) , VentureBeat, February 10, 2015
  20. ^ 20.0 20.1 20.2 Node.js for PHP Developers (页面存档备份,存于互联网档案馆) , O'Reilly Media, Inc., 2013
  21. ^ 21.0 21.1 21.2 Node.js Essentials (页面存档备份,存于互联网档案馆) , Packt Publishing, 09-Sep-2014
  22. ^ Smashing Node.js: JavaScript Everywhere (页面存档备份,存于互联网档案馆) , John Wiley & Sons, 14-Aug-2012
  23. ^ Modules (页面存档备份,存于互联网档案馆) }, Nodejs Website
  24. ^ Azat Mardan. Express.js Guide: The Comprehensive Book on Express.js. Azat Mardan, 2014. 2014-05-28 [2015-08-14]. (原始内容于2015-07-13). 
  25. ^ 25.0 25.1 CoffeeScript on Node.js. O'Reilly Media, Inc. April 15, 2013 [May 17, 2015]. (原始内容于2015-07-02). 
  26. ^ NodeConf (页面存档备份,存于互联网档案馆
  27. ^ Finley, Klint. . ReadWriteHack. April 7, 2011 [2 August 2014]. (原始内容存档于2012年9月17日). 
  28. ^ . Training.com. Training.com. [23 October 2016]. (原始内容存档于2017-04-01). 
  29. ^ 29.0 29.1 Professional Node.js: Building JavaScript Based Scalable Software (页面存档备份,存于互联网档案馆) , John Wiley & Sons, 01-Oct-2012
  30. ^ Harris, Amber. . Devops Angle. April 1, 2012 [26 October 2013]. (原始内容存档于2014-10-18). 
  31. ^ Ryan Dahl. Joyent and Node. Google Groups. 2010-11-09 [2015-02-05]. (原始内容存档于2011-01-22). 
  32. ^ Sams Teach Yourself Node.js in 24 Hours (页面存档备份,存于互联网档案馆) , Sams Publishing, 05-Sep-2012
  33. ^ . [2017-05-04]. (原始内容存档于2017-05-14). 
  34. ^ Ryan Dahl at JSConf EU 2009 Video. [2017-05-04]. (原始内容于2017-05-15). 
  35. ^ Video: Node.js by Ryan Dahl. [2017-05-04]. (原始内容于2017-05-11). 
  36. ^ . [21 December 2016]. (原始内容存档于2017-02-23). 
  37. ^ Earliest releases of npm. GitHub. [27 July 2016]. (原始内容于2017-03-01). 
  38. ^ . [17 April 2016]. (原始内容存档于2017-07-14). 
  39. ^ Dahl, Ryan. New gatekeeper. [26 October 2013]. (原始内容存档于2011-01-22). 
  40. ^ Schlueter, Isaac. . January 15, 2014 [21 January 2014]. (原始内容存档于2017-07-14). 
  41. ^ Krill, Paul. . JavaWorld. Dec 4, 2014 [Dec 15, 2014]. (原始内容存档于2017-06-30). 
  42. ^ Q&A: Why io.js decided to fork Node.js (页面存档备份,存于互联网档案馆) , Infoworld Tech Watch
  43. ^ Ben Noordhuis. Issue 3692: function suddenly becomes. V8 JavaScript Engine Issues. Nov 12, 2014 [2 February 2015]. (原始内容于2015-11-01). 
  44. ^ Mikeal, Rogers. State of io.js. January 28, 2015 [2 February 2015]. (原始内容于2015-08-30). 
  45. ^ . [4 July 2015]. (原始内容存档于2015年6月24日). 
  46. ^ 46.0 46.1 . [28 Jan 2016]. (原始内容存档于2017-01-07). 
  47. ^ Io.js, JavaScript I/O (页面存档备份,存于互联网档案馆) , "io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above."
  48. ^ cluster (页面存档备份,存于互联网档案馆
  49. ^ StrongLoop Process Manager (页面存档备份,存于互联网档案馆
  50. ^ pm2 (页面存档备份,存于互联网档案馆
  51. ^ About Node.js (页面存档备份,存于互联网档案馆) , Node.js Website
  52. ^ Node.js Tools for Visual Studio. Codeplex. [2 August 2014]. (原始内容于2018-01-16). 
  53. ^ Bergius: Flowhub and the GNOME Developer Experience. LWN.net. 2014-05-02 [2014-05-24]. (原始内容于2018-12-26). 
  54. ^ Codiad (页面存档备份,存于互联网档案馆
  55. ^ Koa.js(页面存档备份,存于互联网档案馆
  56. ^ Hapi.js(页面存档备份,存于互联网档案馆
  57. ^ Node.js Framework Comparison: Express vs. Koa vs. Hapi (页面存档备份,存于互联网档案馆), AirPair
  58. ^ Peter Wayner. 13 fabulous frameworks for Node.js. InfoWorld. 21 May 2014 [4 July 2015]. (原始内容于2015-08-09). 
  59. ^ Meteor(页面存档备份,存于互联网档案馆
  60. ^ Derby(页面存档备份,存于互联网档案馆
  61. ^
  62. ^
  63. ^ MeanJS(页面存档备份,存于互联网档案馆
  64. ^ Tower.js(页面存档备份,存于互联网档案馆
  65. ^
  66. ^
  67. ^ Compound(页面存档备份,存于互联网档案馆
  68. ^
  69. ^ Serdar Yegulalp. Node.js fork JXcore goes open source, aims for mobile developers. InfoWorld. 20 February 2015 [4 July 2015]. (原始内容于2015-08-13). 
  70. ^ repository(页面存档备份,存于互联网档案馆
  71. ^ Luvit(页面存档备份,存于互联网档案馆

外部連結


node, 是能夠在伺服器端運行, javascript, 的開放原始碼, 跨平台執行環境, openjs, foundation, 原為, foundation, 已与, foundation, 合并, 持有和維護, 亦为, linux, 基金會的项目, 採用, google, 開發的, 執行程式碼, 使用事件驅動, 非阻塞和非同步輸入輸出模型等技術來提高效能, 可優化應用程式的傳輸量和規模, 這些技術通常用於資料密集的即時應用程式, 原作者瑞安, 達爾開發者openjs, foundation, 英语, ope. Node js 是能夠在伺服器端運行 JavaScript 的開放原始碼 跨平台執行環境 Node js 由 OpenJS Foundation 4 原為 Node js Foundation 已与 JS Foundation 合并 持有和維護 5 亦为 Linux 基金會的项目 6 Node js 採用 Google 開發的 V8 執行程式碼 使用事件驅動 非阻塞和非同步輸入輸出模型等技術來提高效能 可優化應用程式的傳輸量和規模 這些技術通常用於資料密集的即時應用程式 Node js原作者瑞安 達爾開發者OpenJS Foundation 英语 OpenJS Foundation 首次发布2009年5月28日 13年前 2009 05 28 1 目前版本19 4 0 2023年1月6日 2 源代码库github wbr com wbr nodejs wbr node编程语言C C JavaScript操作系统macOS Linux Windows FreeBSD OpenBSD 3 类型事件驅動網路许可协议MIT許可證网站nodejs wbr org Node js 大部分基本模組都用 JavaScript 語言編寫 在 Node js 出現之前 JavaScript 通常作為用戶端程式設計語言使用 以JavaScript 寫出的程式常在用戶的瀏覽器上執行 Node js 的出現使 JavaScript 也能用於伺服器端編程 Node js 含有一系列內置模組 使得程式可以脫離 Apache HTTP Server 或 IIS 作為獨立伺服器執行 目前 Node js 已被IBM 7 Microsoft 8 9 Yahoo 10 Walmart 11 Groupon 12 SAP 13 LinkedIn 14 15 Rakuten PayPal 16 17 Voxer 18 GoDaddy 19 等企業採用 目录 1 概覽 2 歷史 3 程式範例 4 技術 4 1 執行緒 4 2 V8 4 3 npm 4 4 统一API 4 5 事件循环 5 开发工具 6 替代品 6 1 JXcore 6 2 其他语言 7 参见 8 参考文献 9 外部連結概覽 编辑Node js可透過JavaScript和一系列模块来编写服务器端应用和网络相关的应用 20 21 22 核心模組包括文件系统I O 网络 HTTP TCP UDP DNS TLS SSL等 二进制数据流 加密算法 数据流等等 21 23 Node模块的API形式简单 降低了编程的复杂度 21 使用框架可以加速开发 常用的框架有Express js Socket IO和Connect等 24 Node js的程序可以在Microsoft Windows Linux Unix Mac OS X等服务器上运行 Node js也可以使用CoffeeScript 一种旨在简化JavaScript的替代语言 其代码可按照一定规则转化为合法的JavaScript代码 TypeScript 微软开发的强化了数据类型的JavaScript变体 Dart语言 以及其他能够编译成JavaScript的语言编程 25 25 Node js主要用于编写像Web服务器一样的网络应用 这和PHP和Python是类似的 20 但是Node js与其他语言最大的不同之处在于 PHP等语言是阻塞的 只有前一条命令执行完毕才会执行后面的命令 而Node js是非阻塞的 多条命令可以同时被运行 通过回调函数得知命令已结束运行 20 Node js是事件驱动的 开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器 其他服务器端语言难以开发高并发应用 而且即使开发出来 性能也不尽如人意 Node js正是在这个前提下被创造出来 Node js把JavaScript的易学易用和Unix網路编程的强大结合起來 Node js使用Google V8 JavaScript引擎 因为 V8是基于BSD许可证的开源软件 V8速度非常快 V8专注于网络功能 在HTTP DNS TCP等方面更加成熟Node js已经有数十万模組 它们可以透过一个名为npm的管理器免费下载 Node js开发社区主要有两个邮件列表 一个在freenode的名为 node js的IRC频道 社区集中在NodeConf 26 27 歷史 编辑 Node js的创始人瑞安 達爾 摄于2010年 Node js于2009年写成 原始作者是美國軟體工程師瑞安 達爾 Ryan Dahl 28 Node js结合了Google的V8 事件驱动模式和低级I O接口 29 其设计灵感源自Flickr的一款上传进度栏 在上传过程中 浏览器并不清楚有多少文件已经发送到服务器 除非向服务器进行查询 于是达尔想出了一个更简便的方法 30 Node js的开发和维护工作由达尔本人主持 而他所在的Joyent公司也提供了赞助 31 2009年11月8日 達爾在欧洲JSConf大会上展示了Node js项目 32 33 34 并受到了观众赞赏 35 在演讲中 达尔针对Apache HTTP Server和顺序编程方式提出了批评 认为Apache处理大量并发连接 10 000甚至更多 的可能性有限 而且顺序编程方式在多连接情况下会造成阻塞 或者消耗更多资源 而Node js提供了基于事件驱动和非阻塞的接口 可用于编写高并发状态下的程序 而且JavaScript的匿名函数 闭包 回调函数等特性就是为事件驱动而设计的 36 2010年1月 一款名为 npm 的软件包管理系统诞生 37 npm使程序员能够更方便地发布和分享Node js类库及源代码 而且简化了类库安装 升级与卸载的过程 29 Node js最初只支持Linux和Mac OS X操作系统 2011年6月 微软和Joyent共同合作 把Node js移植到了Windows系统上面 38 并且在7月发布了第一个正式支持Windows系统的版本 2012年1月 达尔离开了Node js项目 开发工作由他的同事以及npm创始人艾薩克 施呂特 Isaac Schlueter 继续主持 39 2014年2月 蒂莫西 费里斯 Timothy J Fontaine 接任项目主管 40 由于长期对Joyent的管理感到不满 Node js核心开发者Fedor Indutny在2014年12月制作了分支版本 并起名 io js 与Node js相对的是 io js采用开放管理模式进行管理 41 42 并计划始终采用最新版的V8引擎 43 44 为了在用户 厂商和开发者之间取得平衡 Node js基金会于2015年初成立 基金会得到了IBM Intel 微软 Joyent等公司的支持 6月 Node js和io js开发者社区共同决定合并到Node js基金会之下 45 同年9月 Node 4 0发布 Node js和io js正式合并 46 4 0版引入了ES6的语言特性和 长期支持版本 的发布周期 46 到了2016年 io js宣布不再发布新版本 并建议开发者换回Node js 47 程式範例 编辑用Node js撰寫的HTTP Server版hello world範例 const http require http http createServer request response gt response writeHead 200 Content Type text plain response end Hello World listen 8000 console log Server running at http 127 0 0 1 8000 另一個簡單的TCP伺服器範例 監聽 Listening 端口7000並輸出 echo 之前輸入的訊息 const net require net net createServer stream gt stream write hello r n stream on end gt stream end goodbye r n stream pipe stream listen 7000 技術 编辑執行緒 编辑 Node js以單執行緒執行 使用非阻塞I O呼叫 這樣既可以支援數以萬計的並行連線 又不會因多執行緒本身的特點而帶來麻煩 眾多請求只使用單執行緒的設計意味著可以用於建立高並行應用程式 Node js應用程式的設計目標是任何需要操作I O的函式都使用回呼函式 這種設計的缺點是 如果不使用cluster 48 StrongLoop Process Manager 49 或pm2 50 等模組 Node js就難以處理多核或多執行緒等情況 V8 编辑 主条目 V8 JavaScript引擎 V8是为Google Chrome设计的JavaScript运行引擎 Google于2008年将其开源 V8用C 写成 它将JavaScript源代码编译成本地机器码而不是解释执行 Node js用libuv来处理异步事件 而V8提供了JavaScript的实时运行环境 libuv是一个网络和文件系统功能的抽象层 既可以用于Windows又可以用于符合POSIX标准的系统 例如Linux OS X和Unix Node js的核心功能被包含进一个JavaScript库 并通过C 将各部分与操作系统进行联系 npm 编辑 主条目 node包管理器 npm是Node js附带的包管理器 npm是一个命令行工具 用于从NPM Registry中下载 安装Node js程序 同时解决依赖问题 npm提高了开发的速度 因为它能够负责第三方Node js程序的安装与管理 统一API 编辑 Node js将浏览器 数据 例如MongoDB或CouchDB 等组合到一起 通过JSON提供一个统一的接口 由于前端框架和一些基本的后端开发技术 如MVC MVP MVVM等 变得流行 Node js也支持客户端和服务器端重新利用相同的模型和接口 事件循环 编辑 Node js将其注册到操作系统中 这样可以及时注意到新连接的产生 当新连接产生时 操作系统会产生一个回调 在Node js运行时内部 每个连接都被分配一个小型的堆 与其他服务器程序不同的是 Node js不使用进程或线程处理连接 而是采用事件循环来处理并发连接 51 而且Node js的事件循环不需要手动调用 在回调函数定义之后 服务器进入事件循环 当回调函数均被执行完毕之后 Node js结束事件循环 开发工具 编辑桌面IDEAtom 免费 开源软件 Brackets 免费 开源软件 Sublime Text 商业软件 JetBrains IntelliJ IDEA 商业软件 JetBrains WebStorm 商业软件 Microsoft Visual Studio with Node js Tools for Visual Studio 52 商业软件 Microsoft Visual Studio with TypeScript 商业软件 Nodeclipse Enide Studio 免费 开源软件 在Eclipse基础上开发 NoFlo 与GNOME API集成的流式开发环境 53 Visual Studio Code 免费 开源软件 在线编辑器Koding Codenvy IDE Cloud9 IDE Codiad 54 运行时和调试器Microsoft Visual Studio 商业 with Node js Tools for Visual Studio 免费 Microsoft WebMatrix 免费 闭源软件 Visual Studio Code框架服务器端框架 Express js Socket IO Koa js 55 Hapi js 56 Total js 57 58 MVC框架 Meteor 59 Derby 60 Sails 61 Mean 62 MeanJS 63 Tower js 64 Nombo 65 Geddy 66 Compound 67 Yahoo Mojito 68 替代品 编辑JXcore 编辑 维基共享资源中相关的多媒体资源 Node jsJXcore是一个开放源代码的Node js的分支 旨在支持移动设备和物联网 第一个Beta版本于2014年1月发布 它于2015年2月13日开源 69 并且可从GitHub仓库 70 获得 JXcore同时使用Google V8和Mozilla SpiderMonkey两个引擎 因此JXcore可以通过Mozilla SpiderMonkey在iOS设备上运行Node应用程序 其他语言 编辑 类似的语言和开发环境有 Python Tornado和Twisted Perl Perl Object Environment C语言 libevent Java JavaScript Groovy Python Scala Clojure Ruby Ceylon等 Vert x Java和Scala Akka Ruby EventMachine D语言 vibe d Lua Luvit 71 OCaml Ocsigen参见 编辑 自由软件主题 Rhino JavaScript引擎 npm 广泛使用的Node js安装包管理器 MEAN JSAN JavaScript Archive Network 一个不太常用的JavaScript安装包管理器参考文献 编辑 Ry Dahl Release v0 0 1 nodejs node GitHub 28 May 2009 2019 12 24 原始内容存档于2020 04 09 英语 First Release 19 4 0 2023年1月6日 2023年1月13日 nodejs node GitHub 2019 04 09 原始内容存档于2019 04 22 The Linux Foundation Node js Foundation and JS Foundation Merge to Form OpenJS Foundation Linux Foundation The Linux Foundation March 12 2019 2019 12 24 原始内容存档于2020 08 03 英语 OPEN SOURCE LEADERSHIP SUMMIT Half Moon Bay Calif March 12 2019 The Node js Foundation and the JS Foundation today announced they are merging to form the OpenJS Foundation Node js Introducing the OpenJS Foundation The Next Phase of JavaScript Ecosystem Growth Medium Mar 13 2019 2019 12 24 原始内容存档于2019 12 06 英语 the Node js Foundation and the JS Foundation are merging to form the OpenJS Foundation Node js Foundation Node js 4 July 2015 原始内容存档于2015 07 05 英语 Linux Foundation Collaborative Projects Linux Foundation 4 July 2015 原始内容存档于2016 03 07 英语 Open Source Projects Linux 基金会 2019 12 24 原始内容存档于2019 12 23 中文 中国大陆 IBM Bluemix 4 July 2015 原始内容存档于2019 10 18 Here s why you should be happy that Microsoft is embracing Node js The Guardian November 9 2011 May 10 2012 原始内容存档于2013 07 25 WebMatrix Front End Web Developers take note ASP NET PHP node js and more 2 August 2014 原始内容存档于2015 08 03 Yahoo Announces Cocktails Shaken Not Stirred 7 April 2015 原始内容存档于2015年4月8日 Why Walmart is using Node js VentureBeat January 24 2012 May 10 2012 原始内容存档于2015 08 29 Geitgey Adam I Tier Dismantling the Monoliths Groupon 30 October 2013 30 April 2014 原始内容存档于2015 09 10 SAP AppBuilder SAP March 10 2014 March 10 2014 原始内容存档于2015 08 17 You ll never believe how LinkedIn built its new iPad app VentureBeat May 2 2012 May 10 2012 原始内容存档于2015 08 12 Blazing fast node js 10 performance tips from LinkedIn Mobile 7 April 2015 原始内容存档于2015 09 10 Clash of the Titans Releasing the Kraken NodeJS paypal fluentconf com May 28 2013 September 11 2013 原始内容存档于2015 07 25 All such companies and their products in which Node js is used 2 August 2014 原始内容存档于2015 08 10 The Node Ahead JavaScript leaps from browser into future 页面存档备份 存于互联网档案馆 The Register March 1 2011 Why GoDaddy s Nodejitsu deal is great for Node js 页面存档备份 存于互联网档案馆 VentureBeat February 10 2015 20 0 20 1 20 2 Node js for PHP Developers 页面存档备份 存于互联网档案馆 O Reilly Media Inc 2013 21 0 21 1 21 2 Node js Essentials 页面存档备份 存于互联网档案馆 Packt Publishing 09 Sep 2014 Smashing Node js JavaScript Everywhere 页面存档备份 存于互联网档案馆 John Wiley amp Sons 14 Aug 2012 Modules 页面存档备份 存于互联网档案馆 Nodejs Website Azat Mardan Express js Guide The Comprehensive Book on Express js Azat Mardan 2014 2014 05 28 2015 08 14 原始内容存档于2015 07 13 25 0 25 1 CoffeeScript on Node js O Reilly Media Inc April 15 2013 May 17 2015 原始内容存档于2015 07 02 NodeConf 页面存档备份 存于互联网档案馆 Finley Klint NodeConf Schedule Announced ReadWriteHack April 7 2011 2 August 2014 原始内容存档于2012年9月17日 About Node js and why you should add Node js to your skill set Training com Training com 23 October 2016 原始内容存档于2017 04 01 29 0 29 1 Professional Node js Building JavaScript Based Scalable Software 页面存档备份 存于互联网档案馆 John Wiley amp Sons 01 Oct 2012 Harris Amber The Birth of Node Where Did it Come From Creator Ryan Dahl Shares the History Devops Angle April 1 2012 26 October 2013 原始内容存档于2014 10 18 Ryan Dahl Joyent and Node Google Groups 2010 11 09 2015 02 05 原始内容存档于2011 01 22 Sams Teach Yourself Node js in 24 Hours 页面存档备份 存于互联网档案馆 Sams Publishing 05 Sep 2012 Ryan Dahl at JSConf EU 2009 2017 05 04 原始内容存档于2017 05 14 Ryan Dahl at JSConf EU 2009 Video 2017 05 04 原始内容存档于2017 05 15 Video Node js by Ryan Dahl 2017 05 04 原始内容存档于2017 05 11 PHP 7 vs Node js They Can Be Partners Not Competitors For a Developer 21 December 2016 原始内容存档于2017 02 23 Earliest releases of npm GitHub 27 July 2016 原始内容存档于2017 03 01 Porting Node to Windows With Microsoft s Help 17 April 2016 原始内容存档于2017 07 14 Dahl Ryan New gatekeeper 26 October 2013 原始内容存档于2011 01 22 Schlueter Isaac The Next Phase of Node js January 15 2014 21 January 2014 原始内容存档于2017 07 14 Krill Paul Why io js Decided to Fork Node js JavaWorld Dec 4 2014 Dec 15 2014 原始内容存档于2017 06 30 Q amp A Why io js decided to fork Node js 页面存档备份 存于互联网档案馆 Infoworld Tech Watch Ben Noordhuis Issue 3692 function suddenly becomes V8 JavaScript Engine Issues Nov 12 2014 2 February 2015 原始内容存档于2015 11 01 Mikeal Rogers State of io js January 28 2015 2 February 2015 原始内容存档于2015 08 30 Node js Foundation Advances Community Collaboration Announces New Members and Ratified Technical Governance 4 July 2015 原始内容存档于2015年6月24日 46 0 46 1 Node js Foundation Combines Node js and io js Into Single Codebase in New Release 28 Jan 2016 原始内容存档于2017 01 07 Io js JavaScript I O 页面存档备份 存于互联网档案馆 io js has merged with the Node js project again There won t be any further io js releases All of the features in io js are available in Node js v4 and above cluster 页面存档备份 存于互联网档案馆 StrongLoop Process Manager 页面存档备份 存于互联网档案馆 pm2 页面存档备份 存于互联网档案馆 About Node js 页面存档备份 存于互联网档案馆 Node js Website Node js Tools for Visual Studio Codeplex 2 August 2014 原始内容存档于2018 01 16 Bergius Flowhub and the GNOME Developer Experience LWN net 2014 05 02 2014 05 24 原始内容存档于2018 12 26 Codiad 页面存档备份 存于互联网档案馆 Koa js 页面存档备份 存于互联网档案馆 Hapi js 页面存档备份 存于互联网档案馆 Node js Framework Comparison Express vs Koa vs Hapi 页面存档备份 存于互联网档案馆 AirPair Peter Wayner 13 fabulous frameworks for Node js InfoWorld 21 May 2014 4 July 2015 原始内容存档于2015 08 09 Meteor 页面存档备份 存于互联网档案馆 Derby 页面存档备份 存于互联网档案馆 Sails Mean MeanJS 页面存档备份 存于互联网档案馆 Tower js 页面存档备份 存于互联网档案馆 Nombo Geddy Compound 页面存档备份 存于互联网档案馆 Yahoo Mojito Serdar Yegulalp Node js fork JXcore goes open source aims for mobile developers InfoWorld 20 February 2015 4 July 2015 原始内容存档于2015 08 13 repository 页面存档备份 存于互联网档案馆 Luvit 页面存档备份 存于互联网档案馆 外部連結 编辑官方网站 Node js原始碼 页面存档备份 存于互联网档案馆 Also Read Best Magento 2 Extensions 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Node js amp oldid 75535063, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。