angularjs重新渲染ui多少毫秒间隔?

时间:2015-02-05 03:24:44

标签: angularjs angularjs-scope angular-ui

如标题所示。

当我们绑定像

这样的东西时
$scope.text="ASD";

in html:

this is {{text}}

当我们更改$ scope.text时,由于2路绑定,在html中值也发生了变化。

我的问题是angularjs会更新ui多少毫秒?

编辑:

抱歉,我认为我的问题不够详细,我也很混淆如何完善我的问题。 额外的问题是,

成功获取数据后,有一个$ http, assgin到一些变量,称为$ scope.list。这个列表绑定到ui ngRepeat。因此,当我获得数据时,我直接分配如此

$scope.list = data;

因为它将重新渲染ngRepeat DOM而不是那个,我手动分配数据

pseudo-code 
for loop scope list
  for loop data
    if object equal then assing value to scope list [index] = data[index]
  end loop
end loop

这是示例http://plnkr.co/edit/IHt6AoVUhRsUlBuumEGr?p=preview为什么我手动设置而不是使用" ="

所以回到问题,当我做更新列表时,我也加起来时间条件,例如在循环中

pseudo-code 
for loop scope list
  for loop data
    every 0.001 secs do somethings, and manual set the value to the list
  end loop
end loop

所以在内部循环和分配值的那个时候,UI更新是由事件触发还是在某个时间触发?

3 个答案:

答案 0 :(得分:1)

简短回答:无,但您可能觉得需要几毫秒,具体取决于您的处理器速度以及在更新HTML之前需要检查的角度数量

答案很长:一旦你更新了模型(好吧,在当前javascript上下文的末尾),Angular将执行一个摘要周期,在该周期中它将处理所有$ watchers(in这种情况{{text}}text属性的观察者。如果观察者具有与上次不同的值,则它将运行新的摘要周期,依此类推,直到所有观察者都稳定。然后,它将在浏览器最终呈现视图之前处理HTML并更新所有值。因此,从机器"从观点来看,它在同一个执行环境中是即时的:您的浏览器不会在它们之间呈现任何内容。

现在,如果您的代码是异步的(比如对某个服务器的调用),那么" immediaticity"我一直在谈论从$scope.$apply

的最新电话开始

答案 1 :(得分:1)

AngularJS在每$digest个周期更新UI。 $digest不会以固定的毫秒间隔运行;相反,它是在UI中触发某些事件时运行的(例如,使用ng-model指令更改文本框中的文本)。

正如@Joe指出的那样,如果您在Angular知道的事件中运行代码(例如ng-change事件),那么UI将立即更新。

如果您运行的某些代码在AngularJS不期望的时间运行(例如使用setIntervalsetTimeout,则可以通过调用{{} {{}}来强制执行$digest周期{1}},假设您有一个Angular范围的引用。

答案 2 :(得分:0)

假设$ scope.text =“ASD”在摘要周期内执行,ui将立即更新。

您可以将执行线程视为:

$scope.text="ASD"
...other code in this digest cycle (most likely nothing)
...renderui()

以毫秒为单位,我想这取决于你的CPU速度。

另一种说法是,它会像你自己手动更新DOM一样快,只需要少量的开销来运行角度的摘要周期。