Всегда ли выполняются события JavaScript, даже если никто не слушает?

Всегда ли запущены события в JavaScript, даже если нет подключенных слушателей?

Давайте скажем "mousemove", я перемещаю мышь, но во всем приложении нет слушателей, будет ли браузер по-прежнему создавать новое событие и запускать его, или он будет оптимизировать и учитывать тот факт, что если нет прослушивателей событий, просто игнорируйте данные.

Я предполагаю, что каждый браузер работает по-разному, и я предполагаю, что они используют шаблоны, такие как наблюдатель, а что нет, но есть ли спецификация вокруг того, как это должно быть?

Ответ 1

Не стесняйтесь понижать это, если вы считаете, что это не правильно, но из моего понимания и согласно DOM Level 2 Events Spec существует ощущение, что события всегда построены и выполнены, но слушатели должны быть там, конечно, чтобы их зарегистрировать.

Причина, по которой я говорю "есть смысл, что события всегда строятся и выполняются", объясняется тем, что Spec упоминает, что

Этот метод позволяет регистрировать прослушиватели событий на событии цель. Если EventListener добавлен в EventTarget, пока он обработка события, это не будет вызвано текущими действиями , но может быть запущен на более позднем этапе потока событий, например пузырьковая фаза. Если несколько идентичных EventListeners зарегистрированы на тот же EventTarget с теми же параметрами, что и повторяющиеся экземпляры отбрасываются. Они не вызывают вызов EventListener дважды и поскольку они отбрасываются, их не нужно удалять с помощью removeEventListener.

Поэтому, если слушатели событий динамически добавляются, должен быть способ знать страницу для регистрации и прослушивания. Как каждый браузер обрабатывает это, возможно, отличается от @JAAulde, упомянутого выше, но я не думаю, что браузеры будут оптимизированы для того, чтобы прослушиватель событий существовал или не был или, по крайней мере, не был радикальным.