Node.js的时间复杂度/效率emitter.removeListener(event,listener)
什么是Node.js的EventEmitter.removeListener(event,listener)方法的时间复杂度,根据绑定到发射器上的特定事件的侦听器的数量?
链接: http : //nodejs.org/api/events.html#events_emitter_removelistener_event_listener
对于一般情况,是O(n)还是接近O(1)?
基本上,我可能有成千上万的监听器绑定到相同的事件,我需要removeListener操作是O(1)。
EventEmitter源代码
这是O(n),因为在第230行的for
循环。之后有Array.splice
。
find数组中的监听器是O(n):
for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } }
还有从数组中移除侦听器的O(n):
list.splice(position, 1);