Questa è probabilmente una domanda difficile a cui rispondere poiché non sono sicuro di quale sia il problema di root, apprezzerei comunque qualcuno che desse un'occhiata.
http://threadfinder.net/search%3FnameTags=jacket/0
Se si scorre continuamente verso il basso, più elementi vengono caricati nel usando ngInfiniteScroll e questa funzione:
$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;
}
});
}
}
(sto usando AngularJS Deckgrid per il layout di piastrelle, ma ho provato a rendere invalido
Se continui a scorrere, dopo aver ottenuto ~ 300 elementi caricati sulla pagina, le prestazioni iniziano a colpire e l'app si blocca mentre i nuovi elementi sono b eing caricato nel campo di applicazione.
Capisco che forse è solo un dato di fatto che il caricamento di tutti questi dati richiede un grosso carico sulla pagina: ogni 27 articoli caricati in una chiamata infinitaScroll GET
il peso totale dei dati caricati è di circa 30kb un pop, quindi in circa 300 articoli ci sono ~ 900kb di dati in ambito. Questi dati sono il minimo che posso fare (~ 500 linee di JSON).
La domanda è:
Ci sono delle raccomandazioni, plugin, direttive o best-practice per uso AngularJS per quando si carica un sacco di dati nella pagina $scope
?
Per chiarimenti, l'app è costruita su Node
/ExpressJS
/MongoDB
EDIT: Ho controllato fuori questo problema in due computer (entrambi su OSX) e questo problema è MOLTO più prevalente in Chrome di in Safari. Chrome si sbalordisce completamente durante il caricamento dei dati, Safari è davvero fluido e ha solo un ritardo notevole quando si arriva a oltre 600 articoli e anche in questo caso non è neanche lontanamente peggio di Chrome.
Interessante. Qualche idea su come posso disattivare l'associazione dati per gli elementi una volta caricati nella pagina? Non ci sono filtri di ricerca sul posto e ci sono solo uno o due bit di ogni elemento nella ripetizione di ng che devono essere guardati per le modifiche dei dati vincolanti (solo le icone nella parte inferiore di ogni elemento più il cuoricino che mostra il numero di 'piace'). Non ho idea di dove cominciare con questo, ma penso che potrebbe essere un grande richiamo alle prestazioni. – Jascination
@Jascination Potresti dare un'occhiata a [la direttiva 'setRepeat' dal post collegato] (https: //gist.github.it/btm1/6746150), anche se non sono sicuro che sia in realtà da dove provengono i risultati delle prestazioni. Stiamo facendo qualcosa di molto simile, anche usando ngInfiniteScroll, e abbiamo un leggero ritardo quando viene aggiunto DOM ma nulla di così grave come quello che stai vedendo; Inoltre, non vedo molti eventi "Parse HTML" quando aggiungiamo dati all'ambito. –