Javascript Narhall和Node.js之间的差异

Javascript Narhall和Node.js之间的差异,javascript,node.js,rhino,narwhal,Javascript,Node.js,Rhino,Narwhal,我是Node.js的新手,我一直在阅读关于Node.js的文章,这是一个基于Rhino的框架 我的问题是: 如果我使用的是Node.js,我可以使用独角鲸及其库/模块吗 Narhall I/O中的库/模块不是被阻止了吗(为什么Node.js如此流行) Node.js是仅用于创建Web服务器还是用于创建一般应用程序,就像Narhall一样 Node.js不应与独角鲸相比较。相反,它应该被比作。与Rhino一样,Node.js也是一个JavaScript解释器 Node.js符合模块规范,因此它的所

我是Node.js的新手,我一直在阅读关于Node.js的文章,这是一个基于Rhino的框架

我的问题是:

  • 如果我使用的是Node.js,我可以使用独角鲸及其库/模块吗
  • Narhall I/O中的库/模块不是被阻止了吗(为什么Node.js如此流行)
  • Node.js是仅用于创建Web服务器还是用于创建一般应用程序,就像Narhall一样

  • Node.js不应与独角鲸相比较。相反,它应该被比作。与Rhino一样,Node.js也是一个JavaScript解释器

    Node.js符合模块规范,因此它的所有库都与CommonJS兼容。看起来,独角鲸也是CommonJS兼容的,这意味着它们可以在Node.js中使用

    但是首先看看Node.js的标准模块,因为它似乎与独角鲸有很多重叠。另外,请查看Node.js可用的第三方模块列表:


    补充答复:

    啊,我现在明白了。独角鲸确实很像Node.js。你说独角鲸是一个框架,把我甩了。我现在明白了,事实并非如此。事实上,介绍页面说,您可以在独角鲸解释器的顶部运行Nitro之类的框架

    Narhall和Node.js之间的区别基本上是,Narhall使用可插入的JavaScript引擎架构,而Node.js只使用。这两种语言都是JavaScript的“shell”(为了避免与术语“解释器”混淆,现在我们将它们称为“shell”)

    我不确定一个人可以在多大程度上使用为任一平台编写的CommonJS库,并在另一个平台上使用它。我想所有的纯JavaScript库都是交叉兼容的。Node.js确实使用了非阻塞I/O模型,因此Narhall的一些二进制模块可能无法在Node.js上正常工作

    不过Node.js强调回调风格的编程(以最大限度地利用非阻塞I/O)。对于一个经验丰富的JavaScript程序员来说,这不是一个问题,因为我们习惯于
    setTimeout()
    XMLHttpRequest
    等等。事实上,作为一个经验丰富的JavaScript程序员,我有点喜欢Node.js的风格。独角鲸感觉太像C了


    示例:

    这就是我所说的独角鲸上节点的不同“感觉”

    在独角鲸中,对文件进行slurping的示例如下:

    var fs = require("file");
    var data = fs.read(myfilename); /* Code stops at this point
                                     * until all data is read
                                     */
    /* Process data here */
    
    在Node.js中,它是:

    var fs = require('fs');
    fs.readFile(myfilename, function(err,data) {
        /* Process data here */
    });
    
    /* readFile returns immediately and code continues
     * executing while file is being read
     */
    
    就像
    setTimeout
    ,读取Node.js中的文件是异步的(您的代码需要等待硬盘查找和读取数据,在此期间您可以运行其他代码)

  • 如果您使用的是Node.js或narhall,则只使用宣传与各自引擎兼容的包和模块。目前,编写在两个引擎上都能工作的应用程序、包和模块有许多细微差别。来自Dojo的Kris Zyp已经投入了相当多的精力使他的软件包在两个系统上都能工作,我想不出还有其他人


  • Narhall的输入和输出模块是阻塞的,很像Python、Ruby、Perl、C、Java等的标准库

    然而,有一类应用程序无法通过阻塞I/O有效地编写,比如在服务器内存中保持状态的游戏,以及与许多客户端的有状态通信。只有实验才能揭示线程或事件循环对于单个应用程序的性能是否更好。但是,在大多数编程语言和库生态系统中编写“事件”应用程序更加困难和危险,因为使用任何阻塞I/O都可以快速消除使用非阻塞I/O的好处,并且阻塞I/O常常隐藏在体系结构的各个层中,甚至和操作系统界面一样低。Node.js令人兴奋,因为它正在创建一个具有严格异步I/O的生态系统,这使它成为第一个编写此类应用程序相当容易的系统

    像Mark Miller和Mark Miller这样的支持者认为异步事件循环编程是编写大多数应用程序的方式,因为它更容易对这些系统中的数据流、并发性和安全性进行推理,并在不损害正确性或完整性的情况下盲目地组合这些子系统

    但是,如果您想利用JavaScript作为一种语言,但又不想购买事件循环编程的额外复杂性,那么Narhall设计用于JavaScriptCore(背后的快速JavaScript引擎)和其他应用程序。使用Rhino可以让您访问。Narhall旨在为JavaScript引擎提供灵活性,但它并没有考虑Node.js的I/O模型。Narhal还被280 North软件生态系统广泛用于构建工具和应用程序服务器,如和Jack

  • Node.js和Narhall都可以用于一般应用程序和web服务器。Node.js特别适合于网络客户端和服务器。Narhall特别适合于Unix风格的程序和JSGI,类似CGI的web服务器,并且设计用于在各种web服务器上运行JSGI应用程序而无需修改

    编写同时在narhal和Node.js上工作的应用程序是困难的,但也是可能的。编写适用于Narhall和Node.js的“包”是可能的,但必须谨慎地完成。如果一个包没有公布它是在narhal和Node.js上设计和测试的,你可以打赌它只能在其中一个上工作

    io:不使用I/O子系统的模块,如解析器、格式化程序、编码器和解码器,特别适合在Narhall和Node.js之间共享代码

    包:NPM(节点包管理器)和Tusk(独角鲸的包管理器)的包布局方式有所不同。它们都使用package.json,但“依赖项”的含义各不相同。《独角鲸》即将发布一个补丁,允许使用它