AngularJS不关注整个数据集

时间:2015-09-09 16:24:02

标签: angularjs

我的AngularJS控制器中有以下手表:

$scope.$watchCollection('vm.currentDateScheduler', function(newValue, oldValue) {
        makeSomethingwithALotOfDatasets();
        });

e.g。 400个数据集在方法 makeSomethingwithALotOfDatasets 中处理。 当我立即更改数据集(删除,更新或创建),然后 watchCollection 为所有400个数据集调用。 是否有可能禁止watchCollection用于其他399个数据集 - 这个问题是因为我将拥有可能的最佳性能。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我建议你看看debounce technique。有了它,您可以控制调用某个函数的频率。 There is a short article about it

为了简单起见,我将使用lo-dash库中的debounce函数并将您的代码更新为:

$scope.$watchCollection('vm.currentDateScheduler', function(newValue, oldValue) {
    makeSmthWithDebounce();
});

//makeSomethingwithALotOfDatasets will be called once after 100 ms from last calling of makeSmthWithDebounce function.
function makeSmthWithDebounce = _.debounce(makeSomethingwithALotOfDatasets, 100);

使用相同方法的小example on plunker

还有throttle technique。如果您想在特定时间段内仅调用一次函数,这将非常有用。

Debounce vs. throttle

  

这两种技术都回答了同样的问题"随着时间的推移,某个功能可以多久调用一次?"以不同的方式:

     
      
  • 辩解:将其视为"将多个事件分组在一个"中。想像   你回家了,进入电梯,门正在关闭......   突然你的邻居出现在大厅里并试图跳上去   电梯。讲礼貌!为他敞开大门:你在贬值   电梯出发。考虑到同样的情况会发生   再次与第三人,等等...可能推迟了   离开几分钟。
  •   
  • 节气门:把它想象成一个阀门,它   规范执行的流程。我们可以确定最大值   在特定时间内可以调用函数的次数。所以在   电梯类比..你有礼貌,让人们进入10秒,   但是一旦延迟过去,你必须去!
  •