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 –