当前位置: 首页 > 面试题库 >

Angular.js缓存$ compiled模板/ ng-repeat中指令的渲染性能

滕渝
2023-03-14
问题内容

我有一个用于渲染表单元格的指令(请参阅我在这里如何编译它的方法,基本上是$compilelink fn[Angular.js指令模板中使用父/继承作用域中的变量,现在在两个ng-repeats中使用,一个用于行,一个对于列,所以基本上

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

包含50行和8列的列,对(渲染)性能产生了很大的影响(无论如何还是很明显的)。

所以我一直在寻找一种改善它的方法。首先,我尝试摆脱对列的内部重复,创建一个my-cols- directive在内部对列进行迭代的方法,找到它们的模板,创建一个字符串(其中包含这8列),然后对其进行编译。从而将编译量从400降低到50。但是,渲染的效果确实没有明显改善(效果不错,但只有15%)。

现在,我的另一个想法是以某种方式将其减少为仅一个编译,基本上是在ng-
repeat的第一次迭代中对其进行编译,然后保存(缓存)已编译的结果,因此该指令将使用该结果而不是一次又一次地对其进行编译,只是将绑定值替换为当前迭代中的绑定值。

有可能吗?还是有其他方法可以提高渲染速度?


问题答案:

$compile如果可能,应避免使用内部链接功能。您可以缓存“通过”的部分结果$compile

使用compiled对象
cloneAttachFn
的第二个参数

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



 类似资料:
  • 问题内容: 我正在使用SVG和angular.js进行大型项目,并且需要对svg指令模板的坚实支持。不幸的是,当angular渲染模板时,它将创建DOM节点,而不是SVG节点。我当前的解决方法是使用jquery.svg自己管理创建和删除节点,但是它受到限制。示例:http://plnkr.co/edit/Xk8wM3?p = preview 我想让指令成为实际的svg元素,而不是一些没有任何实际作

  • 问题内容: 目前,我有一个非常微妙的问题要用IE11和AngularJS解决。 我的页面由两个嵌套的ng-repeat组成,以创建一个选项卡集,其中任何选项卡中都有一个表。 这里的代码:http : //pastebin.com/0fffPz5Z 在代码中,每个应用程序的对象都有大约1.000个项目的相关对象。有了Chrome,Safari和Mozilla,我没有问题,一切都超级快!使用IE11,

  • 问题内容: 我正在尝试根据当前项目动态显示ng-repeat指令中的多个模板之一。 我的JSON数据如下所示: 我的目标是动态渲染数据树,每个组包含多个部分。这些组都将具有相同的模板,但是每个部分都应基于名称字段具有自己的模板。 假设顶层HTML是: 理想情况下,每个部分还需要具有自己的范围数据和与其关联的控制器。我很幸运用Knockout构建了这种类型的系统,但是我想了解Angular的做事方式

  • 6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren

  • 问题内容: 我创建了一个生成Twitter按钮的指令。由于这些按钮上的作用域变量可能会更改,因此我需要在按钮发生时重新构建它。目前,我正在使用jQuery 链接元素并重建按钮。 有没有办法让指令完全重新呈现模板呢? 问题答案: 这是一个可重用的指令,您可以使用它在发送事件时重建被包含的内容: 这是一个jsFiddle演示其工作原理:http : //jsfiddle.net/robianmcd/Z

  • 问题内容: 我在模板中有一个需要模板的自定义标签。该属性将由范围填充,然后需要正确的模板。 根据赞美诗的星期和日期,它有多种版本。我期望使用该指令来填充正确的部分。不会读取变量。 有在摘录目录多个文件被标记,… 问题答案: 您可以使用指令。 尝试这样的事情: UPD。 用于观看属性