Node.js 在响应请求时,我是否应该避免调用require?

Node.js 在响应请求时,我是否应该避免调用require?,node.js,Node.js,requireing模块是否会阻止每个请求?根据,模块在第一个require之后被缓存,但我想看看在响应请求时执行动态require是否是一种反模式。我经常被告知,在node.js中任何类型的阻塞都是不允许的,异步性是其主要要求之一。你可以试试下面的方法 引述 这就是require的实现方式: > console.log(require.extensions['.js'].toString()) function (module, filename) { var content

require
ing模块是否会阻止每个请求?根据,模块在第一个
require
之后被缓存,但我想看看在响应请求时执行动态
require
是否是一种反模式。

我经常被告知,在node.js中任何类型的阻塞都是不允许的,异步性是其主要要求之一。你可以试试下面的方法

引述


这就是require的实现方式:

> console.log(require.extensions['.js'].toString())
function (module, filename) {
     var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
     module._compile(stripBOM(content), filename);
}
你可以在你的应用程序中做同样的事情。我想这样做会奏效:

var fs = require('fs')

require.async = function(filename, callback) {
  fs.readFile(filename, 'utf8', function(err, content) {
    if (err) return callback(err)
    module._compile(content, filename)

    // this require call won't block anything because of caching
    callback(null, require(filename))
  })
}

require.async('./test.js', function(err, module) {
  console.log(module)
})

不,它不会阻止每个请求(只要您每次都需要相同的模块),而且它不是反模式

如果在每个请求上加载相同的模块,则对
require
的任何调用都将立即返回(因为该模块已经被加载、编译和缓存)。但是,如果可能需要许多不同的模块,因此无法从缓存中获益,那么最好执行异步请求

但是像这样的

function handler(req, res) { require('fs').readFile(…); }

没什么大不了的。这只是一个风格的问题。

它不是关于慢或快。需要的是同步操作。这意味着它将在执行时阻塞整个服务器。如果您有100000个连接,所有连接都将等待100000个请求

永远不要使用require内部循环,这是一种不好的做法


所以,您最初的问题的答案是肯定的。

这是缓慢而多余的。但这很好……如果你想要一个真正滞后、缓慢的web服务:)@Markasoftware:错了
require()
缓存模块,因此复制
require()
s很快。