• (翻译)理解NodeJs?


    (原文地址 作者: Felix Geisendörfer) 

    我推荐Node.js给别人,通常得到两种反应:要么恍然大悟,要么感到很困惑。

    如果你是第二类人,我尝试着解释一下什么是Node:

    1. 命令行工具。下载一个打包文件,从源文件编译安装。
    2. 在终端,通过命令'node my_app.js'运行你的JavaScript程序
    3. JavaScript由V8 JavaScript引擎执行(就是让Google Chrome 浏览器运行如飞的那个)
    4. Node 提供了网络和文件系统的JavaScript API

    ”但是我能用这些语言:ruby,python,php,java,...完成一切工作“!


    是的,我知道,你是对的!Node不是独角怪兽(freaking unicorn)能为你完成任何工作。它只是一种工具,可能不会完全替代你通常使用的工具,至少现在是这样。

    ”切入正题吧!“

    好的。你要并行处理一些事情的时候,Node会表现的非常棒。你有没有写过这样的代码”希望能够并行运行“?是的,在Node中,除了源文件[my_app.js]本身,所有的程序都是并行运行的。

    ”呃?“

    对,所有的程序都是并行运行的,除了你的源文件.为了使你明白,打个比方,你的代码是国王,Node是他的佣人大 军(army of servants)。

    每天侍从叫醒国王,问国王是否需要什么。国王给侍从任务清单,然后继续睡觉。侍从将任务分配给同事然后开始工作。

    一旦有侍从完成了任务,他到国王门前排队报告。国王一次只让一个侍从进入,然后听他报告。有时候,回报完毕,国王可能会给他另外的工作。

    生活很美好,因为国王的侍从并行的完成分配的任务,完成一个任务汇报一次,因此国王能够十分专注。*

    ”那样很棒,可是请别用那个愚蠢的比喻,能以极客的方式告诉我什么事Nodejs吗?“

    当然。一个简单的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 两个任务,读、写一个文件,然后sleep。一旦node 完成了一个任务,回调函数就会执行。只能执行一个回调函数。 所有其他的回调函数排队等待知道这个回调函数执行完毕。而且,不能保证回调函数执行的顺序。

     ”因此我们不用担心程序同时存取同一个数据结构?“

     是的,你说的对!这就是JavaScript单线程、事件循环的优美之处! 

    ”很好,但是我为什么要使用它呢?“ 

    第一,高效。在web应用中,响应时间大量耗费在查询数据库上。有了node,你能够立即执行你的查询, 减少执行最慢的查询而带来的响应时间消耗。

    第二,JavaScript。使用node能够在浏览器端和服务器端共享代码。JavaScript正在成为一门通用的语言。 不论你使用Python、ruby、Java、PHP……你总学过一点JavaScript吧,是么? 

    最后,速度。V8不断的将动态解释语言的性能推向极致。我不能想象其它任何语言像现在JavaScript一样,气势汹汹的加快执行速度。 而且,node的I/O设施非常轻巧,使你能够最大限度的利用你的系统I/O能力。

    “ 你的意思是说我应该用弄得写所有的应用程序了吗?“ 

    是又不是。当你把node当成了一把锤子以后,所有的东西都变成了钉子。如果你在做关于有截止时间的工作,你也许 参考下面的作决定:

    • 快速响应、高并发真的对我重要吗?Node真的善于此
    • 项目很大吗?小项目更适合。如果是大项目的话就要仔细 衡量 了(可用的库、源码bug或者两者兼有,等等)

    ”Node运行在windows上面吗?“ 

    不。如果你在windows上面,你需要运行一个虚拟机(我推荐 VirtualBox)来跑linux。node支持

    windows已经在计划中了,不过要是你想在未来几个月内屏息等待,那就不可能了,除非你想帮忙移植。

     ”在node中能使用Dom吗?“

    聪明的问题!不能吧,DOM是浏览器上的东西,幸运的是,node‘s的JS引擎(V8)从那个凌乱的地方独立出来了。但是,已经有人将DOM作为一个模块来实现(the DOM as a node module),很有趣吧,可能在服务器端做客户端的单元测试。

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

    因人而异吧。如果你已经穿越了AJAX和用户事件的荆棘,适应node将不成问题。

    不论哪种方式,测试驱动的开发能够真正的可维护的产品。

    ”谁在使用node呢?“

    wiki上有一个小而且不完全的列表(看”Companies using Node“)。

    Yahoo 用node对YUI进行实验1。 Plurk(扑浪)用node来处理大量的comet。PaulBakaus(因jquery UI而名)正在建立一个动人心弦的游戏引擎  ,后台用了node。Joyent 雇佣了Ryan Dahl(node的创建者)大力支持node的开发。

    哦,还有Heroku 宣布支持(实验性的)托管node.js

    ”在哪里能学到更多的东西?“

    Tim Caswell 很棒的博客How To Node。 在twitter 上follow #nodejs 。

    订阅邮件列表。到IRC来闲逛,#node.js(是的,点号在名字里面)。We're close to hitting the 200 lurker-mark there soon : )【——怎么翻译】

    我将继续在这里写文章 debuggable.com.

    就这么多了。如果你有问题欢迎评论!

    --------------------------分割线-------------------------------

    *:显然,比喻太简单了,可是现实中实在难以找到非阻塞概念对应物,这个比喻是一个折中的理解。

    1. Whyme.Lyu 指出错误 。原为 “Yahoo 因为YUI很有经验。”

  • 相关阅读:
    操盘策略:判断强庄股的四个诀窍
    三类股有望继续走强
    操盘策略:股市空头陷阱五大招数
    每日一招:面对亏损我们应该如何操作(鳄鱼法则)
    (转)一个大户的自白:我是这样被两融打爆的
    3.2、迭代
    3.1、切片
    2.4、递归函数
    2.3、函数的参数
    2.2、定义函数
  • 原文地址:https://www.cnblogs.com/wewe/p/1747352.html
Copyright © 2020-2023  润新知