gpt4 book ai didi

javascript - 在 Javascript 中调度大量额外事件的效率如何?

转载 作者:行者123 更新时间:2023-11-30 13:10:12 25 4
gpt4 key购买 nike

我正在构建一个增强标准 JS 输入事件的库。

这意味着在 ARM 设备的浏览器中以输入采样率 (60Hz) 触发大量多点触摸事件。

我看过this jsperf它在我的 1.7Ghz Sandy Bridge i5 上产生大约 250,000 次操作/秒,我将很快在那里测试我的 iPhone5 和 Nexus7。

我的问题是未监听的事件会被快速处理吗?

如果我知道事件没有被监听,是否还有一种方法可以跳过生成事件的处理?

最佳答案

我认为 jsperf 在调度和处理事件时混淆了水域,因为在每次测试循环迭代时也会添加和删除事件监听器。听起来您的用例具有高频率的调度和处理事件,但对添加和删除事件处理程序的要求相对较低。

我放在一起a jsperf着重于用自定义事件包装 native 事件,然后分发自定义事件。测试场景基于:

  • 是否存在自定义事件的监听器
  • 与自定义事件关联的数据的立即初始化与延迟初始化
  • 上述因素在处理“轻”与“重”初始化需求时的影响

为了测试“重”与“轻”的初始化需求,每个自定义事件都会创建一个包含 10 个或 1000 个随机数的数组。

关于自定义事件数据的延迟初始化:

  • 当有监听器存在时,惰性初始化事件通常会慢一些。对于“轻型”数据,它有时低至立即启动事件速度的 0.8 倍。
  • 如果没有监听器,延迟初始化的数据对于“轻”和“重”数据通常都更快。对于“大量”数据,它通常要快 2 到 10 倍。

My question is will an unlistened-to event be processed quickly?

在我所见的一切中,未监听的事件总是比具有关联处理程序的事件处理得更快。但是,我认为这只会在事件处理程序本身相当缓慢且成本高昂的情况下产生很大的影响。此外,创建自定义事件的成本越高,无论以哪种方式创建自定义事件,这就越不重要。

Also is there a way to skip processing for generating an event if I know the event is not being listened to?

我想到了两件事:

  • 将事件是否正在监听的知识公开给生成和调度事件的进程,然后让该进程在不知道没有任何监听的情况下跳过创建事件。

  • 听起来生成自定义事件的代码会在某个时刻监听 native 事件,然后基于 native 事件创建自定义事件。在这种情况下,您可以忽略 native 事件,直到添加了自定义事件的事件监听器,然后在删除了自定义事件的所有监听器后再次忽略 native 事件。

关于javascript - 在 Javascript 中调度大量额外事件的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14157786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com