2015-07-21 53 views
0

我正在研究一个需要加载基于url的特定模块的项目,并且有很多模块,我想知道如果您需要模块,它会炸毁内存吗?如果是这样,是否有在每个模块执行后释放内存的方法?或者有没有比要求模块更好?像fs.readFile然后评估它?您可以在节点中需要无限模块吗?

回答

0

您可以根据需要加载尽可能多的模块,但硬件限制仍然存在。如果你的内存将爆炸 - 将取决于每个模块的内存消耗,程序正在执行的任务以及你拥有的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()更好。

如果您已经完成了所有内存优化,并且仍然没有足够的内存,应用程序将中断,您需要扩展机器。

+3

当你加载一个模块时,它会被添加到模块缓存中,所以我认为GC的所有功能基本上都是对该模块的引用:https://nodejs.org/api/modules.html#modules_caching –

相关问题