了解node.js

Node.js通常在我介绍过的人中引起了两个反应。基本上人们就是立即“得到”,否则他们就会很困惑。

如果你到目前为止已经在第二组,这里是我尝试解释节点:

  • 它是一个命令行工具。你下载一个tarball,编译并安装源码。
  • 它允许您通过在终端中键入'node my_app.js'来运行JavaScript程序。
  • JS由V8 javascript引擎执行(使Google Chrome这么快)。
  • Node提供了一个JavaScript API来访问网络和文件系统

“但是我可以做一切我需要的:ruby,python,php,java,...!”

我听到你 你是对的!节点是没有凶手的独角兽,将来为你做你的工作,对不起。这只是一个工具,它可能不会完全替代你的常规工具,至少不是现在。

“到点了!”

好的,我会的。当你需要同时做几件事情时,节点基本上是非常好的。你有没有写过一段代码,并说“我希望这样会并行运行”?那么在节点中,除了你的代码之外,所有的并行运行。

“咦?”

没错,除了你的代码一切都是平行运行的要明白,假设你的代码是国王,节点是他的仆人军队。

这一天从一个仆人醒来,问他是否需要任何东西。国王给仆人一份任务清单,再回来睡一会儿。仆人现在将这些任务分配给他的同事,并且上班。

一旦仆人完成任务,他就在国王四分之一之外排队。国王一次让一个仆人,听他报告的事情。有时,国王会给仆人更多的工作出路。

生命是好的,因为国王的仆人平行执行了他的所有任务,只能一次报告一个结果,所以国王可以专注。*

“太棒了,可你可以放弃愚蠢的隐喻,对我说话吗?

当然。一个简单的节点程序可能如下所示:

 

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

FS。READFILE '宝库室REPORT.TXT' 函数报告 {
  SYS。看跌期权“哦,看我所有的钱:” +报告 ; 
 ; 

FS。WriteFile的“信为本,以princess.txt”“...”函数 {
  SYS。看跌期权‘迫不及待地从她的回音!’ ; 
 ;

 

您的代码为节点提供了读取和写入文件的两个任务,然后进入睡眠状态。一旦节点完成了一个任务,它的回调被触发。但同时只能有一个回调点火。在该回调执行完毕之前,所有其他回调必须排队等待。除此之外,对回调的触发顺序也不保证。

“所以我不必担心代码在同一时间访问相同的数据结构?

你说对了!这就是JavaScript单线程/事件循环设计的整体美感!

“很好,但为什么要用呢?”

一个原因是效率。在Web应用程序中,您的主要响应时间成本通常是执行所有数据库查询所需的时间之和。使用节点,您可以一次执行所有查询,从而减少执行最慢查询所需的时间。

另一个原因是JavaScript。您可以使用节点在浏览器和后端之间共享代码。JavaScript也正在成为一种真正普遍的语言。无论你是否曾经做过python,ruby,java,php,...,你可能已经在一路上拿起了一些JS,对吧?

最后一个原因是原始速度。V8正在不断地将界限作为地球上最快速的动态语言翻译之一。我不能想像任何其他的语言被推动速度像JavaScript现在一样积极。除此之外,节点的I / O设施真的很重,可以尽可能地充分利用系统的完整I / O容量。

“所以你说我现在应该把所有的应用程序写在节点中?”

是和否 一旦你开始摇摆节奏锤子,一切显然会开始看起来像钉子。但是如果你正在处理一个截止日期的事情,你可能希望根据你的决定:

  • 低响应时间/高并发重要吗?节点真的很好。
  • 这个项目有多大?小项目应该罚款。大项目应该仔细评估(可用的库,资源来修复错误或两个上游等)。

“节点在Windows上运行吗?”

不,如果你在Windows上,你需要运行一个虚拟机(我推荐VirtualBox)与Linux。计划对Windows节点的支持,但是不要在接下来的几个月里保持呼吸,除非你想帮助端口。

“我可以访问节点中的DOM吗?”

优秀的问题!不,DOM是浏览器的东西,节点的JS引擎(V8)和所有这些混乱都是完全分开的。然而,有人正在将DOM实现为节点模块,这可能会打开非常令人兴奋的可能性,例如单元测试客户端代码。

“事件驱动的编程不是很难吗?

这取决于你。如果您已经学会了如何在浏览器中处理AJAX调用和用户事件,那么习惯于节点不应该是一个问题。

无论哪种方式,测试驱动开发真的可以帮助您提出可维护的设计。

“谁在使用它?”

节点wiki中有一个小/不完整的列表(滚动到“使用节点的公司”)。雅虎正在尝试YUI的节点,Plurk正在使用它用于大型彗星,而Paul Jacob(jQuery UI的名声)正在建立一个令人兴奋的游戏引擎,后端有一些节点。Joyent雇佣了Ryan Dahl(节点的创建者),并大力赞助开发。

如果您有更多的问题,欢迎评论!

:这个比喻显然是一个简化,但如果在现实中很难找到一个非阻塞观念的对手。

posted @ 2017-10-26 19:26  ChenYaNi  阅读(117)  评论(0)    收藏  举报