了解node.js
Node.js通常在我介绍过的人中引起了两个反应。基本上人们就是立即“得到”,否则他们就会很困惑。
如果你到目前为止已经在第二组,这里是我尝试解释节点:
- 它是一个命令行工具。你下载一个tarball,编译并安装源码。
- 它允许您通过在终端中键入'node my_app.js'来运行JavaScript程序。
- JS由V8 javascript引擎执行(使Google Chrome这么快)。
- Node提供了一个JavaScript API来访问网络和文件系统
“但是我可以做一切我需要的:ruby,python,php,java,...!”
我听到你 你是对的!节点是没有凶手的独角兽,将来为你做你的工作,对不起。这只是一个工具,它可能不会完全替代你的常规工具,至少不是现在。
“到点了!”
好的,我会的。当你需要同时做几件事情时,节点基本上是非常好的。你有没有写过一段代码,并说“我希望这样会并行运行”?那么在节点中,除了你的代码之外,所有的并行运行。
“咦?”
没错,除了你的代码,一切都是平行运行的。要明白,假设你的代码是国王,节点是他的仆人军队。
这一天从一个仆人醒来,问他是否需要任何东西。国王给仆人一份任务清单,再回来睡一会儿。仆人现在将这些任务分配给他的同事,并且上班。
一旦仆人完成任务,他就在国王四分之一之外排队。国王一次让一个仆人,听他报告的事情。有时,国王会给仆人更多的工作出路。
生命是好的,因为国王的仆人平行执行了他的所有任务,只能一次报告一个结果,所以国王可以专注。*
“太棒了,可你可以放弃愚蠢的隐喻,对我说话吗?
当然。一个简单的节点程序可能如下所示:
,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(节点的创建者),并大力赞助开发。
如果您有更多的问题,欢迎评论!
:这个比喻显然是一个简化,但如果在现实中很难找到一个非阻塞观念的对手。

浙公网安备 33010602011771号