У меня есть 3000 объектов, каждый из которых обладает рядом свойств, создавая файл JSON длиной 72 000 строк 2 МБ.Ограничения производительности угловых фильтров на мобильном телефоне
JSON - это фактически база данных объектов, которые необходимо фильтровать с помощью текстового поискового фильтра, а также путем сопоставления значений с массивом значений.
В изначальном виде я выполняю это в моем service
:
this.loadJsonFile = function(url, process) {
var defer = $q.defer();
if (angular.isDefined(cache[url])) {
if (angular.isDefined(cache[url]['then'])) {
return cache[url];
}
defer.resolve(cache[url]);
return defer.promise;
}
$http.get(url).success(function(data) {
if (process) {
data = process(data);
}
cache[url] = data;
defer.resolve(data);
}).error(function(err){
defer.reject(err);
});
cache[url] = defer.promise;
return defer.promise;
};
this.getExercises = function() {
return this.loadJsonFile('data/exercises.json');
};
и в моем контроллере все результаты подвергаются $scope
по:
api.getExcercises().then(function(data) {
$scope.allExercises = data.results;
});
Я ограничить результаты по:
$scope.limit = 56;
Раньше я оставался подальше от вызова сервера y раз мне нужно искать, так как количество звонков будет очень высоким! Это хорошо работает на iPad Air 2 и iPhone 6, где есть много энергии, однако на Galaxy Tab он довольно беден.
Мне нужна помощь по стратегии только для того, чтобы показывать только ограниченное количество результатов на $scope
, поскольку я думаю, что количество сдвига фильтруемых и опрокинутых данных приводит к моей низкой производительности. Я в порядке с выполняемой функцией поиска/фильтра и нарушением целостности функции поиска в реальном времени, пока результаты подвергаются $scope
(по словам экрана загрузки), производительность очень резкая.
Оглядываясь на ситуацию с сервером, я не заинтересован в том, чтобы поражать мой сервер Parse.com, поскольку он не является дружественным к угловому, однако Async-характер Firebase может работать. Я просто загрузил свой JSON и прикрепил данные в $ объеме через:
var ref = new Firebase("https://URL_HERE.firebaseio.com/results");
$scope.allExercises = $firebaseArray(ref);
, который работает довольно аналогично мой локальный метод JSON. Однако мне интересно, можно ли использовать Firebase следующим образом?
- Загрузить начальные 50 результатов, упорядоченных по имени.
- При наборе текста в текстовом поиске выполняется запрос, а в поле $ scope передаются результаты.
- При добавлении значений в фильтр-массив данные о Firebase запрашиваются относительно значений и результатов, открытых для
$scope
.
Итак, я построил и ионное приложение и должен был использовать файл JSON размером 118 МБ с более чем 18 000 записей. То, что я сделал, это все, что я делал в БД Mongo, и затем спросил его. Это очень быстро и очень хорошо работает с узлом/express server или вы можете запросить базу данных непосредственно из приложения. Я не смотрел в firebase, но если вы ищете быструю, прямую и javascript-дружественную базу данных, я бы посмотрел mongolab.com –
Jess большое спасибо за ваш комментарий. Можете ли вы немного расширить свою настройку сервера? Я раньше не использовал nodejs/express. – Taylorsuk
Да, у меня есть сервер узлов. Экспресс используется для маршрутизации. На узловом сервере, который вы подключаетесь к своей базе данных, создайте путь, например, www.website.com/api/:param. Параметр берется и используется для запроса базы данных mongo. Я бы взял добычу, чтобы начать. В значительной степени вы делаете спокойный api для своего mongo DB http://thejackalofjavascript.com/nodejs-restify-mongolab-build-rest-api/ –