因此,为了方便和可读性,最好将变量声明为最高,即
但是我想知道js如何处理需要文件。它是在声明中加载还是在执行时加载?在声明顶部
之间是否存在有意义的差异(如果只需要一个“文件”来运行程序)var File1 = require('../api/file1.js');
var File2 = require('../api/file2.js');
var File3 = require('../api/file3.js');
var File4 = require('../api/file3.js');
var ManyOtherRequiredFiles = require('..');
if(1){
var file = new File1();
file.run()
}else if(2){
var file = new File2();
file.run()
}else if(3){
var file = new File3();
file.run()
}else{
var file = new File4();
file.run()
}
或者没有声明,但在需要时声明:
var ManyOtherRequiredFiles = require('..');
if(1){
var File = require('../api/file1.js');
var file = new File();
file.run()
}else if(2){
var File = require('../api/file2.js');
var file = new File();
file.run()
}else if(3){
var File = require('../api/file3.js');
var file = new File();
file.run()
}else{
var File = require('../api/file4.js');
var file = new File();
file.run()
}
这两个选项之间的内存是否存在显着差异?如果是这样,在需要时需要文件是最好的方法吗?
如果没有,是否声明并创建新的实例,无论是差异还是更差?
var File1 = require('../api/file1.js');
var file1 = new File1();
或
var file1 = new require('../api/file1.js')();
等;
答案 0 :(得分:3)
require
函数,就会加载模块。
加载的每个模块都使用文件的扩展路径作为缓存键进行缓存。
如果你加载同一个文件5次,它只会被加载一次因为缓存键是相同的 - 即使你指定了不同的路径,例如“../file.js”或“../ .. /foo/file.js“ - 只要这两个路径都指向同一个文件,相对于你进行require
调用的任何地方,它将重新使用已经加载的模块。
这两个选项之间的内存是否存在显着差异?;
稍微,但只有在你最终加载文件之前。
将另一个模块加载到内存中使用的内存量可以忽略不计。它是在该模块中使用快速加起来的代码。
例如,你可能有一个只有3或4行代码的非常小的文件......但是这个代码可能循环10亿次+,每次迭代使用大块内存。您的关注点不应该是通过加载模块来占用大量内存,而是通过您编写的代码使用内存。
另外,延迟加载模块的想法会影响性能而不是内存。
require
调用相对昂贵,因为它必须同步发生。同步文件访问将阻止应用程序中的所有,直到文件加载完毕。
因此,以及用于加载模块的内存占用空间小,最好在app启动周期开始时加载所有模块。只需将require
调用放在文件的顶部即可完成。
如果没有,是否声明并创建新的实例,无论是差异还是更差?
如果你只需要在给定模块中使用一次文件
,这几乎没有区别