Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Бесконечный скроллинг, оптимизация (https://javascript.ru/forum/angular/48376-beskonechnyjj-skrolling-optimizaciya.html)

l-liava-l 01.07.2014 15:41

Бесконечный скроллинг, оптимизация
 
Доброго времени суток

Тема поднималась неоднократно и на данном форуме, но используемые инструменты разные и поэтому решения не всегда подходят.


Делаю мобильное приложение, поэтому к нагрузке все очень чувствительно.

Сделал бесконечный скролинг, обьявления подгружаются пачками по 3 штуки.
Каждая пачка представляет собой страничку, и записыввается в массив.

Тоесть:

pages = [
[advert array],
[advert array],
[advert array]...
]


каждое обьявление состоит из различных пунктов, в том числе картинки и номера (их может быть разное кол -во)

В итоге получаем дико лаганую систему, которая нагружает note 3 по полной, кога страниц уже штук 6

Это происходит потому что скопы пересчитываются, а там между прочим ng-repeatов дофига

1) распарсить страницы
2) распарсить обьявления
3) распарсить картинки телефоны и тд

+ картинки показаны в виде слайдера.


Скорее всего нужно как то выводить ng-if ом, ненужные страницы, но как определить что я их не вижу? повесить на каждую обработчик, отсчитывать расстояние от окна боундректом и каждый раз проверять?
Но ведь это всеравно сильно нагрузит.

В общем, нужна ваша помощь с оптимизацией))

Заранее благодарен

nerv_ 02.07.2014 00:03

Не использовать ng-repeat

l-liava-l 02.07.2014 07:51

Цитата:

Не использовать ng-repeat
Тоже думал об этом, но как? посвяти в тайну)

Ну ладно, там где некоторые массивы, сделаю joinом, сам затупил что не сделал
Но в основном то шаблоне всеравно будут лаги, может быть вообще формировать самому шаблон и делать аппенд чайлд.
Тогда и рипеатов не нужно, точна сделаю вечерком и так отпишусь

nerv_, Спасибо!

Shitbox2 02.07.2014 12:24

Это тебе поможет
https://github.com/allaud/quick-ng-repeat
http://makeomatic.ru/blog/2014/03/28/Digest_angular/

l-liava-l 02.07.2014 14:57

Написал директиву, которая генерирует шаблон и добавляет его в документ, когда появляются новые обьяления. Нагрузка на процессор минимальная, но вот оперативка естца. И все опять лагает)
Нужно как то выгружать

Shitbox2,
ща прочтемс)

l-liava-l 03.07.2014 18:21

фтф, короче я скрываю все элементы которые не вижу (ng-if-ом) в коде нет ни одного ng-repeata, но всераввнноооо лаагииии. ааааа

nerv_ 03.07.2014 19:38

Вообще мое мнение, что ангуляр и бесконечная подгрузка не совместимы :)

Впрочем, это касается не только ангуляра. Объекты висят в памяти, нужно очень много оптимизировать. Так что я против Бесконечный скроллинг, а за пагинацию. Поэтому написал сервис пагинации.

Что касается ангуляра: недавно была задача - автокомплит на клиенте, список ~1000 элементов. Попытался использовать фильтр внутри ng-repeat - морозило интерфейс на 2-3 сек (на компе). Написал свою директиву и стало все хорошо :)

l-liava-l 04.07.2014 00:04

Цитата:

Вообще мое мнение, что ангуляр и бесконечная подгрузка не совместимы
Эт да, удобство есть, а н*я не работает), там еще и обьявления в приложении тянуться, скажем не из легких.

Цитата:

Впрочем, это касается не только ангуляра. Объекты висят в памяти, нужно очень много оптимизировать. Так что я против Бесконечный скроллинг, а за пагинацию. Поэтому написал сервис пагинации.
А удобно то как)

Цитата:

Написал свою директиву и стало все хорошо
Ну такое сплош и рядом

rotorgames 17.08.2014 19:20

Вообще, писать мобильное приложение на чистом angular не так удобно. Могу посоветовать http://ionicframework.com.
Отличное решение, и к стати проблема бесконечного скроллинга там решена. Список из 3000 элементов на galaxy s4 скролится как 10.

hohoruck 10.09.2014 08:05

Бесконечный скроллинг оптимизация
 
или что бы когда осталось 100 хп нажал 1 и у тебя опять 2700 не зависима на каком танке


Часовой пояс GMT +3, время: 09:05.