带有express的Node.js服务器,是什么需要文件和内存的最佳方式

时间:2016-03-22 20:29:49

标签: javascript node.js

因此,为了方便和可读性,最好将变量声明为最高,即

但是我想知道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')();

等;

1 个答案:

答案 0 :(得分:3)

一旦调用require函数,就会加载

模块。

加载的每个模块都使用文件的扩展路径作为缓存键进行缓存。

如果你加载同一个文件5次,它只会被加载一次因为缓存键是相同的 - 即使你指定了不同的路径,例如“../file.js”或“../ .. /foo/file.js“ - 只要这两个路径都指向同一个文件,相对于你进行require调用的任何地方,它将重新使用已经加载的模块。

  

这两个选项之间的内存是否存在显着差异?;

稍微,但只有在你最终加载文件之前。

将另一个模块加载到内存中使用的内存量可以忽略不计。它是在该模块中使用快速加起来的代码。

例如,你可能有一个只有3或4行代码的非常小的文件......但是这个代码可能循环10亿次+,每次迭代使用大块内存。

您的关注点不应该是通过加载模块来占用大量内存,而是通过您编写的代码使用内存。

另外,延迟加载模块的想法会影响性能而不是内存。

require调用相对昂贵,因为它必须同步发生。同步文件访问将阻止应用程序中的所有,直到文件加载完毕。

因此,以及用于加载模块的内存占用空间小,最好在app启动周期开始时加载所有模块。只需将require调用放在文件的顶部即可完成。

  

如果没有,是否声明并创建新的实例,无论是差异还是更差?

如果你只需要在给定模块中使用一次文件

,这几乎没有区别