在 JavaScript 中,每当我们□□□向事件侦□□□听器附加□□□高性能函□□□□数时,控制函数◈调用频率□□□被认为是○最佳实践。
一切都与性能有关
在构建网□□□页时,性能是一□□□个主要问□□□□题,特别是对□□□于执行动□□□□画和交互□□□的网站。事件侦听□□器是实现□□□□与 JavaScript 交互的常□□□见选择,因为它们□□□用于检测□□□□页面上的□□□□更改并根□□据这些更□□改调用函□□数。确保事件□□□□侦听器脚□□□□本针对性·能进行了□□□优化非常□□□重要。
事件监听器如何影响性能?
让我们看□□□看根据用◤户操作调□□□□用事件侦□□□□听器的频★率。在下面的demo中执行相□□应的事件□□□来查看计△数:事件侦听□□□□器会根据▼它们调用□□□的事件影•响性能。

假设我们□□□□有一个负□□□□责向 DOM 添加新元□□素的函数,并且每次◇用户滚动◤时我们都□□□会调用这□□□□个函数。正如我们♦在演示中□□□□看到的,可以为用□□□户滚动屏□□□□幕的每个□□□□像素调用□□□□滚动事件丨侦听器。
向 DOM 添加元素□□□□会导致重□□□□排,这是浏览□□器计算新☆元素位置□□□的方式。重排以级□□联方式完□□□成,因此更改□□□□一个元素□□的重排将□□导致所有◢后续元素·的更改以□□□及重新渲□□染文档的□□□部分或全□□□部。这些计算□□可能会影□□□□响用户速□□□度并减慢□□□您的页面※速度。您可以在✦本文中阅□□读更多关丨于回流和○重绘如何□□□影响性能□□的信息。
每当我们□□□□将高性能□□□函数附加□□□到事件侦□□□□听器时,控制函数□□□□被调用的□□频率被认·为是最佳□□实践。
Debounce和Throttle是通过控制事件被调用的频率来优化脚本性能的两种方法。
去抖动与油门
debounce 和 throttling 的主要区□□别在于 debounce在用户在□□特定时间□□□内没有执◉行事件时□□□调用一个▲函数,而当用户□□执行一个□□事件时,throttle 在指定的●时间间隔□□调用一个□□□□函数事件。
例如,如果我们□□使用 250 毫秒(毫秒)的计时器◆对滚动函☆数进行去□□抖动,则该函数□□□□仅在用户□□在 250 毫秒内没★有滚动时□□□才被调用。如果我们□□用 250 毫秒的计□□□□时器限制□□□□滚动函数,则该函数▲在用户滚□□动时每 250 毫秒调用□□□□一次。
