我正在使用节点JS应用程序并且我已经创建了带有模块的新js文件。在这个模块中我只导出了一个函数,在这个模块中我可以说我还有两个函数只用于内部使用并且不应该暴露在外面,每个函数使用不同的需求模块如下:
module.exports = function (app, express) {
var bodyParser = require('body-parser'),
url = require('url'),
http = require('http');
.....
};
function prRequest(req, res) {
httpProxy = require('http-proxy');
....
}
function postRequest(req, res) {
url = require('url');
....
}
我的问题来自最佳实践,我应该在哪里提出要求(对于网址http等)
1.在所有需要它的功能中?在我的情况下是内部和外部的
2.globally在每个函数可以使用的文件中?
3.如果两个不行,我应该在哪里放置我应该在两个函数中使用的require URL?更好地放入函数或全局或者它不重要
答案 0 :(得分:5)
模块应该暴露在函数之外,因为每次调用函数时调用require都会增加额外的开销。比较:
const url = require('url');
const start = Date.now();
for (let i = 0; i < 10000000; i++) {
url.parse('http://stockexchange.com');
}
console.log(Date.now() - start);
为:
const start = Date.now();
for (let i = 0; i < 10000000; i++) {
require('url').parse('http://stackexchange.com');
}
console.log(Date.now() - start);
在我的机器上,前者需要95.641秒才能完成执行,而后者需要125.094秒。即使您导出使用所需模块的函数,它在导入时仍然可以访问其文件中的其他变量。所以我会在每个文件中本地声明模块,而不是全局。
编辑:这意味着你想要改为:
var bodyParser = require('body-parser'),
url = require('url'),
http = require('http');
module.exports = function (app, express) {
....
};
var httpProxy = require('http-proxy');
function prRequest(req, res) {
...
}