javascript – Angular.js缓存$编译模板/渲染ng-repeat内指令的性能

我有一个渲染表格单元格的指令(请参阅我在这里编译它的方式,基本上在链接fn Angular.js directive template using variable from parent/inherited scope中使用$compile),现在这用于两个ng-repeats,一个用于行,一个用于列,所以它是基本上

<ng-repeat row in rows>
  <ng-repeat column in columns>
    <my-cell-directive />
  </ng-repeat>      
</ng-repeat>

它有50行和8列,对(渲染)性能有很大的影响(无论如何都非常明显).

所以我一直在寻找一种方法来改进它.首先,我试图摆脱列的内部重复,创建一个my-cols指令,它在内部迭代列,找到它们的模板,创建一个字符串(里面有8列),然后编译它.其中将编译量从400降低到50.但它在渲染方面并没有明显改善(确实如此,但只有约15%).

现在我的另一个想法是将它减少到只有一个编译方式,基本上在ng-repeat的第一次迭代中编译它,然后保存(缓存)编译结果,这样指令就会使用它而不是一遍又一遍地编译它,只需用当前迭代中的绑定值替换绑定值.

有可能以某种方式吗?或者还有其他方法可以提高渲染速度吗?

解决方法:

如果可能的话,你应该避免在链接函数中使用$compile.你可以缓存$compile的parital结果.

使用编译对象cloneAttachFn的第二个参数

directive('lol', function($compile){
  var compiled = $compile(template);
  return function(scope, element, attr){
    compiled(scope, function(clonedElement, scope){
      element.append(clonedElement);  
    };
  }
})

example

上一篇:使用C,有没有办法检测浮点数/双精度非正规数是否被编译器/系统“标准化”?


下一篇:C如何确定函数是否具有内联功能,实际上是?