Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 身体上的addEventListener(';mousemove';,…)有多糟糕?_Javascript_Performance_Dom_Mousemove_Event Propagation - Fatal编程技术网

Javascript 身体上的addEventListener(';mousemove';,…)有多糟糕?

Javascript 身体上的addEventListener(';mousemove';,…)有多糟糕?,javascript,performance,dom,mousemove,event-propagation,Javascript,Performance,Dom,Mousemove,Event Propagation,我有一个巨大的文档,我需要监听该文档上的所有mousemoves。 我第一个明显的想法是在body上使用addEventListener(),但它可能会带来一些性能问题(你知道,冒泡的东西) addEventListener()-useCapture中有一个神秘的参数。我不太了解DOM中事件传播的内部工作原理,但它看起来很有前途 使用捕获阶段会更好,还是不值得呢?jQuery确实因为(其中live放置了所有处理程序)而弃用了live。对于小东西,这不是问题。但是如果您有一个很深的DOM树或者发生

我有一个巨大的文档,我需要监听该文档上的所有
mousemoves
。 我第一个明显的想法是在body上使用
addEventListener()
,但它可能会带来一些性能问题(你知道,冒泡的东西)

addEventListener()
-
useCapture
中有一个神秘的参数。我不太了解DOM中事件传播的内部工作原理,但它看起来很有前途


使用捕获阶段会更好,还是不值得呢?

jQuery确实因为(其中
live
放置了所有处理程序)而弃用了
live
。对于小东西,这不是问题。但是如果您有一个很深的DOM树或者发生了很多事情,那么这将成为一个大问题。更好的jQuery替代方法是在上使用
,因为您可以决定处理程序可以连接到树的上方(或下方)多远。这限制了事件可以从哪些元素触发,以及冒泡的节点数


这里更大的问题是如何响应事件,因为在移动过程中,
mousemove
会多次触发。将其绑定到主体意味着每次移动鼠标时都必须触发附加到事件的代码。您可能希望限制响应事件的运行内容,或者使附加的代码尽可能精简和无阻塞。

捕获阶段的工作原理如下:不是从最里面的DOM元素上下冒泡,而是从窗口开始捕获并进入

捕获阶段发生在冒泡阶段之前,因此如果您想在事件到达内部DOM元素之前停止它的传播,那么它非常方便

如果无意中这样做,这也可能是一个问题。如果您将mousemove设置为主体中的捕获阶段,并出于某种原因停止该事件的传播,那么其他DOM元素将不再获得mousemove事件


请参阅上面的始终启发性的Quirksmode帖子:

如果您担心气泡过多,可能会更有用。我刚刚重置了mousemove上的超时,但这是另一个问题。