我正在尝试使用 Angular.js Batarang Chrome 扩展对 Angular.js 应用程序进行性能调整。该扩展的功能之一是它列出了 Angular.js 在每个 $digest 上检查的所有“监视表达式”,并显示它们需要多长时间来评估。大多数表达式看起来像:
'comment.commenter_profile_url'
'comment.commenter_name'
...
然而,页面上最昂贵的手表表情显然是
"function (){f=i(c);var a,b;if(L(f))if(Xa(f))
{if(e!==h)e=h,x=e.length=0,g++;a=f.length;if(x!==a)g++,e.length=x=a;
for(b=0;b<a;b++)e[b]!==f[b]&&(g++,e[b]=f[b])}else{e!==n&&(e=n={},x=0,
g++);a=0;for(b in f)f.hasOwnProperty(b)&&(a++,e.hasOwnProperty(b)?
e[b]!==f[b]&&(g++,e[b]=f[b]):(x++,e[b]=f[b],g++));if(x>a)for(b in
g++,e)e.hasOwnProperty(b)&&!f.hasOwnProperty(b)&&(x--,delete e[b])}else
e!==f&&(e=f,g++);return g}"
(换行符是我的)。这里发生了什么?我最好的猜测是,这是某种编译过滤的 ng-repeat。(如果我是正确的,我真的很感谢 Angular.js 所做的事情的总结——如果有的话——以使 ng-repeat 和过滤器高效。)