javascript - 我是否正确使用了Underscore的throttle方法?

标签 javascript jquery performance underscore.js flot

我正在尝试通过 Flot 在图表中创建一条可拖动的线。我有一个函数可以完成此任务,并在某个 bool 值为 true 时在 Flot 的 Plothover 事件(类似于 mouseMove 事件)上执行。该函数被连续调用,这导致生成的动画显着滞后。为了解决这个问题,我尝试了两种方法:

首先我尝试使用setTimeout。这有助于函数更好地运行,但我并不满意。如果网页打开超过一分钟,动画又开始滞后,我不知道为什么。如果有人知道这是怎么回事,任何见解将不胜感激。

其次,我尝试了Underscore的节流功能。我对语法有点不确定,经过一些研究和调试,这就是我所确定的。以下代码位于事件处理程序内:

var throttled1 = _.throttle(singleLine, 50);
throttled1(position);

其中 singleLine 是以下函数,在事件处理程序外部定义:

function singleLine(position) {
      adjustLine1[0] = [position, Number.NEGATIVE_INFINITY];
      adjustLine1[1] = [position, Number.POSITIVE_INFINITY];
      graphData.push({ data: adjustLine1, lines: { show: true }, color: "gray" });
      plot.setData(graphData);
      plot.draw();
      graphData.pop();
}

请记住,plot.draw() 是一个相当长的函数(它重绘整个图表)。不管怎样,它似乎可以工作,因为 singleLine 被throttled1(position)成功调用。然而,它根本没有提高性能。我使用正确吗?也欢迎任何有关如何使这一运行更好的其他见解。谢谢。

最佳答案

var throttled1 = _.throttle(singleLine, 50);

throttled1 必须在事件监听器外部进行初始化,以便它可以在内部逐个事件地跟踪调用和计时器。

关于javascript - 我是否正确使用了Underscore的throttle方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25392667/

相关文章:

javascript - 使 .load 在没有包装器的情况下返回

javascript - 等待添加到 CSS 的图像加载 - JQuery

javascript - 如何使用 jquery 用 html 包装每 3 个子 div?

javascript - 如何在极简条件语句中获得更好的性能?

IE 上的 Javascript 奇怪行为

javascript - 为什么要在函数及其原型(prototype)上设置属性?

javascript - TryCatch 装饰器没有捕获错误

javascript - 在 Javascript 中执行(整数)操作的最有效方法是什么?

java - 为什么 nio.files.copy 比 nio.fileChannel 复制慢很多?

javascript - 如何将十六进制缓冲区转换为十六进制数组?