为什么CommonJS的require函数不是异步的?

时间:2012-12-16 16:22:32

标签: javascript node.js commonjs

在加载CommonJS模块时,我们使用require语句,它是同步的。 但是不加载模块涉及从磁盘上读取它们并解释它们。因此,在我们提倡非阻塞I / O的设置中,require是如何同步的?

更新

我在客户端看到并使用过requireJS,并且可以理解它的异步特性。我想知道的是,为什么在服务器中做这种事情并不普遍(我知道requireJS可以在Node中使用,但这不是重点)。

此外,我想知道在我的代码中是否需要内联模块会阻止我的代码,如果这是一种不好的做法,应该避免使用。

1 个答案:

答案 0 :(得分:3)

require模块通常是您在程序开始时执行的操作。如果您不在程序开头执行此操作,则无论如何都会缓存结果。启动这样的程序:

var fs = require('fs');
var http = require('http');
var oranges = require('oranges');

// Do stuff

与开始这样的工作相同:

require('async', function(err, async) {
    async.map(['fs', 'http', 'oranges'], function(err, modules) {
        var fs = modules[0], http = modules[1], oranges = modules[2];

        // Do stuff
    });
});

不同之处在于其中一个是不必要的复杂。是的,可能会有一些语法糖实现,但它仍然没有任何好处,除了可能是一些微小的边缘情况。