Page 441 - AngularJS权威教程
P. 441
32.2 优化$digest 循环 421
19
第32章 20
优化Angular应用
21
22
显然,Angular在开发期间就做了很大的优化,但是在性能方面它是如何定位的呢?为了让 23
它尽可能快,我们还能做些什么呢?
对于大多数Web应用程序而言,Angular的速度已经足够快了,因此无需特意优化它的性能。 24
当你的应用程序变慢或者表现不佳时,才需要动手优化Angular应用。
25
32.1 优化什么
26
为了了解应该集中优化应用的哪些部分,需要理解Angular在幕后发生了什么事情。对于任
何应用程序,我们都应该从问题的起因开始。
27
32.2 优化$digest 循环
28
查找性能问题,最明显的地方是从$digest循环开始。简而言之,Angular通过运行一个监控列
表来跟踪实时数据绑定。页面上每一个可能改变的实时数据都有一个监控函数。 29
第24章详细讨论了$watch列表和$digest循环。
30
每个监控列表都可能导致$digest循环花更多的时间完成渲染,因为Angular需要跟踪值,同
时检查它在每个循环中是否发生变化。
31
限制不必要的监控数量会获得最大的性能提升。此外,双向数据比较应尽量简单,这样会带
来更多的性能提升,因为这样浏览器可以快速地检查它们。
32
在你的应用中,你应该留心双向数据绑定的数量,对于页面上每个$digest循环中的数据绑
定不应该超过2000个。
33
有时,甚至不需要在应用程序中运行完整的$digest循环。想象一下,有个一秒钟查询服务
器多次的轮询。如果我们收到一个websocket事件,触发一个完整的digest循环来处理每条消息,
这将会得到相当慢的应用程序。 34
推荐使用websocket,因为它们在生产中更加友好并且不容易出错。
35
app.factory('poller', function($rootScope, $http) {
var pollForEvent = function(timeout) {
$http.get('/events') 36
.success(function(data) {