我正在构建一个扩充标准JS输入事件的库。
这意味着在ARM设备的浏览器中以输入采样率(60Hz)触发大量多次触摸事件。
我查看了this jsperf,它在我的1.7Ghz Sandy Bridge i5上产生了大约250,000次操作/秒,我将很快在那里测试我的iPhone5和Nexus7。
我的问题是如何快速处理未经审查的事件?
如果我知道没有收听该事件,还有一种方法可以跳过生成事件的处理吗?
答案 0 :(得分:3)
我认为jsperf在调度和处理事件时会混淆水域,因为事件监听器也会在每次测试循环迭代中添加和删除。听起来您的用例具有高频率的调度和处理事件,但对添加和删除事件处理程序的要求相对较低。
我将a jsperf放在一起,专注于使用自定义事件包装本机事件,然后调度自定义事件。测试场景基于:
要测试“重”与“轻”初始化需求,每个自定义事件都会创建一个包含10或1000个随机数的数组。
关于自定义事件数据的延迟初始化:
我的问题是如何快速处理未经审查的事件?
在我看过的所有内容中,一个未显示的事件总是比具有关联处理程序的事件处理得更快。但是,我认为如果事件处理程序本身相当缓慢且代价高昂,那么这只会产生很大的影响。此外,创建自定义事件的成本越高,如果以任一方式创建自定义事件,这就越少。
如果我知道没有收听该事件,还有一种方法可以跳过生成事件的处理吗?
我想到了两件事:
了解是否正在监听事件是否正在生成和调度事件的进程,然后让该进程跳过创建事件,如果它知道什么都没有正在侦听。
< / LI>听起来生成自定义事件的代码会在某个时刻侦听本机事件,然后根据本机事件创建自定义事件。在这种情况下,您可以忽略本机事件,直到添加了自定义事件的事件侦听器,然后在删除自定义事件的所有侦听器后再次忽略本机事件。