Node.js emitter.removeListener(事件,监听器)的时间复杂度/效率

时间:2014-05-28 16:19:17

标签: javascript node.js big-o time-complexity

Node.js'的时间复杂度是多少? EventEmitter.removeListener(event,listener)方法根据绑定到发射器上特定事件的侦听器数量?

链接:http://nodejs.org/api/events.html#events_emitter_removelistener_event_listener

对于普通情况,它是O(n)还是更接近O(1)?

基本上,我可能有数万个侦听器绑定到同一个事件,我需要将removeListener操作设置为O(1)。

1 个答案:

答案 0 :(得分:1)

EventEmitter source code

它是O(n),因为第230行有for循环。之后有Array.splice

用于在数组中查找侦听器的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);