服务器端 JavaScript:Node.js 社区的增长

Cloud9 IDE 和 Mozilla 一直在合作,自他们的 Bespin 和 ACE 项目合并以来。这两个组织都致力于 Node.js 的成功,Mozilla 因为其在 Javascript 方面的历史,而 Cloud9 IDE 则是 Node.js 的核心贡献者,并提供了领先的 Node.js IDE。作为合作的一部分,这是 Cloud9 IDE 的 Ruben Daniels 和 Zef Hemel 撰写的一篇客座文章。

虽然我们都了解并喜爱 JavaScript 作为一种基于浏览器的脚本语言,但很少有人记得,它最初的用途也包括作为服务器端语言。在 JavaScript 最初于 Netscape Navigator 2.0(1995 年)发布后大约一年,Netscape 发布了 Netscape Enterprise Server 2.0

Netscape Enterprise Server 是第一个支持 Java(TM) 和 JavaScript(TM) 编程语言的 Web 服务器,能够创建、交付和管理在线实时应用程序。

这就是 Web 在 90 年代中期启动的方式。遗憾的是,当时的计划并没有实现。服务器端的 JavaScript 失败了,而浏览器中的 JavaScript 却大获成功。当时,JavaScript 仍然非常年轻。执行 JavaScript 代码的虚拟机速度缓慢且重量级,并且没有工具来支持和管理大型 JavaScript 代码库。这对当时 JavaScript 在浏览器中的用例来说是可以接受的,但对于服务器端应用程序来说却是不够的。

尽管如此,仍有两个明显的优势支持这种想法,即不仅在浏览器中,而且在服务器上也使用 JavaScript

  1. 技能复用。开发人员只需要学习一门编程语言,就可以用于客户端和服务器端编程。前端开发人员也可以利用其现有技能构建服务器应用程序。
  2. 代码复用。编写一次代码,然后能够在客户端或服务器上运行它,这带来了巨大的机会。最明显的例子是复用代码来验证表单,无论如何你都必须在两端进行验证。但还有许多其他令人兴奋的机会需要探索,例如能够 根据设备功能动态决定在哪里渲染 UI(客户端或服务器,或两者兼而有之)。

在过去的十几年里,许多项目都尝试重新引入服务器端的 JavaScript,但一次又一次地,几乎没有得到采用。

新的希望

然后,Node.js 出现了。Node.js 是第一个让大家真正感到兴奋的 JavaScript 实现。这是为什么?是什么让 Node.js 不同于之前的尝试?

事实证明,之前的尝试忽略了 JavaScript 的一个核心、强大且经常被忽视的功能:它的单线程特性。JavaScript 在浏览器中是单线程的。然而,以前的服务器端 JavaScript 实现确实具有常规线程,就像每种服务器端语言(例如 Java、Python 或 Ruby)一样。

Node.js 故意选择了一条不同的道路,这条道路更符合浏览器 JavaScript:Node.js 是单线程的,并且基于事件。

这有两个优点:它避免了并发问题,并且支持构建超级高效的高性能服务器。

使用线程进行编程非常困难。当事情同时发生时,很容易出现并发错误(例如,两个线程同时修改同一块内存),这些错误难以重现和修复。大学开设课程来教学生如何使用锁、信号量等避免并发问题。并发很困难,最好在可能的情况下避免它——Node.js 允许你通过根本不支持它来避免并发,至少在进程级别上是这样的。在 Node.js 进程中,一次只发生一件事。

使用 Node.js 构建的服务器通常非常快,并且可以处理数千、数万甚至数十万个并发连接——这对于使用线程的服务器来说非常难以实现。这是怎么做到的?

这一切都基于这样的观察:典型 Web 应用程序服务器中的服务器线程大部分时间都在无所事事——只是空闲地等待数据库查询的结果,等待磁盘旋转并返回请求的文件,或者等待数据通过网络传输。对于每个连接的客户端,都存在一个线程只是在那里空闲地占用资源。

Node.js 服务器的工作方式不同。Node.js 使用异步 API 来执行需要 I/O 的操作,例如获取文件或发送数据库查询。这与 AJAX 调用在浏览器中的工作方式完全相同,以及其他最近的异步 HTML5 JavaScript API,例如各种数据库 API(IndexedDB 和 WebSQL)和地理定位。所有这些 API 都不希望阻塞浏览器线程,因为检索结果可能需要半秒甚至几秒钟,这会导致浏览器冻结。相反,它们只需触发调用并将回调函数传递给结果到来时调用。在此期间,浏览器线程可以继续渲染页面并执行其他操作。这正是 Node.js 中任何 I/O API 的工作方式。

Node.js 社区

Node.js 社区在过去几年里发展迅速。越来越多的公司使用 Node.js 构建他们的服务器,特别是对于需要实时通信的服务器,因此必须处理大量同时连接。随着实时 Web 的发展,Node.js 的使用也会随之增长。

因此,现在是时候让 Node.js 对开发人员社区更加易于访问了。为此,Node.js 需要一些东西

  1. 工具
  2. 良好的文档
  3. 一个包含深入文章和教程的社区网站
  4. 培训

Cloud9 IDE,我们已经设定了目标,要为 Node.js 开发构建尽可能好的 IDE。毕竟,Cloud9 IDE 本身就是我们设想的 Web 开发未来的一个典型例子:Cloud9 IDE 从头到尾都使用 JavaScript,在客户端使用浏览器 Javascript,在服务器端使用 Node.js。

使用 Cloud9 IDE,你可以试用和体验 Node.js,而无需安装任何东西。你可以创建 Node.js 项目,直接从 IDE 中运行、调试和部署你的项目。

与 Node.js 社区的合作伙伴合作,我们现在正在启动另外三个计划

  1. Nodebits.org 是 Node.js 开发人员的新社区网站,提供最新新闻、深入文章和教程。
  2. NodeManual.org 是 Node.js 文档的新一站式资源。如果你愿意,可以将其视为 Node.js 开发的 MDN。
  3. 培训 为企业提供为期三天的 Node.js 培训课程。

Nodebits、NodeManual 和我们的培训材料中使用的任何示例代码都只需点击一个按钮即可在 Cloud9 IDE 中运行,从而进一步降低了尝试示例的门槛。

通过这些计划,我们的目标是将 Node.js 打造成未来的主流 Web 开发平台:从头到尾使用 JavaScript。这很有道理。

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道师和编辑。发表演讲并撰写关于 HTML5、JavaScript 和开放 Web 的博客文章。Robert 是 HTML5 和开放 Web 的坚定支持者,自 1999 年以来一直在从事 Web 前端开发工作——在瑞典和纽约市。他还定期在 http://robertnyman.com 上发表博客文章,并且喜欢旅行和结识新朋友。

更多来自 Robert Nyman [荣誉编辑] 的文章……


19 条评论

  1. jon

    node.js 非常棒,除非你在 Windows 上运行它
    我们需要为 Windows 构建更多工具和实用程序来与 node.js 协同工作。
    像 npm 这样的项目需要以 Windows 为中心重新构建,而不仅仅是“移植”到 Windows。

    2012 年 1 月 23 日 17:13

    1. Rich

      说正经的,你为什么要在 Windows 上运行它?如果没有访问物理或虚拟服务器的可能性,你为什么要运行 Windows?

      我真的无法想象在服务器环境中无法访问 Linux 的情况。

      2012 年 1 月 24 日 00:13

      1. Pedro

        你的意思是 node.js 唯一的用途是通过 http 提供数据吗?

        我们为什么要忽视它在桌面上的用处?它带有文件系统访问权限,并且能够通过 http 之外的其他方式进行通信。说正经的,你为什么不将它用于你的一般本地脚本需求呢?

        2012 年 1 月 24 日 01:20

      2. rob brown

        我可以想到很多想要在 Windows 上运行它的理由,其中大部分与在生产环境中运行无关。如今大多数电脑都运行 Windows。你真的认为学习一门语言/框架(或任何 Node 是什么)的人会很高兴他们甚至无法在本地设置它吗?

        我相信 90% 学习 php 的人是在他们的 Windows 机器上学习的,而且可能大多数人都在本地安装了 php,这样他们就不必跨网络编辑文件了。

        我自己是 Mac 用户,并且倾向于在 Linux 上部署东西。我永远不会放弃拥有一个在本地运行的完整开发环境的能力。

        2012 年 1 月 24 日 12:51

    2. Anand George

      几个月前我决定学习 Node.js 时,它还没有一个像样的 Windows 移植版本。归根结底……要么等待移植,要么加入 Linux 大军。相信我,在 Windows 下的 VMWare 中安装 Ubuntu 并学习一些基本命令来入门只需要大约一周时间。

      2012 年 1 月 24 日 20:16

  2. Joe Zhou

    太棒了,喜欢 node

    2012 年 1 月 23 日 19:13

  3. dimas priyanto

    永远不要使用 Windows 进行开发,使用 Unix

    2012 年 1 月 23 日 22:33

    1. npiv

      虽然我同意 Unix 通常更适合开发,但这并不是对 jon 担忧的有效回答。

      Node 确实需要更好的 Windows 工具。

      2012 年 1 月 23 日 23:45

  4. RABAH

    你好,

    我是一个法国博主和爱好者,我已经写了几篇关于 node.js 的博文,我真的 <3 NOde.js!

    从服务器到客户端使用一种语言,不再需要 ruby、php……太棒了!
    最好的,
    Vincent

    2012 年 1 月 24 日 01:21

  5. Gian Angelo Geminiani

    我爱 Node,我正在将我的 Java 框架移植到 JS 和 Node 上。

    2012 年 1 月 24 日 05:21

  6. jon

    我必须使用 unix/linux 进行开发的想法很荒谬
    我应该能够使用任何我想要的操作系统。

    例如,看看 github,那里的大多数开源项目对于运行 Windows 的开发人员来说完全没用。

    当然,我知道在虚拟机中设置开发环境非常简单。或者更糟糕的是像 cygwin 这样的东西,但真的,为什么要经历这一切只是为了运行几个命令

    2012 年 1 月 24 日 20:49

  7. Toby

    Jon 完全正确。Node.js 是一款很棒的工具,但在 Windows 环境中开发它时,支持不足。

    不要陷入 Win 与 Linux 之战,但我唯一会专门为 Linux 开发的原因是,如果我特意选择为 20% 的电脑用户编写程序。作为企业主,我为什么要选择淘汰大约 80% 的潜在用户群?我热爱 Linux,但我必须盈利,否则我就失业了。

    2012 年 1 月 24 日 20:54

  8. Bogomil “Bogo” Shopov

    Netscape JS 令人头疼。Node.js 正好相反 :) 我喜欢它。

    2012 年 1 月 26 日 07:37

  9. Joey

    Windows 程序员:“我需要更多工具!”

    Linux 程序员:……编写更多工具,并将它们放在 github 上……

    2012 年 1 月 30 日 09:55

  10. 购买课程作业

    毫无疑问,Node.js 是一种很棒的编程语言工具。每当我构建任何网站作为项目时,我必须使用 node.js 来开发我的网站及其服务器。

    2012 年 3 月 15 日 00:23

  11. Alvina

    昨天在我的 IT 课程中,来自 MUST 大学,我了解到 Netscape Enterprise Server 是第一个支持 Java(TM) 和 JavaScript(TM) 编程语言的 Web 服务器,能够创建、交付和管理在线实时应用程序。

    2012 年 4 月 12 日 10:47

  12. Mike

    http://training.c9.io/ 链接已损坏——或者至少该网站已关闭……

    2012 年 7 月 3 日 20:31

  13. 李大师

    哇,我已经爱上 Nod.js 了。我几天前才开始学习它,我认为根据我目前的理解,后端开发的未来在于 Node。我已经用 javascript 编程了一段时间了,我认为我不会再浪费时间修改 php,而只会专注于 javascript 和 Node。感谢你 Ryan Dahl 大师,感谢你的独创性。

    2013 年 1 月 24 日 02:58

  14. Jeff Nappi

    我实际上在 1997 年左右就在 Netscape Enterprise Server 上构建了一个电子商务应用程序,并使用了服务器端 JavaScript……哦,世界变化太大了 :)

    2013年2月6日 08:35

本文评论已关闭。