0
我正在研究一个需要加载基于url的特定模块的项目,并且有很多模块,我想知道如果您需要模块,它会炸毁内存吗?如果是这样,是否有在每个模块执行后释放内存的方法?或者有没有比要求模块更好?像fs.readFile然后评估它?您可以在节点中需要无限模块吗?
我正在研究一个需要加载基于url的特定模块的项目,并且有很多模块,我想知道如果您需要模块,它会炸毁内存吗?如果是这样,是否有在每个模块执行后释放内存的方法?或者有没有比要求模块更好?像fs.readFile然后评估它?您可以在节点中需要无限模块吗?
您可以根据需要加载尽可能多的模块,但硬件限制仍然存在。如果你的内存将爆炸 - 将取决于每个模块的内存消耗,程序正在执行的任务以及你拥有的RAM数量。如果您继续需要模块来测试它是否中断,我相信在将一定数量的模块加载到内存中后它会中断。
当您使用内存密集型模块时,您可以将它们的范围(即require())放入如下函数中:以确保在操作完成后将它们从内存中卸载。
// this code does image manipulation
function resizeImage(filename, cb) {
require('gm').open(filename).size(function (err, size) {
console.log(size);
// do something else with the image
cb(null);
// gm is queued for garbage collection
// after this operation
});
}
fs.readFile
和eval不会比require()
更好。
如果您已经完成了所有内存优化,并且仍然没有足够的内存,应用程序将中断,您需要扩展机器。
当你加载一个模块时,它会被添加到模块缓存中,所以我认为GC的所有功能基本上都是对该模块的引用:https://nodejs.org/api/modules.html#modules_caching –