2017-06-05 69 views
0

我正在使用$超時來定期從後端拖出表格數據並以HTML格式顯示它們。我懷疑每次獲得更新時,都會在瀏覽器中爲JSON數組分配一個新的內存段。我想知道是不是這種情況。以下是代碼的簡化片段。AngularJS數組和增量內存使用

HTML`

<tr ng-repeat="measurement in measurementResults"> 
    <td>{{measurement.type}}</td> 
    <td>{{measurement.value}}</td> 
</tr> 

JS

function startTimeout() { 
    MeasurementService.getNewMeasurements(function (measuredData) { 
    $scope.measurementResults = measuredData; 

    }); 

    $timeout(startTimeout, 15000); 

} 

startTimeout(); 

這是我傳遞到$範圍JSON數據陣列格式。

[{"type":type1,"value":10}, {"type":type2,"value":20}, {"type":type3,"value":80}] 

爲$ scope.measurementResults指向一個新的存儲位置(或創建一個新的數組)每次我從服務回調接收measuredData時間?

編輯: 我附上記憶圖形的兩張截圖,第一個顯示的節點如何去向上和向下(綠線),而第二個顯示了$應用「軌道之後怎麼行變得平坦指數」

enter image description here


Memory usage for nodes stable

+0

是,在每次使用XHR新的存儲從服務器接收數據。 [賦值運算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment)將'$ scope.measurementResults'指向新內存,舊內存爲釋放垃圾收集。 – georgeawg

+0

我觀察到增量內存使用情況,例如在Chrome和Firefox中,每個頁面上都有這種定期調用。我不知道這是由於我的代碼,或者如果這是因爲瀏覽器不釋放舊內存。儘管Safari並沒有觀察到這一點,但它仍然保持穩定。 – user2217057

+0

您正在使用什麼版本的AngularJS?有一些'ng-repeat'內存泄漏問題在Version1.3中修復。有關更多信息,請參閱[GitHub AngularJS問題#10121](https://github.com/angular/angular.js/issues/10121)。 – georgeawg

回答

0
//You may use track by for performance boost 
<tr ng-repeat="measurement in measurementResults track by $index"> 
    <td>{{measurement.type}}</td> 
    <td>{{measurement.value}}</td> 
</tr> 
+0

太好了,跟蹤$ index顯着降低了內存使用量,從每次調用時幾乎有1 MB泄漏到每次調用時的10-20 KB。我有多個嵌套ng-repets,這個「跟蹤」做得非常好。然而,就像georgeawg提到的那樣,即使是角度1.5,rg-repeat仍然存在這種內存泄漏問題。 – user2217057

+0

截圖來自輕量級測試頁面,順便說一下,不是真正的。 – user2217057

+0

仍然可以使用單向綁定來提升性能。請參考此文檔..確保它有意義和幫助.. https://stackoverflow.com/questions/33480548/what-is-the-difference-between-ng -bind-VS-一次性結合入 - 角 –