我有一个拖动库,可在每次鼠标移动时移动元素。众所周知,mousemove经常触发,因此迫使浏览器重新绘制。这可以通过在requestAnimationFrame中实际移动来解决。
这是有用的吗?它会提高性能并减少油漆事件吗?有没有我想到的问题?
取决于浏览器和用例。
现在asked by the specs浏览器确实将自己的UI事件(其中包括鼠标事件)设置为阈值。
鼓励实施人员确定最佳频率,以使响应速度与性能保持平衡。
Chrome和Firefox这样做,仅在requestAniamtionFrame回调触发之前,才以屏幕刷新率触发这些事件。因此,在这些浏览器中,这样做不会赢得任何好处,但也不会造成太多损失。
Safari仍然会触发与设备发出的事件一样多的事件,因此在此浏览器中,您将通过保持自己的阈值而获胜。
(注意,如果您希望释放此阈值,则将need to use指针事件代替。]]
现在,这对于避免无用的计算将被下次绘制之前
丢弃的事物很有用。painting将始终被限制为屏幕的刷新率(在requestAnimationFrame callbacks触发之后)。因此,由您决定是否要应用该阈值。例如,尽可能快地更新点列表可能有意义,但是要等待requestAnimationFrame回调实际上进行DOM更改或绘制任何内容。从您对案件的描述开始,看来您确实可以通过等待requestAnimationFrame
回调而获胜,只是因为您可能正在修改CSSOM的框模型。