【译】理解node

作者: 乘着风 | 来源:发表于2015-10-20 14:48 被阅读108次

    我已经介绍过Node.js一般会引起两种反应:人们一般会立即“理解”或者因为困惑而终止。

    如果你现在已经在第二组里,请看我试着解释node:

    它是一个命令行工具。你下载一个tarball,解压并安装源代码。

    它允许你在终端输入'node my_app.js'运行Javascript程序。

    JS运行于V8 javascript engine(它是的Google Chrome如此之快)。

    Node提供一个Javascript APT来链接网络和文件系统。

    “但我能用ruby, python, php, java, ... 做任何事!”

    我听到了。你是对的!对不起,Node不是来帮你做工作的奇怪的独角兽。它只是一个工具,它可能不会完全地代替你常规的工具,至少目前不会。

    "直截了当地说!"

    好吧,我会的。基本上,当你需要同时做很多事的时候,Node很好。你曾经写过一段儿代码并说“我希望这能够并行的运行”?好,Node里一切都是并行的运行,除了你的代码。

    "嗯?"

    就是这样,一切都是并行运行的,除了你的代码。为了理解这点,想象你的代码是国王,node是他的仆人军队。

    日子是从一个仆人唤醒国王问他所需开始的。国王给这位仆人一张任务列表然后再小睡一会。这位仆人开始向他的同事们分发任务并让他们工作。

    每当一位仆人完成一份工作,当他完成一个任务,他就排列好给国王汇报。国王每次让一名仆人进来听他汇报。有时,当他走出去的时候国王会给他更多的的任务。

    生活很美好,对于国王的仆人,他们并行地携带他的任务,但是同事只汇报一个结果, 这样国王可以专注。

    "那太棒了,但是你能不做愚蠢的比喻而认真的对我讲吗?

    当然。一个简单的Node程序这这样的:

    代码

    你的代码给Node两个任务读写一个文件,然后休眠。当Node完成一个任务,回调函数被触发。但是这里只能同时运行一个回调函数。直到回调函数执行完毕之前,所有其他回调函数需要排队等待。另外,执行任何一个回调函数是无序的。

    “所以我不需要担心代码同时解除相同的数据?”

    你明白了!这就是全部Javascript单线程/事件轮询的精华!

    "很好,但是我为什么要用他呢?"

    一个原因是高效。在一个web应用中,主要的响应花费在执行查询数据库。使用Node,会减少响应的时间当执行最慢的查询。

    另外一个原因是JavaScript。你能在浏览器和服务器之间分享代码。JavaScript也正在成为全球性的编程语言。无论你过去是否做过python, ruby, java, php...... 在过程中你可能会用到javascript,对吧?

    最后一个原因就是运行速度。V8引擎在这个星球上不断扩张他的境界。我现在 无法想到哪个语言会在速度方面对JavaScript造成威胁。另外,In addition to that, node的I/O设备非常轻量,会让你尽可能地完全地利用你全部系统的空间。

    "所以你劝说我从现在开始用node来做所有我的应用?"

    可以这么说但又不是。一旦你开始挥动node的锤子,一切都看起来像个钉子。但是如果你正在做一个很紧迫的项目,你也许需要以下几个依据来做决定:

    低响应时间,高并行更重要?Node擅长于此。

    项目多大? 小项目还适合。大项目应该仔细评估(多种类库,资源用来修改问题,或者逆流而上,等等)。

    "Node可以运行在windows吗?"

    不行。如果你在windows,你需要用Linux运行一个虚拟机(我推荐VirtualBox)。Windows支持node在计划之中,除非你想帮助他,否则你得屏住呼吸等几个月。

    "在node中我能链接DOM吗?"

    问的非常好!答案是不行,DOM是浏览器的东西,node JS的运行引擎应该从那混乱中完全地分开。然而,有些人正在做这样的事:the DOM as a node module, 这会让许多有趣的事变成可能,比如在可以互动进行单元测试。

    "事件驱动编程很难吗?"

    那就不一定了。如果你已经学会了在浏览器里玩AJAX的请求和响应,那么适应node应该不是问题。无论如何,测试驱动开发能帮你想到可维护的设计。

    "谁在用呢?"

    这里是一个小的不完全的列表node wiki(找到 "Companies using Node").Yahoo正在给YUI做node实验Plurk正在应用于很多的comet。并且, Paul Bakaus 正在建立mind-blowing game engine一些node后端的东西。

            ———— 2015.10.15 摘自Debuggable,原文链接

    相关文章

      网友评论

        本文标题:【译】理解node

        本文链接:https://www.haomeiwen.com/subject/qdozcttx.html