如何在運行時釋放Node.js模塊以節省內存或提高整體性能。從Node.js發佈所需的模塊
我的應用程序在運行時動態加載Node.js中的模塊,但不會卸載它們中的任何一個。我正在尋找這樣的功能。在代碼加載模塊後更新已更改的模塊;還可以卸載可能無法繼續使用的模塊。
任何見解?
謝謝。
如何在運行時釋放Node.js模塊以節省內存或提高整體性能。從Node.js發佈所需的模塊
我的應用程序在運行時動態加載Node.js中的模塊,但不會卸載它們中的任何一個。我正在尋找這樣的功能。在代碼加載模塊後更新已更改的模塊;還可以卸載可能無法繼續使用的模塊。
任何見解?
謝謝。
這聽起來像你正在創建某種插件系統。我會看看Node VM的: http://nodejs.org/docs/latest/api/vm.html
它允許你在沙箱中加載和運行代碼,這意味着它完成後,所有內部分配應該再次釋放。
它被標記爲不穩定,但這並不意味着它不起作用。這意味着API可能會在未來的Node版本中發生變化。
作爲一個例子,基於節點的smtp服務器Haraka使用VM模塊來(重新)加載插件。
要卸載腳本,你可以這樣做:
delete require.cache['/your/script/absolute/path'] // delete the cache
var yourModule = require('/your/script/absolute/path') // load the module again
所以,如果你有插件模塊,你可以看這些文件的變化,那麼動態卸載(刪除緩存),然後再要求腳本。
但請確保您沒有泄漏內存,您可以將更改後的模塊重新分配給舊變量。 這是一個方便的工具,您可以檢查內存: node-memwatch。
祝你好運!
刪除緩存是一個有效的選項。但是AndyD指出,我的應用似乎和VM一樣好。感謝您的洞察力。 :) –
有趣,很高興知道:) –
看起來不錯。會放棄它。我確實看過eval作爲選項,但VM更有意義。謝謝! –