明白Node.js(译文)

媒介

总括 :这篇文章非常活泼抽象的的引见了Node,满足了读者想去相识Node的需求。作者是Node的第一批贡献者之一,德国前端大神。译者以为作者的比方很合适初学者邃晓Node,特此翻译。

译者 :原文网址里有只小蚂蚁的效果很有意义(屡次鼠标悬浮会有欣喜),哈哈哈,可以去看一下哦。

本文属于译文

正文

当我向他人引见Node.js 的时刻平常会有两种回响反映,要么是立马就弄邃晓它是个什么玩艺儿,要么是被它搞的很懵懂。

假如你如今还处于后者,下面就是我关于node的诠释:

  • 它是一个命令行东西,你可以下载一个tarball文件,编译然后装置源文件;

  • 它可以让你在你的终端输入node my_app.js 来运转Javascript递次;

  • Node的JS代码是由 V8 javascript 引擎(就是谁人使得Chrome如此之快的东西)所实行的;

  • Node供应了诸如接见收集或是操纵文件体系的Javascript API

“但我也可以用 Ruby, Python, Php,Java, …等言语来做我想要做的事啊”

我听到你说的话了,你是对的。Node不是桀黠的独角兽,这点很抱歉,它不会帮你做你该做的事。它仅仅是一个东西,而且他也不会替换你如今所经常运用的一些东西,最少如今不会。

“说重点!!!”

好的,我会的,当你须要同时做好几件事的时刻Node会表现的非常优异。你有写了一段代码然后对他说”我想你可以并行运转!”的体验吗?哈哈哈,在Node中除了你的代码一切的东西都是并行运转的。

“啊?!”

是的,没错,除了你的代码以外一切的代码都是并行运转的。为了邃晓这一点,你可以把你本身的代码设想成一个国王,而Node就是他的仆役戎行。

新的一天是如许最先的:某个仆役叫醒了国王,然后问他是不是须要什么。国王给了这个仆役一个使命清单然后就回去继承睡觉了。然后这个仆役就把使命清单上的使命分发下去,仆役们最先事情了。

当一个仆役完成了他的使命的时刻,他就跑到国王寝宫表面列队期待报告。国王一次只能听取一个仆役报告使命,有的时刻国王会在仆役报告完毕的时刻给他更多的使命。(看你代码咋写咯)

生涯是优美的,因为国王的诸多仆役同时实行多个使命,但报告效果的时刻是一个一个来的,所以国王可以很专注。

“那确切很优美,但你能完毕这个愚昧的比方用越发geek的体式格局来通知我吗?”

好的,一个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!")
});

你的代码(国王)给了node(仆役)两个使命即读(readFile)和写(writeFile)文件,然后就去睡大觉了。一旦node完成了某个使命,跟这个使命对应的回调就会触发。但同一时候只能有一个回调被触发,在谁人回调实行完成之前,一切别的的回调都得列队守候。进一步说,回调触发的递次是不能被保证的。

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

你确切邃晓了,这就是JavaScript的单历程/事宜轮回设想优美的处所。

“好棒,但我为何应当用它呢?”

一个缘由是效力。在一个web运用中,相应时候主如果花在了实行数据库查询上面,而用node,你可以一次性实行一切的数据库查询。将相应时候削减到了实行最慢的数据库查询所用的时候。

另一个缘由是Javascript。你可以运用Node让你的浏览器和后端同享代码。Javascript也在逐渐成为一门真正的通用言语。不论你在过去是用Python, Ruby, Java, PHP, …等等,你都或多或少的运用过Javasctipt,对吗?

末了一个缘由是原生速率。V8正在不停的推动作为地球上最快的动态言语编译器之一的边境,我也想不到有任何别的的言语在速率上可以像Javascript一样不停的高歌猛进。再进一步说,node的I/O装备真的非常的轻量,可以让你尽量最大程度的应用体系的I/O容量。

“所以你是说从如今最先我应当用Node写我一切的运用么?”

是也不是,一旦你最先舞弄node这柄锤子,一切的东西都邑最先变得像钉子。但假如你当前的事情有一个deadline,你可以参考下面的几点来做决议用不用node:

  • 低相应时候/高并发是不是主要?Node真的很善于处置惩罚这俩题目;

  • 项目有多大?小项目没题目,假如是大项目就应当仔细评价了(可用的库,修复一个bug所需的资本也许two upstream等等)

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

这是一个好题目!答案是不可,DOM是浏览器的东西吗,不过幸亏node的JS引擎(V8)跟那些杂沓的东西是完整星散的。不过,有人在以node模块的情势来完成DOM,也许带来令人兴奋的可能性比方对客户端代码举行单元测试。(译者注:如今已有人完成了这个模块,概况检察Node-dom)。

“岂非事宜驱动编程真的很难吗?”

这取决于你本身,假如你已学会了如安在浏览器里挪用Ajax或是挪用某个事宜,那末进修node对你不会是什么困难。

同时,测试驱动开辟可以真正的协助你从做一个可保护的设想最先进修node。

“我应当从那里学到更多?”

Tim Caswell正在运作优异的How To Node博客。在twitter上Follow nodejs。定阅邮件列表。(译者注:也可以连系Node.js 6.9.5 文档举行进修,别的,译者写了一个node的小运用node-sample可以clone下来看下)

跋文

本篇文章的比方讲真是有些简朴了,但从实际事物中找到真正相对应的也是在太难。,别的,因为时候缘由,本文一些不妥的地方或是当时还处在实验性阶段的东西译者或删或改。才能有限,程度平常,翻译不妥的地方,还望斧正。谢谢。

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