如何在运行时释放 Node.js 模块以节省内存或提高整体性能。
我的应用程序在运行时动态加载 Node.js 中的模块,但不会卸载任何模块。我正在寻找这样的功能,尤其是。在代码加载模块后更新已更改的模块;以及卸载可能不再使用的模块。
有什么见解吗?
谢谢。
如何在运行时释放 Node.js 模块以节省内存或提高整体性能。
我的应用程序在运行时动态加载 Node.js 中的模块,但不会卸载任何模块。我正在寻找这样的功能,尤其是。在代码加载模块后更新已更改的模块;以及卸载可能不再使用的模块。
有什么见解吗?
谢谢。
要卸载脚本,您可以这样做:
delete require.cache['/your/script/absolute/path'] // delete the cache
var yourModule = require('/your/script/absolute/path') // load the module again
因此,如果您有插件模块,您可以观察这些文件的变化,然后动态卸载(删除缓存),然后再次要求该脚本。
但请确保您没有泄漏内存,您可以将更改的模块重新分配给旧变量。这是一个方便的工具,您可以检查内存: node-memwatch。
祝你好运!
听起来您正在创建某种插件系统。我会看看 Node VM: http ://nodejs.org/docs/latest/api/vm.html
它允许您在沙箱中加载和运行代码,这意味着当它完成时,它的所有内部分配都应该再次被释放。
它被标记为不稳定,但这并不意味着它不起作用。这意味着 API 可能会在 Node.js 的未来版本中发生变化。
例如,基于节点的 smtp 服务器 Haraka 使用 VM 模块来(重新)加载插件。