2013-07-16 77 views
4

如何在運行時釋放Node.js模塊以節省內存或提高整體性能。從Node.js發佈所需的模塊

我的應用程序在運行時動態加載Node.js中的模塊,但不會卸載它們中的任何一個。我正在尋找這樣的功能。在代碼加載模塊後更新已更改的模塊;還可以卸載可能無法繼續使用的模塊。

任何見解?

謝謝。

回答

2

這聽起來像你正在創建某種插件系統。我會看看Node VM的: http://nodejs.org/docs/latest/api/vm.html

它允許你在沙箱中加載和運行代碼,這意味着它完成後,所有內部分配應該再次釋放。

它被標記爲不穩定,但這並不意味着它不起作用。這意味着API可能會在未來的Node版本中發生變化。

作爲一個例子,基於節點的smtp服務器Haraka使用VM模塊來(重新)加載插件。

+0

看起來不錯。會放棄它。我確實看過eval作爲選項,但VM更有意義。謝謝! –

1

要卸載腳本,你可以這樣做:

delete require.cache['/your/script/absolute/path'] // delete the cache 
var yourModule = require('/your/script/absolute/path') // load the module again 

所以,如果你有插件模塊,你可以看這些文件的變化,那麼動態卸載(刪除緩存),然後再要求腳本。

但請確保您沒有泄漏內存,您可以將更改後的模塊重新分配給舊變量。 這是一個方便的工具,您可以檢查內存: node-memwatch

祝你好運!

+0

刪除緩存是一個有效的選項。但是AndyD指出,我的應用似乎和VM一樣好。感謝您的洞察力。 :) –

+0

有趣,很高興知道:) –