「译文」明白Node.js

一篇2010年的文章,本身读完后一些对node.js的疑问水到渠成,由于文章比较旧,所以文中形貌的状况有些已发生了变化,在翻译历程中会逐一指出。

原文:http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb

当我把Node.js引见给人们的时刻,通常会发生两种回响反映。总的来说人们不是能够准确的明白它,就是被搞得异常懵懂。

假如你到目前为止还处于第二组里,下面是我想要用来解说node的内容:

  • 它是一个命令行东西。你下载一个tarball文件,编译并装置源码。
  • 它能够让你在你的终端中经由过程输入’node my_app.js’来运转JavaScript递次。
  • JS是被V8 javascript引擎(使Google Chrome运转云云之快的东西)所实行的。
  • Node供应了一个用来接见收集和文件体系的JavaScript API。

“然则我能够做任何我想要做的事变用:ruby,python,php,java, … !”

我听到了你的声响。你是对的。Node不是活该的独角兽,它不会帮你做你本身的事情,抱歉。它只是一个东西,而且它也许也不会完整地替代你经常运用的东西,最少当前不会。

“说重点!”

好的,我会的。Node总的来说异常优异当你须要同时做许多事变的时刻。你有过写了一部分代码然后说“我想要这个并行实行”吗?好吧,在node中任何东西都是并行运转的,除了你的代码。

“嘿?”

是的没错,任何东西都是并行的,除了你的代码。为了明白它,把你的代码想像成是国王,然后node是它的奴隶戎行。

新的一天以奴隶唤醒国王而且问他是不是须要什么而最先了。国王给了这个奴隶一个使命列表,然后归去继承睡觉去了(汗)。这个奴隶把这些使命分配给了他的同寅,然后他们最先事情。

当一个奴隶完成了一个使命,他会在国王领地外边排成一条线来报告。国王一次让一个奴隶进来,然后听取他的报告。有时刻国王会在奴隶出去的时刻给奴隶更多的使命。

生涯是优美的,由于国王的奴隶并行的实行他的使命,然则一次只报告一个效果,所以国王能够专注。*

“那是异想天开,然则你能完毕这个愚昧的比方而且用geek的体式格局通知我吗?”

固然。一个简朴的node递次看起来多是如许的:

var fs = require('fs')
  , sys = require('sys');

fs.readFile('treasure-chamber-report.txt', function(report) {
  sys.puts("oh, look at all my money: "+report);
});

fs.writeFile('letter-to-princess.txt', '...', function() {
  sys.puts("can't wait to hear back from her!");
});

你的代码给了node两个使命用来读写一个文件,然后就休眠了。当node完成了一个使命,跟它对应的回调就会被触发。然则在同一时候只能有一个回调触发。在谁人回调完成了实行之前,统统其他的回调不能不列队守候。进一步说,关于回调触发的递次是没法保证的。

“所以我没必要忧郁代码在同一时候接见同一个数据结构?”

你明白了!这就是JavaScript的单历程/事宜轮回设想的悉数美之地点。

“异常好,然则为何我应当用它?”

一个原因是效力。在一个web运用中,你主要的相应时候斲丧通常是实行数据库查询的时候之和。经由过程node,你能够一次实行你统统的查询,把相应时候削减为实行最慢查询所消费的时候。

另一个原因是JavaScript。你能够运用node来在浏览器和你的后端之间同享代码。JavaScript也正在变成一个真的通用言语。不论过去你用的是python,ruby,java,php或许其他言语,你都能够用过一些JS,对吗?

末了一个原因是原始速率。V8时刻在向成为环球最快的动态言语诠释器之一而勤奋。我想不到任何其他言语在速率上有像如今的JavaScript一样有云云突飞猛进的提拔。进一步说,node的I/O才能异常轻量级,能够使你能够尽量的完整应用你体系完整的I/O才能。

“所以你在说我应当从如今起用node来写我统统的运用?”

是和不是。一旦你最先抡node这个锤子,那末明显统统最先看起来都像一个钉子。然则假如你当前的事情有一个限期,你能够经由过程以下来决议:

  • 是不是低相应时候/高并发主要?Node真的很善于它。
  • 项目有多大?小项目题目不大。大项目应当警惕的评价(可用的库,修复一个bug所需的资本或许two upstream等等)。

“node能运转在Windows上吗?”

不可。假如你运用的是windows,你须要运转一个Linux虚拟机(我引荐VirtualBox)。node对Windows的支撑在设计中了,然则接下来的几个月不要屏住呼吸除非你想对port供应协助。(译者:如今node能够圆满的运转在Windows上)

“我能在node中接见DOM吗?”

好题目!不可,DOM是浏览器中的东东,而且node的JS引擎(V8)幸亏跟那些杂沓的东西是完整星散的。不过,有人在以node模块的情势来完成DOM,能够带来令人兴奋的能够性比如对客户端代码举行单元测试。

“岂非事宜驱动编程不是真的异常难吗?”

这取决于你。假如你已学过如安在浏览器中玩弄AJAX挪用和用户事宜,那末运用node不会是一个题目。

同时,测试驱动开辟能够真正的协助你以一个可保护的设想做为最先。

“谁在用它?”

node wiki(滚动到”Companies using Node”)有一个小的/不全的列表。Yahoo正在为YUI对node举行试验,Plurk正在运用它处置惩罚大规模的comet,而且Paul Bakaus(由于jQuery UI而出名)正在建立一个令人兴奋的游戏引擎,个中后端运用了一些node代码。Joyent已雇佣了Ryan Dahl(node作者)而且鼎力大举赞助开辟。

对了,Heroku也方才声清楚明了支撑对node.js的托管

“我能去那里学更多?”

Tim Caswell正在运作优异的How To Node博客。在twitter上Follow #nodejs。定阅邮件列表。然后去IRC频道走走,#node.js(是的,名字中包括这个点)。我们在那的划艇分数快到达200了:)。

我也将会继承在debuggable.com这里写文章。

当前就写这么多了。假如你有其他题目迎接留言。

–注解:

*: 这个比方明显是太简朴了,然则在实际当中找到一个与非壅塞观点相对应的对比物很难。

    原文作者:youknowthat
    原文地址: https://segmentfault.com/a/1190000000328976
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞