Возможно, это трудный вопрос для ответа, так как я не уверен, что проблема с корнем здесь, было бы полезно, если бы кто-то посмотрел.
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 загружаемых в объем.
Я понимаю, что, возможно, это просто факт, что загрузка во всех этих данных занимает большую нагрузку на странице - каждый 27 загруженных предметов (один звонок из бесконечного цикла) GET
) общий вес загружаемых данных составляет около 30 КБ поп, поэтому около 300 предметов - около 900 КБ данных. Эти данные как можно меньше (~ 500 строк JSON).
Возникает вопрос:
Есть ли какие-либо рекомендации, плагины, директивы или практики, лучше всего использовать для AngularJS для при загрузке большого объема данных на странице $scope
?
Для уточнения, приложение построено на Node
/ExpressJS
/MongoDB
EDIT: Я проверил эту проблему на двух компьютерах (как на OSX) и этот вопрос НАМНОГО более распространены в Chrome, чем в Сафари. Chrome полностью пошатнулся при загрузке данных, Safari действительно гладкая и имеет только заметное отставание, когда вы получаете более 600 предметов, и даже тогда это не так плохо, как Chrome.
Интересно. Любые идеи о том, как я могу отключить привязку данных для элементов после их загрузки на страницу? Нет фильтра поиска на месте, и в ng-repeat есть только один или два бита каждого элемента, которые необходимо отслеживать для привязки данных (только значки внизу каждого элемента плюс маленькое сердце, которое показывает количество 'нравится'). Не знаю, с чего начать, но думаю, что это может быть мощный усилитель производительности. – Jascination
@Jascination Вы можете взглянуть на [директиву setRepeat' из связанного сообщения] (https: //gist.github.com/btm1/6746150), хотя я не уверен, действительно ли это то, от чего происходят ваши хиты производительности. Мы делаем что-то очень похожее, также используя ngInfiniteScroll, и у нас небольшая задержка при добавлении DOM, но ничего серьезного, как то, что вы видите; Я также не вижу столько событий «Parse HTML», когда мы добавляем данные в область видимости. –