Ivan
Тач записывается в стейт?
Юрий
о! А как тогда тут ищут програмистов в команду?
Ololo
Ivan
extraData={this.state} для тача, дополнительно к data
eeeMan
Тач записывается в стейт?
всё гораздо проще, в стейт ничего не пишет, есть просто флат лист и массив с тысячей элементов, каждый элемент это просто TouchableOpacity
eeeMan
extraData={this.state} для тача, дополнительно к data
по подробнее подскажите? для чего это и что там должно быть?
Ivan
ФлетЛист оптимизирован типа от перерендера и обновляется когда приходит новый data или extraData, в первом список, во втором дополнительные параметры
eeeMan
то есть мне туда нужно тупо позицию скролла или тача присваивать для дополнительного перерендера?
Ivan
Не, это ответ на долгую реакцию на клик, туда можно флаг нажатого элемента отправлять
eeeMan
вообще не понял как эт освязано, флаг туда отправится только после обработки onPress элемента, а онпресс срабатывает через пару секунд только
Ivan
А для тысячи элементов.. я бы как-то разделил их на несколько частей, но возможно, на реальном девайсе тормозить не будет
eeeMan
я на реальном и тестирую
Ivan
Тогда делить как-то
eeeMan
Тогда делить как-то
Немного локализую проблему - у меня есть флатлист, который получает массив с нным кол-вом объектов, каждый элемент массива я вывожу просто TouchableOpacity с onPress методов который просто консолит текст и всё, тестирую на реальном девайсе htc one e8. При таком раскладе, когда я прокручу немного список и нажму на элемент, онпресс у меня срабатывает через пару секунд только, а если я прокручу и подожду пару секунд, а потом нажму, то онпресс сразу срабатывает
eeeMan
и мне выдается - You have a large list that is slow to update - make sure your renderItem function renders components that follow React performance best practices like PureComponent, shouldComponentUpdate, etc.
eeeMan
как оптимизировать и устранить выдачу этой ошибки?
Сергій
попробуй на чем нибудь помощнее
Сергій
😂
sad story, bro
eeeMan
да и пользователи пусть для приложения помощнее возьмут девайсы
eeeMan
попрофилируй и посмотри что у тебя тормоза вызывает. вполне вероятно компоненты лишние апдейтишь
какие лишние компоненты?) я же писал, у меня флатлист, в котором просто вставлен TouchableOpacity, без какой-либо больше логики, TouchableOpacity это просто серый квадрат и метод онПресс для того чтобы посмотреть в консоле когда напечатается слово
Władimir (Zae)
как вы в джесте мокаете дефолтную функцию? вот есть например у меня axios.post, axios.get, я их мокнул, а если я использую axios({ method: ‘POST’ }), например?
Władimir (Zae)
nock
можешь дать пример кода?
Vit
https://github.com/node-nock/nock
Aleksey
с тысячей TouchableOpacity элементов норм?
не, у меня на порядок поменьше. 100-200. но ты вроде говорил, что на 30-40 тоже тормозит у тебя?
eeeMan
не, у меня на порядок поменьше. 100-200. но ты вроде говорил, что на 30-40 тоже тормозит у тебя?
ща чуть позже проверю отдельно, в другом компоненте с массивом из нескольких сотен, так сказать воспроизведу проблему и скину код
Aleksey
а на чем смотришь? ios / android?
Nikolay
кто нибудь юзает sentry.io? я как понял его тоже бонусом залочили
Aleksey
а, ну тут трудно сказать ) я просто на macos и ios смотрю, андройды в том же эмуляторе заметно медленнее могут работать (у меня)
Aleksey
вообщем, если не осилишь, то пример приложи пожалуйста
Aleksey
так это не эмулятор, а мой телефон)
ну у меня iphone только :)) а он вполне шустрый )
eeeMan
ну у меня iphone только :)) а он вполне шустрый )
ну а пользователями приложения я тоже буду говорить - купите последние девайсы для того чтобы вы могли посмотреть список элементов в моем приложении?😂
Aleksey
:)
Aleksei
тут как бы в списках большой трейдоф между динамичным контентом и одинаковым, тот же ListView был изначально на динамичный контент в списках ориентирован, но на больших списках жрал много памяти, FlatList это оптимизация ListView по памяти
Ivan
возможно поможет PureComponent https://github.com/facebook/react-native/issues/13649
eeeMan
и так
eeeMan
воспроизвел проблему
eeeMan
eeeMan
import React, {Component} from 'react'; import { TouchableOpacity, FlatList } from 'react-native'; class Test extends Component { render() { let items = Array.apply(null, Array(1000)).map(String.prototype.valueOf,"hi"); return ( <FlatList data={items} horizontal={false} numColumns={3} keyExtractor={(game, index) => index} renderItem={(item) => { return ( <TouchableOpacity style={{ width: 100, height: 100, backgroundColor: '#777', margin: 5 }} onPress={() => null} activeOpacity={0.5} /> ) }} style={{ width: '100%', height: '100%', padding: 5 }} /> ) } } export default Test;
eeeMan
имеем массив с 1000 элементами - флатлист с 1000 TouchableOpacity, на видосе прекрасно видно лаги после прокрутки
eeeMan
это реальный девайс
eeeMan
Я конечно не настоящий сварщик, но создание списка на 1000 элементов бы за пределы render на всякий случай вытащил
это просто для воиспроизведения проблемы, настоящий массив за ренднром создается)
eeeMan
это приложение запущено на реальном девайсе htc one e8
eeeMan
то есть типа проблема в TouchableOpacity?
eeeMan
щас попробую тогда TouchableWithoutFeedback
Ivan
pure пробовал?
eeeMan
pure пробовал?
PureComponent? пробовал, я просто создал PureComponent компонент в который запихнул этот touchableOpacity
eeeMan
тож самое
eeeMan
или че-то другое имеется в виду?
Ivan
не, оно
Pavel
Хотя если мне память не изменяет рендер флетлиста дергается один раз, а потом внутренний копонент уже работу принимает. В любом случае странно это
Yurii
да, по скроллу/тапам повторный рендер не вызывается точно, так что дело не может быть в этом
Aleksei
сеанс коллективного вангования прям) еще докину тогда)) https://github.com/facebook/react-native/blob/a3c07c95effd891c2bd5f3257efe5b24d85862be/Libraries/Lists/VirtualizedList.js#L144
eeeMan
TouchableWithoutFeedback точно так же ведет себя
eeeMan
ну и любой Touchable
Vladimir
Так а почему вы просто не хотите профайлером пройтись и посмотреть?
eeeMan
maxToRenderPerBatch ничего не дает
Vladimir
Типа неспортивно? Не даешь шансов багам?
eeeMan
хз как посмотреть
Pavel
https://snack.expo.io/r1GKVP72M Хз, PureComponent помогает
eeeMan
https://snack.expo.io/r1GKVP72M Хз, PureComponent помогает
хм, щас закинул себе в прилагу Ваш код и реально быстрее стало, задержка уже меньше секуды, я точно так же делал и не было эффекта, благодарю, буду разбираться
Pavel
Ну и в релизе думаю будет летать. Это же всё таки дебаг а дебаг немного лагает по определению
eeeMan
но задержка всё же есть конечно, то есть после окончания прокрутки где-то еще 300мс точно не работает онпресс, скорее всего действительно связано с https://github.com/facebook/react-native/issues/12884, из-за блокировки потока жс
Aleksei
Ребят, кто нибудь знает откуда BuildConfig берется в джава части? чет вообще не могу понять откуда и как. Только находил что он генерится https://github.com/facebook/react-native/blob/26684cf3adf4094eb6c405d345a75bf8c7c0bf88/ReactAndroid/src/main/java/com/facebook/react/common/build/ReactBuildConfig.java