某天,运行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传递给子组件,或者考虑其他方法。

引用资料

  1. [头图]【Electron】Electron Electron Logo
  2. [文档]【nodejs.org】Nodejs Documentation Event

我来吐槽

*

*