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 关于性能的最佳方法是什么:setInterval()还是body上的全局事件?_Javascript_Performance_Browser_Resources - Fatal编程技术网

Javascript 关于性能的最佳方法是什么:setInterval()还是body上的全局事件?

Javascript 关于性能的最佳方法是什么:setInterval()还是body上的全局事件?,javascript,performance,browser,resources,Javascript,Performance,Browser,Resources,我在进行当前项目时提出了这个问题 我有一个包含大量数据的表,用户可以修改这些数据。根据执行的修改,一系列框会更新它们显示的信息(预算计算、估计价格等) 我想了两种方法来解决这个问题 一种是使用setInterval功能。每隔半秒钟,就会触发读取表中所有数据以更新框的函数 第二种方法是为整个页面设置一个事件: $(document.body).on("keyup paste", function() {calculate();}); 我想知道这两种方法中哪一种是考虑性能的最佳方法。到目前为止,我

我在进行当前项目时提出了这个问题

我有一个包含大量数据的表,用户可以修改这些数据。根据执行的修改,一系列框会更新它们显示的信息(预算计算、估计价格等)

我想了两种方法来解决这个问题

一种是使用
setInterval
功能。每隔半秒钟,就会触发读取表中所有数据以更新框的函数

第二种方法是为整个页面设置一个事件:

$(document.body).on("keyup paste", function() {calculate();});

我想知道这两种方法中哪一种是考虑性能的最佳方法。到目前为止,我会说第二个,因为不知何故,我对反复触发的函数的使用有偏见,但我对这个问题的理解是相当初级的,我可能采取了错误的方法。

根据计算函数的复杂性,我会说第二个选项(关键事件触发器)可能是好的。如果有很多计算在进行,那么你甚至可能想考虑一个密钥触发器和StimeTimeOt的混合,如:

var keyTimeoutDelay;
$('body').on('keyup paste', function(){

  // Check if a timeout is set, and clear it if so...
  if(keyTimeoutDelay) clearTimeout( keyTimeoutDelay );

  // Set a timeout to delay the processing by 500ms.
  keyTimeoutDelay = setTimeout(function(){
    calculate();
  }, 500);

});

function calculate(){
  // Complex calculation stuff
}

此代码将在keyup事件和“粘贴”上运行,但仅当按键之间有500毫秒的延迟时才会调用calculate()函数。您可以通过在键盘上的所有键上运行手指来尝试,calculate()方法只有在您停止“键入”后才会被调用,这取决于calculate函数的复杂性,我认为第二个选项(键事件触发器)可能可以。如果有很多计算在进行,那么你甚至可能想考虑一个密钥触发器和StimeTimeOt的混合,如:

var keyTimeoutDelay;
$('body').on('keyup paste', function(){

  // Check if a timeout is set, and clear it if so...
  if(keyTimeoutDelay) clearTimeout( keyTimeoutDelay );

  // Set a timeout to delay the processing by 500ms.
  keyTimeoutDelay = setTimeout(function(){
    calculate();
  }, 500);

});

function calculate(){
  // Complex calculation stuff
}

此代码将在keyup事件和“粘贴”上运行,但仅当按键之间有500毫秒的延迟时才会调用calculate()函数。您可以通过在键盘上的所有键上运行手指来尝试,calculate()方法只有在您停止“键入”后才会被调用,这取决于calculate函数的复杂性,我认为第二个选项(键事件触发器)可能可以。如果有很多计算在进行,那么你甚至可能想考虑一个密钥触发器和StimeTimeOt的混合,如:

var keyTimeoutDelay;
$('body').on('keyup paste', function(){

  // Check if a timeout is set, and clear it if so...
  if(keyTimeoutDelay) clearTimeout( keyTimeoutDelay );

  // Set a timeout to delay the processing by 500ms.
  keyTimeoutDelay = setTimeout(function(){
    calculate();
  }, 500);

});

function calculate(){
  // Complex calculation stuff
}

此代码将在keyup事件和“粘贴”上运行,但仅当按键之间有500毫秒的延迟时才会调用calculate()函数。您可以通过在键盘上的所有键上运行手指来尝试,calculate()方法只有在您停止“键入”后才会被调用,这取决于calculate函数的复杂性,我认为第二个选项(键事件触发器)可能可以。如果有很多计算在进行,那么你甚至可能想考虑一个密钥触发器和StimeTimeOt的混合,如:

var keyTimeoutDelay;
$('body').on('keyup paste', function(){

  // Check if a timeout is set, and clear it if so...
  if(keyTimeoutDelay) clearTimeout( keyTimeoutDelay );

  // Set a timeout to delay the processing by 500ms.
  keyTimeoutDelay = setTimeout(function(){
    calculate();
  }, 500);

});

function calculate(){
  // Complex calculation stuff
}

此代码将在keyup事件和“粘贴”上运行,但仅当按键之间有500毫秒的延迟时才会调用calculate()函数。你可以用手指在键盘上的所有键上运行来尝试,calculate()方法只有在你停止“键入”后才会被调用。

你可以尝试使用javascript去盎司函数。


您可以尝试使用javascript去盎司函数。


您可以尝试使用javascript去盎司函数。


您可以尝试使用javascript去盎司函数。


您应该使用事件处理程序/侦听器。当数据未被更改时,无需重新计算数据-这是浏览器正在做的不必要的工作。但它当然不一定要在整个身体上。您可以在用户与特定元素(您提到的框)交互时触发事件,而不是根据用户与整个页面的交互方式触发事件

例如,我假设您使用
字段:您可以使用jQuery将“input”事件绑定到每个字段,并在每次触发时运行计算函数。有关更多详细信息,请参阅

在某些情况下,将事件处理程序附加到正文可能很有用,但对于您的情况,似乎只会增加不必要的开销


MDN在现代浏览器中有一个重要的功能—jQuery也不是绝对必要的。

您应该使用事件处理程序/侦听器。当数据未被更改时,无需重新计算数据-这是浏览器正在做的不必要的工作。但它当然不一定要在整个身体上。您可以在用户与特定元素(您提到的框)交互时触发事件,而不是根据用户与整个页面的交互方式触发事件

例如,我假设您使用
字段:您可以使用jQuery将“input”事件绑定到每个字段,并在每次触发时运行计算函数。有关更多详细信息,请参阅

在某些情况下,将事件处理程序附加到正文可能很有用,但对于您的情况,似乎只会增加不必要的开销


MDN在现代浏览器中有一个重要的功能—jQuery也不是绝对必要的。

您应该使用事件处理程序/侦听器。当数据未被更改时,无需重新计算数据-这是浏览器正在做的不必要的工作。但它当然不一定要在整个身体上。您可以在用户与特定元素(您提到的框)交互时触发事件,而不是根据用户与整个页面的交互方式触发事件

例如,我假设您使用
字段:您可以使用jQuery将“input”事件绑定到每个字段,并在每次触发时运行计算函数。有关更多详细信息,请参阅

在某些情况下,将事件处理程序附加到正文可能很有用,但对于您的情况,似乎只会增加不必要的开销


MDN在现代浏览器中有一个重要的功能—jQuery也不是绝对必要的。

您应该使用事件处理程序/侦听器。没有数据时,无需重新计算数据