這可能是一個難以回答的問題,因爲我不確定這裏存在什麼根本問題,如果有人願意看看,這將很感激。
http://threadfinder.net/search%3FnameTags=jacket/0
如果你不斷地向下滾動,更多的項目被裝載在使用ngInfiniteScroll這個功能:
$scope.moreProducts = function() {
if ($scope.busy || $scope.noMore){return;}
else
if (!($scope.busy)) {
$scope.busy = true;
$scope.itemsLoaded += 27;
var theQuery = $routeParams.query.replace(/\?|%3f/gi, '');
$scope.itemSearch.get({
query: theQuery,
page: $scope.itemsLoaded
}, function(data) {
if (data.posts.length <= 0) {
$scope.noMore = true;
} else {
$scope.noMore = false;
for (var i = 0; i < data.posts.length; i++) {
if ($scope.user) {
if (!($scope.user.likes.indexOf(data.posts[i]._id) === -1)) {
data.posts[i].liked = 'http://i.imgur.com/CcqoATE.png';
} else {
data.posts[i].liked = 'http://i.imgur.com/tEf77In.png';
}
$scope.posts.push(data.posts[i]);
}
}
$scope.busy = false;
}
});
}
}
(我使用AngularJS Deckgrid的瓷磚佈局,但我已經試過禁用它和性能沒有什麼大的變化。)
如果你繼續滾動,在達到300個加載到頁面上的項目後,性能開始下降並且應用程序凍結,而新項目是b eing加載到範圍內。
我明白,也許這只是一個事實,加載所有這些數據在頁面上承受很大的負載 - 每加載27個項目(一個無限滾動GET
調用)被加載數據的總重量約爲30kb一個流行音樂,所以在300個左右的範圍內有〜900kb的數據。這些數據儘可能少(約500行JSON)。
的問題是:
是否有任何建議,插件,指令或最佳使用實踐AngularJS在$scope
頁面加載大量數據時?
爲了澄清,應用是建立在Node
/ExpressJS
/MongoDB
編輯:我已經簽出這個問題在兩臺計算機上(無論在OSX)這問題是MUCH更加普遍在Chrome比在Safari中。 Chrome在加載數據時完全錯亂,Safari非常流暢,只有在達到600多種商品時纔有明顯的滯後,即使這樣也遠不如Chrome那麼糟糕。
有趣。關於如何在元素加載到頁面後關閉數據綁定的任何想法?沒有搜索過濾器,並且ng-repeat中每個項目只有一到兩個位需要監視綁定數據更改(只是每個項目底部的圖標加上顯示'喜歡')。不知道從哪裏開始,但認爲這可能是一個巨大的性能助推器。 – Jascination
@Jascination你可以看看[鏈接後的'setRepeat'指令](https://gist.github。com/btm1/6746150),但我不確定這是否是您的表演命中的來源。我們正在做一些非常相似的事情,也使用ngInfiniteScroll,並且在添加DOM時略有延遲,但沒有像您所看到的那麼嚴重;當我們向示波器添加數據時,我也沒有看到很多「解析HTML」事件。 –