Aleksei
Ради исключения варнингов из лога?)
на новый грейдл переходил и всякие такие места патчил
Nick
Ради исключения варнингов из лога?)
Так со свежим gradle с compile же не соберётся.
Maxim 📱 D
на новый грейдл переходил и всякие такие места патчил
В новом градле это как ошибки кидает?
Maxim 📱 D
а, ок)
Aleksei
https://snack.expo.io/@jjjhhhhjjh/104eaa Собственно вот. Если потянуть флэтлист вниз, то появится refresh control
ну по крайней мере на моем iphone 6s не тормозит https://snack.expo.io/BJgW9tPJr
Vadim
ну по крайней мере на моем iphone 6s не тормозит https://snack.expo.io/BJgW9tPJr
Хм… У меня тоже. Сейчас проверю на андроиде.
Anton
Всем привет! Столкнулся с проблемой рендера больших списков (FlatList уже не особо справляется) и выбор пал на ВОт такую либу: https://github.com/Flipkart/recyclerlistview Либа не совсем удобная, но свою задачу по рендеру более 300 элементов выполняет на отлично. Но столкнулся со следующей проблемой, касательно либы: - Если рендерить список На экране без какого-либо дерева компонентов, т.е рендерить только список и все <RecyclerListView … />, то айтемы рендерятся полностью правильно и как нужно, НО если есть какое-то дерево, а список нужно отрендерить, условно, в конкретном месте на экране (скажем, вверху есть шапка, потом еще какие-то блоки, а потом идет список), то начинаются какие-то не понятные вещи (требует для родителя minWidth: 1, minHeight: 1, Рендерит только 5 айтемов, а дальше прокрутка идет просто пустой, хотя скролится будто их там 200, но вижу пустой экран). От некоторых вещей спасает флаг canChangeSize={true} (с ним рендерится 5 компонентов, но прокрутив почти в самый низ начинаются рендериться все пустые, создавая такую пустую яму), но у меня контент не меняется (его size) Следовательно вопрос. Кто работал с подобной либой и кто сталкивался с проблемами рендера айтемов внутри каких-то компонентов, а не просто как root для экрана? Или, быть может, кто-то очень круто оптимизировал FlatList, заставив его работать с большими списками?
Dmitry
кто нибудь знает почему в VSCode в терминала node -v возврает одну версию, а просто термниал на macOS вовзращает другую версию, в одной директории
Dmitry
Всем привет! Столкнулся с проблемой рендера больших списков (FlatList уже не особо справляется) и выбор пал на ВОт такую либу: https://github.com/Flipkart/recyclerlistview Либа не совсем удобная, но свою задачу по рендеру более 300 элементов выполняет на отлично. Но столкнулся со следующей проблемой, касательно либы: - Если рендерить список На экране без какого-либо дерева компонентов, т.е рендерить только список и все <RecyclerListView … />, то айтемы рендерятся полностью правильно и как нужно, НО если есть какое-то дерево, а список нужно отрендерить, условно, в конкретном месте на экране (скажем, вверху есть шапка, потом еще какие-то блоки, а потом идет список), то начинаются какие-то не понятные вещи (требует для родителя minWidth: 1, minHeight: 1, Рендерит только 5 айтемов, а дальше прокрутка идет просто пустой, хотя скролится будто их там 200, но вижу пустой экран). От некоторых вещей спасает флаг canChangeSize={true} (с ним рендерится 5 компонентов, но прокрутив почти в самый низ начинаются рендериться все пустые, создавая такую пустую яму), но у меня контент не меняется (его size) Следовательно вопрос. Кто работал с подобной либой и кто сталкивался с проблемами рендера айтемов внутри каких-то компонентов, а не просто как root для экрана? Или, быть может, кто-то очень круто оптимизировал FlatList, заставив его работать с большими списками?
В смысле FlatList не справляется с 300+ элементов?)
Anton
В смысле FlatList не справляется с 300+ элементов?)
Вот так не справляется, идут не совсем понятные мне ререндеры
Dmitry
Вот так не справляется, идут не совсем понятные мне ререндеры
Тогда лучше разобраться с этим, а не искать другое решение)
Anton
Возможно, мой косяк в компоненте, который я рендерю, он просто стейтлес, нужно сделать его Pure
Maxim 📱 D
если конечно у вас не 300 элементов одновременно в один экран влезают то значит где то косяк)
Vadim
ну по крайней мере на моем iphone 6s не тормозит https://snack.expo.io/BJgW9tPJr
Да, работает. Я видимо что-то не так с интерполяцией делал. Потому и скакало. Большое спасибо!
Anton
если конечно у вас не 300 элементов одновременно в один экран влезают то значит где то косяк)
нет, не влезают 🙂 ПРосто я не совсем видимо понял, что не так. Я условно взял в компоненте и сделал Random на появление замочка. И после рендера у меня замочек на одном и том-же компоненте прыгал. То он был, то нет, шли какие-то ну дикие ререндеры. Я не совсем понял от куда они
Anton
Видимо я что-то упустил, и вот пока писал сообщение подумал, что тот компонент, котороый рендерится от FlatList должен быть Pure
Dmitry
и лучше с кодом сразу
Anton
А вот этот кейс можно по-подробнее
Мой FlatList рендерит компоненты, которые ведут к платному контенту, но ведут не все. Часть контента бесплатная. Флаг isPremium приходит извне и я чтобы сделать эмитацию (пока флаг еще не приходит) Сделал что-то типа const isPremium = Math.random(0, 1) > 0.5 Вот так выглядит входная точка туда: https://paste.ubuntu.com/p/zk2yT7H3YP/ Получается <Item {...item} navigate={navigate} /> внутри себя имеет этот const isPremium = Math.random(0, 1) > 0.5 и решает, поставить замочек (убрать кликабельность) или оставить Так вот при рендере этот замочек прыгает по всем айтемам, т.е одного и того-же айтема происходит РЕРЕНДЕР очень много раз, попадая то в isPremium = 0 или isPremium = 1
Dmitry
const isPremium = Math.random(0, 1) > 0.5 - это не будет работать
Anton
Я использовал https://github.com/Flipkart/recyclerlistview Для больших спиок это вроде как самый топ (хоть и нифига не удобная) Все проблемы рендера ушли, но пришли другие
Anton
Я понимаю, что не будет
Anton
Мой вопрос - от куда столько ререндеров?
Anton
Они и без Math.random(0, 1) > 0.5 есть
Dmitry
но ты можешь изначально map массива сделать и проставить в нем isPremium
Vladimir
Всем привет! Столкнулся с проблемой рендера больших списков (FlatList уже не особо справляется) и выбор пал на ВОт такую либу: https://github.com/Flipkart/recyclerlistview Либа не совсем удобная, но свою задачу по рендеру более 300 элементов выполняет на отлично. Но столкнулся со следующей проблемой, касательно либы: - Если рендерить список На экране без какого-либо дерева компонентов, т.е рендерить только список и все <RecyclerListView … />, то айтемы рендерятся полностью правильно и как нужно, НО если есть какое-то дерево, а список нужно отрендерить, условно, в конкретном месте на экране (скажем, вверху есть шапка, потом еще какие-то блоки, а потом идет список), то начинаются какие-то не понятные вещи (требует для родителя minWidth: 1, minHeight: 1, Рендерит только 5 айтемов, а дальше прокрутка идет просто пустой, хотя скролится будто их там 200, но вижу пустой экран). От некоторых вещей спасает флаг canChangeSize={true} (с ним рендерится 5 компонентов, но прокрутив почти в самый низ начинаются рендериться все пустые, создавая такую пустую яму), но у меня контент не меняется (его size) Следовательно вопрос. Кто работал с подобной либой и кто сталкивался с проблемами рендера айтемов внутри каких-то компонентов, а не просто как root для экрана? Или, быть может, кто-то очень круто оптимизировал FlatList, заставив его работать с большими списками?
а что у вас за данные во FlatList ?Мы рендерим 7000 элементов(картинка плюс пара текстов) и все ок
Anton
а что у вас за данные во FlatList ?Мы рендерим 7000 элементов(картинка плюс пара текстов) и все ок
В том то и дело, что объект с примитивами. А можно пример Вашего FLatList?
Gena
Мой вопрос - от куда столько ререндеров?
На виртуализацию и разбиение рендера на несколько асинхронных, на "чистоту" компонента, на измерение размеров...
Anton
И компонент, который внутри renderItem рендерится должен быть PURE? right?
Anton
На виртуализацию и разбиение рендера на несколько асинхронных, на "чистоту" компонента, на измерение размеров...
как это победить? Была мысль просто сделать lazy load по 10 элементов и проблема бы ушла
Dmitry
как это победить? Была мысль просто сделать lazy load по 10 элементов и проблема бы ушла
да просто не нужно готовить данные на рандоме внутри рендера
Dmitry
подготовь их заранее
Anton
да просто не нужно готовить данные на рандоме внутри рендера
Абстрагируемся от рандома, его не будет. Ве будет приходить извне
Anton
Рандом мне показал, что есть проблема ререндеров, собственно она есть и без рандома
Dmitry
Абстрагируемся от рандома, его не будет. Ве будет приходить извне
Тогда, я больше чем уверен, и проблем не будет
Gena
подготовь их заранее
Или это надо вообще уносить за sCU, а внутри компоненты через forceUpdate обновлять при смене внутренностей... (Это если что, как всякие react-redux и mobx-react работают)
Anton
Если я верно понял - https://paste.ubuntu.com/p/zk2yT7H3YP/ Вот тут return <Item {...item} navigate={navigate} /> Мой компонент <Item / > должен быть Pure
Anton
верно?
K B
всем привет! кто-нибудь реализовывал srp-6a ?
Dmitry
Просто у меня был похожий кейс. Нужно было разбить все элементы на группы, 7 элементов, условно с marginRight: 8 у последнего элемента группы
Dmitry
проверку на вхождение в группу сделали в рендер и каков был результат, кто догадается?)
Gena
так там extraData есть же
Ну есть разница - реконсайлинг всего FlatList после extraData или forceUpdate только одного айтема ) extraData скорее нужна, если у нас есть массив (или другая модель), которая апдейтится инплейсом и FlatList не "видит" этого...
Maxim 📱 D
айтем не должен ререндериться без твоего ведома\\
Dmitry
Ну есть разница - реконсайлинг всего FlatList после extraData или forceUpdate только одного айтема ) extraData скорее нужна, если у нас есть массив (или другая модель), которая апдейтится инплейсом и FlatList не "видит" этого...
ну я обходился без scu и forceUpdate при этом итем были обычными Component, но данные в них прокидывались по персональной подписке в редакс, то есть когда менялся итем в редаксе, то ререндерился только 1 итем в FlatList
Anton
Моя идея в том, чтобы не рендерить то, что сейчас не на экране. Такого можно добиться FLatList?
Anton
НУ собственно я рендерю как показал выше, но при прокрутке я не могу даже кликнуть на айтем т.к идут ререндеры
Maxim 📱 D
НУ собственно я рендерю как показал выше, но при прокрутке я не могу даже кликнуть на айтем т.к идут ререндеры
выпилите то что заставляет ререндериться или запилите в каком случае он должен ререндериться
Anton
выпилите то что заставляет ререндериться или запилите в каком случае он должен ререндериться
Я понял идея, сам <Item /> этот вопрос должен решать. Условно pure или scu
Maxim 📱 D
да
Anton
Тогда еще момент. У FlatList есть разные флаги типа initialNumToRender и тому подобное, что помогает как-то наладить оптимизацию. Доводилось использовать? И в каких кейсах
Gena
Я их пытался крутить... сомнительное удовольствие. Сложилось ощущение, что они нужны для тонкой подстройки, которая мне уже была не нужна. Т.е. принципиально ими исправить ничего нельзя, можно только слегка улучшить. Т.е. если есть тормоза в рендере, то надо фиксить тормоза в рендере, уменьшать объем рендера, уменьшать их кол-во... а эти крутилки уже потом, но мне после вот этого "уже потом" было не нужно, всё и так начинало нормально работать.
Anton
Хотя выглядит так, что нет в этом необходимости
Serhii
Народ, ни с того ни с сего начала вылетать ошибки resource android:attr/fontVariationSettings not found resource android:attr/ttcIndex not found Execution failed for task ':app:processDebugResources'. > Failed to process resources, see aapt output above for details. кто то сталкивался?
Serhii
после смены compileSdkVersion на 28 вылетает Execution failed for task ':app:transformClassesWithMultidexlistForDebug'. > com.android.build.api.transform.TransformException: Error while generating the main dex list.
Vlad
logcat
Vlad
Если ведро
Vlad
в икс коде тоже самое есть забыл как называется
Vlad
В ведрах я походу уже узкий специалист...
Vlad
Узкий потому что в узикие места лежу
Vlad
Сча скрин скину
Vlad
епт
Vlad
такакя ж ошибка
Vlad
снова
Vlad
расскажу как решать
Vlad
Хотя
Vlad
Чатик выше полистайте)