总括 :这篇文章十分生动形象的的介绍了 Node,满足了读者想去了解 Node 的需求。作者是 Node 的第一批贡献者之一,德国前端大神。译者觉得作者的比喻很适合初学者理解 Node,特此翻译。
本文属于译文
当我向别人介绍 的时候一般会有两种反应,要么是立马就弄明白它是个什么玩意儿,要么是被它搞的很糊涂。
如果你现在还处于后者,下面就是我对于
的解释:
- node
来运行 Javascript 程序;
- node my_app.js
- Javascript API
我听到你说的话了,你是对的。
不是狡猾的独角兽,这点很抱歉,它不会帮你做你该做的事。它仅仅是一个工具,而且他也不会替代你现在所常用的一些工具,至少现在不会。
- Node
好的,我会的,当你需要同时做好几件事的时候
会表现的十分优秀。你有写了一段代码然后对他说 "我想你可以并行运行!" 的体验吗?哈哈哈,在 Node 中除了你的代码所有的东西都是并行运行的。
- Node
是的,没错,除了你的代码之外所有的代码都是并行运行的。为了理解这一点,你可以把你自己的代码想象成一个国王,而
就是他的仆人军队。
- Node
新的一天是这样开始的:某个仆人叫醒了国王,然后问他是否需要什么。国王给了这个仆人一个任务清单然后就回去继续睡觉了。然后这个仆人就把任务清单上的任务分发下去,仆人们开始工作了。
当一个仆人完成了他的任务的时候,他就跑到国王寝宫外面排队等候报告。国王一次只能听取一个仆人报告任务,有的时候国王会在仆人报告结束的时候给他更多的任务。(看你代码咋写咯)
生活是美好的,因为国王的诸多仆人同时执行多个任务,但报告结果的时候是一个一个来的,所以国王能够很专注。
好的,一个
程序或许是下面这样的:
- node
- var fs = require('fs'),
- sys = require('sys');
- //译者注:sys is deprecated. Use util instead.这里我们直接用console.log即可
- fs.readFile('treasure-chamber-report.txt',
- function(report) {
- //sys.puts("oh, look at all my money: "+report);
- console.log("oh, look at all my money: " + report)
- });
- fs.writeFile('letter-to-princess.txt', '...',
- function() {
- //sys.puts("can't wait to hear back from her!");
- console.log("can't wait to hear back from her!")
- });
你的代码 (国王) 给了
(仆人)两个任务即读 (readFile) 和写 (writeFile) 文件,然后就去睡大觉了。一旦 node 完成了某个任务,跟这个任务对应的回调就会触发。但同一时间只能有一个回调被触发,在那个回调执行完成之前,所有其它的回调都得排队等待。进一步说,回调触发的顺序是不能被保证的。
- node
你确实理解了,这就是 JavaScript 的单进程 / 事件循环设计美丽的地方。
一个原因是效率。在一个 web 应用中,响应时间主要是花在了执行数据库查询上面,而用
, 你可以一次性执行所有的数据库查询。将响应时间减少到了执行最慢的数据库查询所用的时间。
- node
另一个原因是
。你可以使用
- Javascript
让你的浏览器和后端共享代码。Javascript 也在渐渐成为一门真正的通用语言。不管你在过去是用 Python, Ruby, Java, PHP, ... 等等,你都或多或少的使用过 Javasctipt,对吗?
- Node
最后一个原因是原生速度。V8 正在不断的推进作为地球上最快的动态语言编译器之一的边界,我也想不到有任何其它的语言在速度上能够像 Javascript 一样不断的高歌猛进。再进一步说,
的 I/O 设备真的十分的轻量,能够让你尽可能最大程度的利用系统的 I/O 容量。
- node
是也不是,一旦你开始舞弄
这柄锤子,所有的东西都会开始变得像钉子。但如果你当前的工作有一个 deadline,你可以参考下面的几点来做决定用不用
- node
:
- node
这是一个好问题!答案是不行,DOM 是浏览器的东西吗,不过幸好 node 的 JS 引擎(V8)跟那些混乱的东西是完全分离的。不过,有人在以 node 模块的形式来实现 DOM,或许带来令人兴奋的可能性比如对客户端代码进行单元测试。(译者注:现在已经有人实现了这个模块,详情查看)。
这取决于你自己,如果你已经学会了如何在浏览器里调用 Ajax 或是调用某个事件,那么学习 node 对你不会是什么难题。
同时,测试驱动开发能够真正的帮助你从做一个可维护的设计开始学习 node。
Tim Caswell 正在运作优秀的博客。在 twitter 上 Follow 。订阅。(译者注:也可以结合进行学习,另外,译者写了一个 node 的小应用可以 clone 下来看下)
本篇文章的比如讲真是有些简单了,但从现实事物中找到真正相对应的也是在太难。,另外,由于时间原因,本文一些不妥之处或是当时还处在实验性阶段的东西译者或删或改。能力有限,水平一般,翻译不妥之处,还望指正。感谢。
来源: