0

我目前正在构建一个相当大的基于 Web 的应用程序。我的工作是使用 JavaScript 和 jQuery 构建界面。最终应用程序将使用 Ajax、C# 和 SQL。因此,在任何时间点都会发生很多事情。

我需要听一个事件。目前我正在使用 mouseover 和 mouseout 事件的组合来触发此事件,但它并没有涵盖我所有的低音。

因此,我正在考虑使用 JavaScript 间隔计时器来定期检查事件是否应该触发。我很犹豫是否这样做,因为担心我的代码太慢了。

那么我的问题是这会减慢我的其余代码多少?

我意识到这取决于相应函数中运行了多少代码,所以这里是发生的事情的快速列表:

  • 我使用 e.pageX 和 e.pageY 获得鼠标坐标。
  • 我使用 document.elementFromPoint 检查您当前悬停的元素。
  • 我检查上面提到的元素是否有一个特定类的父类 .closest
  • 如果是这样,则触发该事件。

所以总而言之,我想知道每隔几毫秒执行一次上述操作是否会显着减慢我的应用程序

任何建议将不胜感激。

4

2 回答 2

0

下面是一个 Javascript 间隔计时器如何减慢应用程序的示例:

HTML:

Function calls: <span id="info"></span>
<br>
<input type="text"/>​

Javascript:

$(document).ready(function() {
    window.setInterval(function() {
        foo();
    }, 13);
});
var calls = 0;

function foo() {
    calls++;
    $("#info").html(calls);
    fib(35); // calculate fibonacci numbers
}

function fib(n) {
    return n < 2 ? n : fib(n - 1) + fib(n - 2);
}​

尝试在文本框中输入一些文本,您将看到应用程序的反应迟钝。根据您 PC 的硬件,您将看到您输入的文本或多或少有延迟。更改fib()函数的参数将使应用程序“更快”(作为参数的编号越小)或“越慢”(参数数量越多)。较小的数字(意味着函数执行速度很快)不会降低应用程序的性能。

因此,对于您当前的情况,我认为间隔计时器不会显着减慢您的应用程序。但有几点需要考虑:

  • 该应用程序是否仅在具有快速硬件的桌面浏览器上使用?
  • 该应用程序是否也被移动设备/平板电脑使用?这些通常具有更差的性能。
  • 目前,间隔计时器只做非常简单的事情。但是未来呢?也许有时会添加越来越多的功能,因为它是开发人员最简单的方法。

因此,如果可能,我建议避免使用间隔计时器。

于 2012-08-23T04:48:03.653 回答
0

更多的是评论而不是答案,但对于评论框来说太多了。

当然这应该有效:

$('.myClass').on('click', '*', function () {
    ...
});

或者

$(documnt).on('click', '.myClass *', function () {
    ...
});

取决于.myClass元素是由 AJAX 创建DOMContentLoaded还是由 AJAX 创建。

于 2012-08-22T10:16:20.310 回答