• Node.js是什么[译]


    当我向人们介绍Node.js的时候,一般会有两种反应:多数立刻表示“哦,这样啊”,另外的则会感到困惑。

    如果你是第二种的话,我会试着这样解释node:

    • 这是一个命令行工具。你可以下载一个tar包,然后编译安装。
    • 在terminal中输入“node my_app.js”就可以运行起来你的javascript代码。
    • JS都是在V8引擎(这也是Google Chrome这么快的原因)中运行的。
    • Node提供了访问文件和文件系统的API。

    “但是我可以用ruby、python、php、java。。。处理任何事!”

    是的,你说得对。Node实在是太独特了。而且Node只是一个工具,还不能替代你的常规工具,至少现在还不能。

    “进入主题”

    如果你要再同事处理多个事情的时候,Node基本上是一个不错的选择。你有没有写过一堆代码,然后你说:“希望这些代码可以并行执行”?好吧,node中的代码都是并行执行的,除了你的代码。

    “瓦特?”

    是的,除了你的代码都是并行执行的。你可以这样理解,把你的代码想象成一个国王,而node就是他得一堆跟班。

    每一天的开始都会有一个小跟班叫醒这个国王,然后问他需要什么。这个国王给这个跟班一个任务列表,然后去睡回笼觉。这个跟班把任务分配给其他的跟班,然后他们就开始工作了。

    每当一个跟班完成了一个任务,他就站在国王的寝室外等待汇报。国王每次只让一个跟班进来向他汇报工作。有时,国王会给某个跟班更多地任务去处理。

    生活很美好,因为国王的跟班们并行执行他分配的任务,但是每次只有一个完成任务的跟班可以汇报。这样国王可以集中注意力。

    “这很棒,不过可以放下你的比喻来电干活吗?”

    当然,来一段简单的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完成一个任务,回调就会触发。但是每次只可以有一个回调被触发,直到这个回调执行完成。其他回调都需要等待。另外,回调执行的顺序是不能保证一定和调用回调的顺序相同的。

    “所以,我不用担心代码同事访问同一个数据结构了?”

    是额,这就是Node.js的单线程、时间循环的魅力所在了。

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

    第一个原因就在于效率。在一个web应用中,你主要的时间消耗就在于数据库查询。使用node,你可以同时执行你的全部查询,时间可以压缩到只需要用最慢的查询消耗的时间就可以返回。

    另一个原因是javascript。你可以用node分享前后端的代码。Javascript已经在成为全站语言的路上了。无论你使用过python、ruby、php还是java,你都会在开发中或多或少的接触过javascript。

    最后一个原因是速度。V8不是地球最快的动态语言解释器也非常的接近了。我还真是想不出任何语言能像javascript一样如此大刀阔斧的提高执行速度。而且,node的I/O组件非常轻量级,可以最佳的发挥你的系统的I/O能力。

    “所以你是说我应该使用node来开发我的web app了吗?”

    是也不是。Node.js显然可以胜任你需要完成的任何工作。但是,如果这事还有deadline的话,你就需要考虑一下的东西了:

    • 高并发,低返回时间是否必要。这是node的擅长领域。
    • 项目有多大?小的项目还好,大项目的话就需要考虑可用的库,修改bug的资源等的问题了。

    “Node在Windows上可以运行吗?”

    是的。在0.6之后的版本可以在Windows上运行。你不会再想用老旧版本的node了吧。

    “我可以在node中访问HTML DOM吗?”

    好问题。但是不可以。DOM是浏览器的东西了。node的JS引擎(V8)和那些东西是相互独立的。但是有人试图开发这么一个模块。

    “事件驱动的变成难吗?”

    这就要看你了。如果你已经使用了AJAX调用,处理浏览器里的用户事件,那么这就不会成为一个问题。

    无论如何,测试驱动的开发可以让你形成一个可维护的设计。

    “谁在用?”

    你可以参考node的“使用Node的公司”列表。很多的公司已经在使用了。

    “接下来去哪儿学习?”

    Tim Caswell的博客不错。

    好了就写到这里了。

    原文:http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb

  • 相关阅读:
    spyder学习记录---如何调试
    Pycharm学习记录---同一目录下无法import明明已经存在的.py文件
    python库之matplotlib学习---图无法显示中文
    python之字典遍历方法
    python库之matplotlib学习---关于坐标轴
    将博客搬至CSDN
    C代码实现栈
    Android进程间通讯
    Android进程间通讯之messenger
    C代码实现非循环单链表
  • 原文地址:https://www.cnblogs.com/sunshine-anycall/p/4685418.html
Copyright © 2020-2023  润新知