某天,运行React页面时前端控制台有如下node报错:
warning: possible EventEmitter memory leak detected. 11 request listeners added. Use emitter.setMaxListeners() to increase limit.
本文记录了解决该问题的方法。
问题原因
默认情况下,对于特定的事件,如果监听器超过10个,就会输出这个警告用于提醒。该警告对于寻找内存泄露有一些作用,但并不是每个event都应被限制在10个以内。
解决问题
治标
调用emitter.setMaxListeners(n)
方法,该方法可以设置特定事件监听器的最大数量。
对于React前端页面,ipcRenderer
就是继承自Node Event的实例,直接调用对象方法即可。
ipcRenderer.setMaxListeners(100);
治本
首先确认那么多监听器是不是必须的。
对于一个组件下有一堆子组件的情况,如果每个子组件都去监听相同的事件的话,有101个子组件怎么办?100次监听性能如何?200次呢?
可以考虑将数据保存在父组件state中,通过props传递给子组件,或者考虑其他方法。
引用资料
- [头图]【Electron】Electron Electron Logo
- [文档]【nodejs.org】Nodejs Documentation Event