2017-05-05 19 views
2

要提高速度ng-repeat而不是2種方式我已改爲單向綁定以提高速度。但我根本沒有發現任何速度表現。請問任何人都可以幫我提高ng-repeat的速度嗎?angularjs - 一次綁定不給任何性能改進`ng-repeat`

我的進程外認沽顯示,因爲沒有大的變化,當我用單路2之間的洗牌ng-repeats

VM780 script.js:30 Process time: 124 //single way 
VM780 script.js:30 Process time: 132 //double way 
VM780 script.js:30 Process time: 120 //single way 
VM780 script.js:30 Process time: 121 // double way 
VM780 script.js:30 Process time: 124 // single way 

這裏是ng-repeat我使用:

<div class="showList"> 
     <ul> 
     <li ng-repeat="d in data">{{::d.name}}{{::d.address}}{{::d.city}}{{::d.country}}</li> 
     <!-- <li ng-repeat="d in data">{{d.name}}{{d.address}}{{d.city}}{{d.country}}</li> --> 
     </ul> 
    </div> 

Live Demo

+1

它另外應該是':: d in data'。如果你不知道你在優化什麼,那麼優化是毫無意義的。在這種情況下,下一個摘要將在填充'data'後受到影響 - 並且沒有下一個摘要。它根本不是單向綁定的。這是一次性約束。 – estus

+0

實際上':: d在數據中'拋出錯誤,而是我使用'd in :: data' - 但仍然沒有性能改進。 – 3gwebtrain

+0

是的,它應該在:: data中。當然,初始摘要不會有性能改進。當然,在下一次按下按鈕時會爲'd in :: data'提高性能 - 因爲數據只能被綁定一次。這可能不符合預期(更改$ scope.data不會更新表),但有顯着的性能改進 - 例如100ms vs 5ms。 – estus

回答

2

問題這是對性能改進的錯誤期望。腳本不會從這些優化中受益。它每次都會生成一組新的數據。

同樣,測試性能的方法也是錯誤的,它只是測量生成一組新數據並對其進行初始摘要所花費的時間 - 每次都是一樣的。

後續一次性綁定是有益的相同的數據集。

來衡量這種情況的方法是一樣的東西

setInterval(function() { 
    console.time('digest'); 
    $scope.$apply(); 
    console.timeEnd('digest'); 
    }, 1000) 

這樣

<li ng-repeat="d in data">{{::d.name}}{{::d.address}}{{::d.city}}{{::d.country}}</li> 

將顯示在

<li ng-repeat="d in data">{{d.name}}{{d.address}}{{d.city}}{{d.country}}</li> 

一些性能改進,當觀察家數越高就變得至關重要。