调用 this.$scope.$digest(); 的影响
Impact of calling this.$scope.$digest();
我想知道在每次 AJAX 下载脚本后调用 this.$scope.$digest();
是否有任何影响。我正在使用 SignalR 从服务器获取数据。数据一进来,我就想将数据绘制到网格上。虽然我在 controller js 中的功能在眨眼的时间内执行,但 UI 的绘制大约需要 3 到 4 秒,这是不可接受的。
Angular Batarang 说 6.8 毫秒和 1542 个观察者。
如何优化页面?
您的问题可能有两个原因。要么您经常检索数据,并在每次收到数据时都尝试重新绘制。或者您正在检索大量数据并尝试更新视图中非常大的控件。以下是解决这两个问题的方法:
- 数据检索速度比更新速度快
为此,您需要在检索到的数据和 $scope
数据之间创建一个缓冲区。基本上,无论何时收到新数据,都应该将更改推送到不在范围内的数据结构。这样您就可以尽可能快地获取数据,并且不会影响渲染。然后您需要一个启发式方法来决定何时重绘数据。这可能基于计时器,或数据更改后的某些东西。一旦此条件为真,您将数据更改复制到您的 $scope
对象,这将更新视图。
- receive data -> write to non scope buffer
- when some condition is met -> write buffer or buffer changes to $scope
- 检索到的数据量大,视图又大又复杂
对于这种情况,您唯一的选择就是以某种方式简化视图。对于网格,这可以是某种分页或限制约束。有很多 angular 网格可以做这些事情,我只想找一个更适合你的情况。
我想知道在每次 AJAX 下载脚本后调用 this.$scope.$digest();
是否有任何影响。我正在使用 SignalR 从服务器获取数据。数据一进来,我就想将数据绘制到网格上。虽然我在 controller js 中的功能在眨眼的时间内执行,但 UI 的绘制大约需要 3 到 4 秒,这是不可接受的。
Angular Batarang 说 6.8 毫秒和 1542 个观察者。
如何优化页面?
您的问题可能有两个原因。要么您经常检索数据,并在每次收到数据时都尝试重新绘制。或者您正在检索大量数据并尝试更新视图中非常大的控件。以下是解决这两个问题的方法:
- 数据检索速度比更新速度快
为此,您需要在检索到的数据和 $scope
数据之间创建一个缓冲区。基本上,无论何时收到新数据,都应该将更改推送到不在范围内的数据结构。这样您就可以尽可能快地获取数据,并且不会影响渲染。然后您需要一个启发式方法来决定何时重绘数据。这可能基于计时器,或数据更改后的某些东西。一旦此条件为真,您将数据更改复制到您的 $scope
对象,这将更新视图。
- receive data -> write to non scope buffer
- when some condition is met -> write buffer or buffer changes to $scope
- 检索到的数据量大,视图又大又复杂
对于这种情况,您唯一的选择就是以某种方式简化视图。对于网格,这可以是某种分页或限制约束。有很多 angular 网格可以做这些事情,我只想找一个更适合你的情况。