2015-07-21 94 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 –