2

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

更新:

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

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

4

1 回答 1

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
    });
});

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

于 2012-12-16T16:29:20.283 回答