2014-01-28 47 views
4

我聽說有嵌套的ng-repeats會嚴重影響角度的性能,如果它導致大量帶有角度表達式的元素。我實際上遇到了一些我正在嘗試編寫的代碼。我嘗試使用bindonce來提高性能,但沒有多大幫助。我聽說你可以使用指令來提高性能,但是在我寫過指令之前,我不確定如何使用指令來提高這樣的性能。 Here is a jsfiddle顯示問題。嵌套的ng-repeat性能

我意識到這是很多數據,實際上,我應該做某種分頁,但我想了解更多關於Angular和性能的信息。我可以在沒有Angular的情況下呈現相同的數據,並且頁面渲染速度更快。

這裏是嵌套的NG-重複樣子:

<div ng-app="app" ng-controller="myController"> 
<div ng-repeat="module in modules"> 
    {{module.title}} 
    <div ng-repeat="clip in module.clips"> 
     {{clip.title}}<br/> 
     <a ng-repeat="transcript in clip.transcripts" href="transcript.href">{{transcript.text}}</a><br/> 
    </div> 
</div> 

謝謝!

+0

我不認爲你發佈你的小提琴與 – Prodikl

+0

複製http://stackoverflow.com/questions/16114946/ways-to-improve-angularjs - 性能 - 即使是大數目的DOM元素 – DavidLin

+0

糟糕,更新了問題以顯示小提琴。 –

回答

0

我想出瞭如何做到這一點,它確實有很大的不同。我用一個生成鏈接的指令替換了內部的ng-repeat,並且性能明顯更好。 Here is the updated fiddle

更新後的指令看起來是這樣的:

appModule.directive('transcripts', function() { 
    return { 
     restrict: 'A', 
     scope: { 
      transcripts: '=' 
     }, 
     compile: function(element) { 
      element.removeAttr('transcripts'); 
      return function(scope, element, attrs) { 
       for(var i = 0; i < scope.transcripts.length; i++) { 
        var link = '<a href="' + scope.transcripts[i].href + '" _target="_new">' + scope.transcripts[i].text + '</a>'; 
        element.append(link); 
       } 
      } 
     } 
    } 
}); 
+0

問題在於對成績單所做的更改不會顯示出來。如果這很好,你只需要一次綁定,你應該使用angular-once(https://github.com/tadeuszwojcik/angular-once)。 – beardedlinuxgeek

+0

bindonce和angular-once有什麼不同? –

+0

沒什麼,你可以用bindonce代替。我只是說,你所做的只是使用bindonce沒有什麼好處。 – beardedlinuxgeek