最近,我走过了几个与AngularJS优化技术相关的StackOverflow问题:
AngularJS really slow at rendering with about 2000 elements?
How does data binding work in AngularJS?
大多数答案都提出了一种称为One-time binding的优化技术,但是我的用例表明我不能使用这种方法,我的所有数据都是交互式的,更改是从服务器推送到客户端,再加上需要显示相当多的数据。当服务器通知发生时,需要UI更新。因此,如果我使用一次性绑定,它将破坏我的页面。
我试图分析在我的情况下使AngularJS变慢的原因,并且我发现不是脏检查本身正在减慢过程。现代的javascript引擎能够在几毫秒内检查数万个对象属性。使AngularJS变慢的根本原因是$watch
表达式本身,每个$watch
调用都会使用setTimeout
调用以及一些AngularJS内部开销进行备份。主要问题是这些调用将控制传递给浏览器的内部消息循环,从程序的角度来看,除了在数据显示过程的每个步骤中都有延迟之外什么都不做。
所以我的问题如下:与一次性绑定相反,我希望有一种方法可以将我的单向绑定表达式{{ someObj.someProperty }}
分组到一个$watch
调用中,类似于
{{ myBulkWatch::someObj.someProperty1 }}
{{ myBulkWatch::someObj.someProperty2 }}
...
{{ myBulkWatch::someObj.somePropertyN }}
我知道目前还没有这样的功能,但也许至少可以用现有的Angular乐器来模拟这个功能?
关于这个问题的任何想法?
提前谢谢!