同一窗口事件的多个侦听器如何影响性能?

问题描述 投票:0回答:1

在一个Web项目中,我对同一窗口事件使用了多个侦听器。

window.addevntlistener("resize", callback)
window.addevntlistener("hasChange", callback)

我假设在窗口上添加多个事件侦听器对性能的影响可以忽略不计。是这样,还是我应该只听一次,并为需要通知的各个单元添加自己的javascript订阅解决方案?

调整大小的侦听器可由呈现在列表中的基本UI元素使用,因此添加了数百个侦听器。

编辑:我知道Does adding too many event listeners affect performance?。但是,这是指元素单击事件。在这种情况下,有多个对象的多个侦听器。在我的情况下,同一对象有多个侦听器,还有一个特殊对象-窗口。

javascript browser
1个回答
0
投票

在Java语言中,您有一个event loop。该机制由一个循环组成,该循环表示按给定顺序调用某些功能的计划。但是,用户事件(例如单击或调整大小)无法在发生之前进行计划。结果,还有一个消息队列(也称为回调队列),您的事件正在等待执行。

enter image description here

当事件队列用尽要执行的功能时,将开始处理消息队列的项目。此时,您的事件将被处理。

基本上,我们所说的是一个永久循环,您在其中放置了一些功能。当然,它会影响性能,因为与未完成的情况相比,要完成的所有事情都会影响性能。但是,在大多数情况下,这并不意味着可以感觉到的任何有意义的差异。

如果我们假设与这些事件关联的函数的复杂度非常低(可能是恒定的),那么由于事件循环,我们仍然具有线性复杂度,您必须在该循环中添加许多事件才能发挥任何性能可以感觉到的差异。

但是,如果您添加的功能非常复杂,则会大大降低性能,请注意,Javascript(通常)是单线程的。因此,如果遇到性能问题,则需要首先检查功能的复杂性。

值得注意的是,事件处理程序仅在给定事件触发时才可能由用户执行。因此,如果您添加一百万个调整大小处理程序,它们本身将不会影响性能(除了添加它们时,这无关紧要),但是当发生调整大小时,将附加到此事件的所有事件处理程序都将执行。 。

因此,如果您在给定事件中遇到性能问题,则需要分析与该事件相关的事件处理程序。如果事件处理程序太多或太复杂,则可以使用web workers(在单独的线程中运行)来执行耗时的作业,因此您的UI在处理事件方面将保持响应。

© www.soinside.com 2019 - 2024. All rights reserved.