最近我正在研究新的Nodejs项目并找到一些像这样的代码:
function a(){
var http = require('http');
var fs = require('fs');
}
function b(){
var path = require('path');
var http = require('http');
}
function c(){
var fs = require('fs');
}
所以我对这样的编码有一些疑问:
答案 0 :(得分:3)
何时致电require
的一些规则:
默认情况下,在文件开头一次全局要求一个模块,不要重新分配require
结果的变量。
如果要求模块已经被证明会显着影响性能(可能它有需要很长时间才能运行的初始化例程)并且它没有在整个文件中使用,那么在需要的函数内部需要它它
如果必须在函数中计算模块的名称,请在本地加载。
如果您在问题中显示的代码全部在一个文件中并且意图用于制作,那么我会问制作它的编码人员以这种方式使用require
进行保证,如果是好的话由证据支持的实质性原因无法制定,我告诉这个编码器将require
调用移到文件的开头。
答案 1 :(得分:2)
你绝对应该在生产中避免这些。模块确实被缓存,因此它只会在初始调用require
时影响性能,但它仍然可以。此外fs
,http
和path
是内置模块,因此require
- 它们不涉及从磁盘读取,只涉及代码编译和执行,但如果如果你使用非内置模块,你也会在从磁盘读取时阻止事件循环。
一般情况下,如果你使用任何sync
函数,包括require
,你应该只在第一次打勾时使用它们,因为无论如何还没有服务器在监听。
答案 2 :(得分:0)
Manning出版有一本关于节点的好书,名为 Node.js正在运行这就是节点模块需要规则描述它的方式。