【问题标题】:Impact of calling this.$scope.$digest();调用 this.$scope.$digest(); 的影响
【发布时间】:2016-09-23 14:23:43
【问题描述】:

我想知道在每次 AJAX 下载脚本后调用 this.$scope.$digest(); 是否有任何影响。我正在使用 SignalR 从服务器获取数据。数据一进来,我就想将数据绘制到网格上。虽然我在控制器 js 中的功能在眨眼的时间内执行,但绘制到 UI 大约需要 3 到 4 秒,这是不可接受的。

Angular Batarang 表示 6.8 毫秒和 1542 名观察者。

如何优化页面?

【问题讨论】:

  • 瓶颈是否可能是一次绘制的项目太多?您是否尝试过使用 'limitTo' 指令或其他方式进行本地分页?
  • 是的。我也在申请 limitTo。

标签: javascript angularjs angular signalr


【解决方案1】:

您的问题有两个可能的原因。要么您经常检索数据,并且每次收到数据时都尝试重新绘制它。或者您正在检索大量数据并尝试更新视图中非常大的控件。以下是解决这两个问题的方法:

  1. 数据检索速度快于更新速度

为此,您需要在检索到的数据和$scope 数据之间创建一个缓冲区。基本上,每当您收到新数据时,您都应该将更改推送到不在范围内的数据结构中。通过这种方式,您可以尽可能快地获取数据,并且不会影响渲染。然后,您需要一个启发式方法来决定何时重绘数据。这可能基于计时器,或者数据更改后的某些东西。一旦此条件成立,您将数据更改复制到您的 $scope 对象,这将更新视图。

- receive data -> write to non scope buffer
- when some condition is met -> write buffer or buffer changes to $scope
  1. 检索的数据量大,视图大而复杂

对于这种情况,您唯一的选择是以某种方式简化视图。对于网格,这可以是某种分页或限制约束。有很多角网格可以做这些事情,我会寻找更适合你情况的。

【讨论】:

  • 我认为选项 2 超出了我们的应用程序的范围,因为它是一个日志查看器。我想我应该选择选项 1。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2016-10-08
  • 2013-05-13
  • 1970-01-01
相关资源
最近更新 更多