Node即学即用序_Node即学即用序试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 互联网 > Node即学即用 >

Node即学即用——序

Ryan Dahl序 2008年,我在寻找一个新的编程平台来做网站。我并不是想要一门新的语言,实际上,语言自身的细节对我来说并不重要。我真正关心的是,该语言能否提供先进的推送功能并集成到网站中来,就像我在 Gmail中看到的那样——能够从服务器端把数据主动推送给用户,而不是采用不断轮询拉取数据的方式。现有的平台都把服务器作为接受请求然后返回相应内容的设备。要把事件推送到浏览器,平台需要能够持续处理大量打开的网络连接,而这其中有许多连接其实是空闲的。 Google在 2008年年末推出了 Chrome浏览器和崭新的 JavaScript引擎 V8。这是一个为了更快的 Web体验而专门制作的更快的 avaScript引擎, V8让 Web应用大大提速了。突然之间, Google、Apple、Mozilla和微软之间的 JavaScript军备竞赛就开始了。再加上 Doug Crockford的 JavaScript: The Good Parts一书的面世,把 JavaScript从一门人人轻视的语言一下变成了重要的语言。 于是,我有了个主意: JavaScript结合非阻塞 socket!因为 JavaScript并没有现成的 socket库,所以我可以勇做第一人,来推介这个崭新且大有前途的接口。只要把 V8接上我的非阻塞 C代码,我就能把它完成。我终止了当时承接的工作,开始全力实现这个想法。当我编写好并发布了最初的版本后,立刻就有用户开始反馈 bug,然后我开始不停地处理这些 bug,就这样,不知不觉过去了 3年。 实践证明, JavaScript与非阻塞 socket配合得相当完美。开始我并不敢肯定这一点,但闭包让所有事情变得可能。只需要简单的几行 JavaScript代码,就可以构建出非常复杂的非阻塞服务器。我最初还担心,系统会过于小众,但很快我就放心了,因为世界各地的黑客们纷纷开始为其编写程序库。唯一的事件循环队列和纯粹的非阻塞接口让程序库不必增加昂贵的线程,就能添加越来越多的复杂功能。 在 Node中,用户会发现系统在默认情况下就能很好地扩展。因为其核心系统做出的选择是,不允许系统中的任何部分做出太坏的事情来(比如堵塞当前线程),所以整体性能也不会太差。如果以能够处理的流量作为计量, Node的方法要比传统的阻塞式操作好上一个数量级。 现在, Node已经在全球被众多公司所使用,包括创业公司、 Voxer、Uber,以及沃尔玛、微软这样的知名公司。可以说,每天通过 Node处理的请求数以亿计。随着越来越多的人参与到本项目中来,可用的第三方模块和扩展增长迅猛,而且质量也不断提升。虽然我曾建议将 Node用于关键任务应用,但现在,即便是要求最苛刻的服务器系统,我也会热诚地推荐使用 Node。 本书探讨了 Node及许多第三方模块,并给出了指导练习,旨在带你深入浅出地了解 Node。通过学习本书,你不但能够熟悉 JavaScript的基本操作,还能逐渐开始构建复杂、交互式的网站。如果你曾经使用过其他服务器端 Web框架,你会震惊于用 Node这么容易就能编写一个服务器! ——Ryan Dahl,Node.js的创建者 Brendan Eich序 1995年 4月,我加入了 Netscape公司,负责“把 Scheme添加到浏览器里”。一两个月后,这个任务却演变成了“创造一门看起来像 Java的脚本语言”。更糟糕的是,当时正在商议把 Java添加到 Netscape里,所以 Netscape的一部分人对是否需要一门“第二语言”表示怀疑。同时,另外一部分人想要的是类似 PHP的东西,也就是为公司计划发布的服务器产品 LiveWire写的一门 HTML模板语言。 于是,在 1995年 5月,我用 10天时间开发了 Mocha原型(代码名称是 Marc An-dreessen挑选的)。当时, Marc、Rick Schell(Netscape的工程副总裁)和 Sun公司的 Bill Joy这几位高层管理者都支持我继续做下去,以消除人们对 Java之后“第二语言”的怀疑。(极具讽刺的是, Java几乎已在浏览器世界里绝迹了,而 JavaScript则成为 Web客户端的主导。) 为了消除一切疑虑,我需要在 10天内拿出一个能演示的原型。当时我日以继夜地工作,结果引入了一些设计语言的错误(其中一些重复了 LISP演变过程中的设计错误),但最终还是赶在期限前完成了演示。 人们很惊讶,我竟然用不到两周的时间就完成了一门语言的编译器和运行环境。其实自从大三那年由物理专业转到数学 /计算机科学专业起,我已经积累了十多年的经验。我一直很喜欢形式语言和自动机理论,并出于兴趣编写了自己的语言解析器和解析器生成器。在 Silicon Graphics的时候,我编写的网络监控工具包含了包头匹配、协议描述语言和编译器。此外,我还是 C和 Unix的忠实粉丝。所以,弄出 Mocha只不过是一件需要持续工作与专注的事情。    1995年秋天, Netscape市场部把 Mocha改名为 LiveScript,好让它和服务器产品 LiveWire的名字相匹配。 1995年 12月初, Netscape和 Sun最终签订一份商标使用许可协议,由创始人 Bill Joy代表 Sun公司签字生效, LiveScript正式改名为 JavaScript(JS)。    因为有 LiveWire服务器的计划,我在头 10天里实现了一个字节码编译器和解释器,同时还有反编译器和运行时程序(内置我们今天熟悉的 JS对象和函数: Object、 Array、Function等)。对于一个小巧的客户端脚本来说,字节码有点大材小用了,因为 LiveWire产品里包含了一种特性,即能够保存编译好的字节码以供服务器端应用更快地启动。 最终,与 Netscape其他大部分业务一样, Netscape的服务器端 JavaScript产品也失败了,因为微软把 IE浏览器绑定在 Windows里,并进入了 Netscape原本想开拓的浏览器之外的服务器市场。而绑定在 Windows里的 IE是免费的,因此商业用户不再需要单独购买付费浏览器证书了。 尽管 LiveWire失败了,但早在 1995年我们就已经看到端到端 JavaScript编程的吸引力。用户也看到了这个趋势,但这段历史只有一小部分人知道。今天, Node.js避开了 LiveWire当年的致命错误:把堵塞式输入 /输出包含在内,并在服务器端使用多进程模型,因而可扩展性并不是很好。 2009年的 JSConf EU大会上, Ryan展示了 Node.js。我为能够了解 Node而感到欣慰,也很高兴它能够很好地实现彻底使用 JavaScript的愿景,特别是它能从底层构建起整个非阻塞 I/O系统。 Ryan和其他核心成员在保持内核精致方面做得很好。 Isaac及所有模块所有者共同构建起的优秀模块系统分担了内核的压力,所以它不会太过臃肿。此外,围绕 Node代码成长起来的社区也很出色。 结果,这就诞生了一个有趣高效的系统,它不仅能够构建服务器端,而且能够适应日益提高的产能,还可以很方便地进行 JavaScript客户端程序开发,并能够促进代码重用和进化。如果没有 Node,JavaScript将只能绑定在 Web客户端上,其备受指责的文档对象模型以及其他一些历史遗留问题将会日益突出。 Node帮助 JavaScript摆脱了客户端的限制。 本书很好地诠释了 Node的精髓,并讲述了如何用它构建交互式网络应用和网站。 Node棒极了,而本书就是关于 Node的很好的指南,请尽情享受阅读的乐趣吧! ——Brendan Eich,JavaScript的创建者

展开全文

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Node即学即用》其他试读目录

• 序 [当前]
• 前言
• 第1章:基础入门