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很快。