Alexey
Alexey
сейчас еще пойдет тема, что useCallback и useMemo бесполезные хуки
Alexey
советую поставить https://github.com/welldone-software/why-did-you-render и посмотреть как в реальности
Alexey
frontend developer
привет всем, меня зовут Бека и фронтенд разработчик и у меня вопрос хотел на мабайл перейти с чего начать знаю: react js git html css bootstrap
Alexey
frontend developer
Да я вот хочу с него и начать )
Dmitry
frontend developer
Нее просто задалбался верстать (
frontend developer
Я думаю в мабайле больше функциональности и как-то мне больше по душе мабайл чем веб
frontend developer
И ещё конкуренция бешеная )
Alexander
Trin
откуда инфа? замерял?
возможно автор имеет введу оптимизацию ререндера с 18 реакта, хз. но если вы покажете мне приложение, где из-за инлайн стилей и их изменения сильно страдает перформанс — я прям руку вам пожму. до тех пор, увы, это миф
Alexander
Null
clean-rn - Чистит весь кэш React Native
https://github.com/mrousavy/clean-rn
Null
https://www.youtube.com/watch?v=5yM4NPcTwY4
Alexey
и что кто-то написал, что-то в 2021 году ты поверил? ) а ты сам не пробовал проверять? а ты пробовал WDYR, но не в проекте где 2 компонента, а на продакшене среднего проекта ? В самой статье написано верно, но он написал в простых кейсах так
Alexey
есть еще теория такая разбитых окон, все начинается с инлайн стилей, все проекты, на которые я приходил и жутко тормозят были инлайн стили, они мешают код читать, мешают дебажить и конечно же если их убрать ничего не изменится, тк человек на это забивающий обычно забивает и на селекторы к примеру, в хороших проектах все аккуратно, это не панация, а как бы показатель, хотябы того, что eslint не настроен
Alexey
https://stackoverflow.com/questions/54749558/avoid-rerender-in-react-caused-by-objects-literal-how-to-do-with-variables-in
Trin
ну раз мы выяснили, что инлайн стили не влияют на перф и перешли к личным наблюдениям, я разделяю ваше мнение, инлайны в больших компонентах мешают читать код. но как по мне, оборачивать всё поголовно, бездумно в useMemo/useCallback — такой же позор, как и незнание о этих хуках
Alexey
Alexey
ну да, как раньше инлайн не влиял на перф, так и сейчас 🤷♂️
ну давай так, тебе к примеру 100 элементов приходит и ты их рендеришь компонентом, везде прописаны достаточно большие инлайн стили, в компоненте допустим 10 инлайн стилей, сколько объектов будет создано? я даже не про ререндер сейчас, а банально про память
Alexey
10 переменных из 1000 объектов есть разница?
Trin
ну давай так, тебе к примеру 100 элементов приходит и ты их рендеришь компонентом, везде прописаны достаточно большие инлайн стили, в компоненте допустим 10 инлайн стилей, сколько объектов будет создано? я даже не про ререндер сейчас, а банально про память
если вы на полном серьёзе считаете, что в вашем случае надо начинать оптимизацию с меморизации инлайна, а не с того факта, что 100/1000 элементов по какой-то причине надо рендерить одновременно на экране, то мои полномочья всё. по поводу памяти, я уже говорил, самые дохлые телефоны за 5к рублей имеют по 2 гига оперы. самый большой инлайн будет ну 2 килобайта, ну пусть их будет 10 на компонет, 20 килобайт, ну пусть с какого-то тебе надо 1000 элементов одновременно зарендерить, это будет 20 мегабайт, это пщик.
и повторю, в вашем кейсе начинать надо с вопроса, зачем рендерить 1000 элементов одновременно.
Alexey
если вы на полном серьёзе считаете, что в вашем случае надо начинать оптимизацию с меморизации инлайна, а не с того факта, что 100/1000 элементов по какой-то причине надо рендерить одновременно на экране, то мои полномочья всё. по поводу памяти, я уже говорил, самые дохлые телефоны за 5к рублей имеют по 2 гига оперы. самый большой инлайн будет ну 2 килобайта, ну пусть их будет 10 на компонет, 20 килобайт, ну пусть с какого-то тебе надо 1000 элементов одновременно зарендерить, это будет 20 мегабайт, это пщик.
и повторю, в вашем кейсе начинать надо с вопроса, зачем рендерить 1000 элементов одновременно.
если ты пишешь нормальный чат, то у тебя в библике будет не менее 10 компонентов, даже пусть 10 сообщений у тебя, это 100 компоненетов
Alexey
я тебе говорю, что инлайн стили херня и этого избегать надо, ты мне пишешь, про цену телефонов
Alexey
я тебе даю доводы, ты пишешь, это фигня надо смотреть другое лучше, и опять что телефон юзера все говно выдержит
Alexey
и выше писал, что это не решает все проблемы, но один неправильно поставленный инлайн стиль может хорошо уронить производительность
Trin
Alexey
https://codesandbox.io/s/6vowz0w2wz?expanddevtools=1&file=/src/index.js
Alexey
не поленись поставь на свой проект WDYR и ты вероятно найдешь такие места
Alexander
https://blog.dbilgin.com/posts/are-inline-styles-bad/
спасибо за ссылку, давно заметил что стили теперь возвращаются как объекты.
но даже автор статьи пишет что в больших проектах создавать стили на каждый рендер может просадить производительность, и от себя добавлю что есть такая штука как батарейка, и даже если девайсы сейчас очень мощные и могут переварить некачественный код, то батарейку до сих пор стоит экономить
да и девайсы есть старые, на старые андроидах все очень печально работает если не оптимизировать
Alexey
лучше сразу писать оптимально, а не расчитывать на железо
Alexey
Alexey
в реальной жизни ты редко рендеришь просто текст
Trin
спасибо за ссылку, давно заметил что стили теперь возвращаются как объекты.
но даже автор статьи пишет что в больших проектах создавать стили на каждый рендер может просадить производительность, и от себя добавлю что есть такая штука как батарейка, и даже если девайсы сейчас очень мощные и могут переварить некачественный код, то батарейку до сих пор стоит экономить
да и девайсы есть старые, на старые андроидах все очень печально работает если не оптимизировать
на старых девайсах всё очень печально в любом случае, вне зависимости от вашей оптимизации.
батарейка это прекрасно, экономить её надо, но в вашем случае вы сэкономите либо 0.000001% батарейки, т.к. ваше приложение на экране появляется на минуту в день, либо, если ваше приложение постоянно на экране, то пользователь очевидно сидит на зарядке.
Alexey
Trin
ты хочешь сказать, что лучше говнокодить? все равно ничего не поможет?
я хочу сказать, что юзаю styled-components и стараюсь держать код адекватным, где надо — useMemo, где надо — useCallback. но так бывает не всегда, если нужно быстро запустить mvp и на руках нет ни тз ни дизайна, вполне можно набросать всё из говна и палок и оно будет работать. проверить модель и если всё работает, как задумано и оно нужно пользователю, потом уже делать красиво.
я не говорю, что писать адекватный код это плохо, а говнокодить это хорошо. мы говорим о том, что инлайн стили не будут сильно влиять на перформанс. а если они по какой-то причине влияют да так, что это заметно — скорее всего дело не в них.
Alexey
я хочу сказать, что юзаю styled-components и стараюсь держать код адекватным, где надо — useMemo, где надо — useCallback. но так бывает не всегда, если нужно быстро запустить mvp и на руках нет ни тз ни дизайна, вполне можно набросать всё из говна и палок и оно будет работать. проверить модель и если всё работает, как задумано и оно нужно пользователю, потом уже делать красиво.
я не говорю, что писать адекватный код это плохо, а говнокодить это хорошо. мы говорим о том, что инлайн стили не будут сильно влиять на перформанс. а если они по какой-то причине влияют да так, что это заметно — скорее всего дело не в них.
а я не говорил, что всегда сильно, что влияет и в редких кейсах сильно может просадить, в целом это влияет качество кода, многие MVP год пилят
Alexey
тут просаживаешь 1% производительности, там и так набирается
Trin
а я не говорил, что всегда сильно, что влияет и в редких кейсах сильно может просадить, в целом это влияет качество кода, многие MVP год пилят
если mvp пилится год, это уже долгострой, а не mvp )
про курочка по зёрнышку я понимаю о чём вы, но если мы говорим про react-native приложение на 20 экранов (что редко, обычно их меньше), если мы говорим о том, что понимаем как работает рендер/ререндер, если мы знаем о существовании wdyr и у нас есть здравый смысл, то очень сложно насобирать по 1% с разных участков кода, даже если по какой-то причине было принято писать стили инлайн.
писать стили инлайн плохо, в этом я вас полностью поддерживаю, но если сильно хочется — ничего плохого не случится
Alexey
если mvp пилится год, это уже долгострой, а не mvp )
про курочка по зёрнышку я понимаю о чём вы, но если мы говорим про react-native приложение на 20 экранов (что редко, обычно их меньше), если мы говорим о том, что понимаем как работает рендер/ререндер, если мы знаем о существовании wdyr и у нас есть здравый смысл, то очень сложно насобирать по 1% с разных участков кода, даже если по какой-то причине было принято писать стили инлайн.
писать стили инлайн плохо, в этом я вас полностью поддерживаю, но если сильно хочется — ничего плохого не случится
так влияет на перфоманс или нет? чтобы уж точку поставить, без но, да или нет
Alexey
принято писать инлайн стили это лень называется )
Alexey
Alexander
Alexander
чем только не оправдывают говнокод)
Alexander
Alexey
Trin
Alexey
у меня телефон лагает ))) в режиме экономии, это заметно даже на анимациях открытия в телеге
Trin
Trin
Alexey
Alexey
телефон даже последней модели при низком заряде явно работает медленне, я не говорю про iphone 7, да даже X + не у всех новая батарея, это тоже влият, ты как бизнесмен должен это понимать
Alexey
все ты уводишь куда-то, вопрос простой был, теперь обсуждаем зарядку, но @kbeptu молодец, хорошо подметил, у меня телефон как раз на 1% был я проверил
Trin
телефон даже последней модели при низком заряде явно работает медленне, я не говорю про iphone 7, да даже X + не у всех новая батарея, это тоже влият, ты как бизнесмен должен это понимать
тут мы возвращаемся к тому, как часто твоим приложением пользуются. мы делаем разные логистические b2b решения. пешие курьеры пользуются приложем только для выставления статусов по сути, водители же чаще всего держат устройства на зарядке перманентно.
если брать личный опыт, я замечаю лаги приложения чаще, когда у разрабов проблемы с бэкендом. когда очевидно жду, пока они подгрузят данные из кривого бэка, нежели чем пока эти же данные отрендарятся
Alexey
Trin
фронтеры, конечно, не могут влиять на бэк. я скорее о том, что не могу вспомнить приложений, которые бы тормозили именно ui, ну кроме очевидно кривых приложей, с вылетами итп. и при этом встретить приложение с тормозящим бэком — изи.
меня как пользователя чаще именно это бесит, тормозов ui я, повторю, не помню. возможно они есть, но я их не замечаю.
или из бесячего — явные ошибки логики, например, токен авторизации с коротким сроком жизни. приложение нефтьмагистрали этим грешило, заезжаешь на заправку раз в 2 недели и каждый раз надо авторизоваться через смс. и это тоже ошибки бэка, на которые фронтеры никак явно повлиять не могут. но будь приложение трижды оптимизированным, я как пользователь на авторизации потеряю больше времени, чем вся оптимизация 🤷♂️
Alexey
фронтеры, конечно, не могут влиять на бэк. я скорее о том, что не могу вспомнить приложений, которые бы тормозили именно ui, ну кроме очевидно кривых приложей, с вылетами итп. и при этом встретить приложение с тормозящим бэком — изи.
меня как пользователя чаще именно это бесит, тормозов ui я, повторю, не помню. возможно они есть, но я их не замечаю.
или из бесячего — явные ошибки логики, например, токен авторизации с коротким сроком жизни. приложение нефтьмагистрали этим грешило, заезжаешь на заправку раз в 2 недели и каждый раз надо авторизоваться через смс. и это тоже ошибки бэка, на которые фронтеры никак явно повлиять не могут. но будь приложение трижды оптимизированным, я как пользователь на авторизации потеряю больше времени, чем вся оптимизация 🤷♂️
А какой опыт? Над каким количеством приложений работал?
Trin
если не брать натив, cordova/phonegap/ionic итп, если только rn, то в продакшене 4 приложа. мы делаем в основном инхауси очень редко по знакомству на сторону. для себя только b2b делаем и я понимаю, что это сильно развязывает руки. кому делали b2c на сторону, никто не жаловался.
ну и да, мы сами делаем и фронт и бэк, команда одна, что сильно упрощает работу между фронтерами и бэкерами
Trin
а у вас какой опыт?
Alexey
а у вас какой опыт?
Штук 10 приложений лет 5 с react native работаю. В разных ролях был на прилах
Alexey
Apple приглашал на закрытое мероприятие ) за качественную прилу )
Trin
Apple приглашал на закрытое мероприятие ) за качественную прилу )
ну вот, а говорят, что react-native не может в тот же перформанс, что и натив.
я долго на cordova писал и осознанного не переходил на rn, мне казалось, что это будет ограничивать возможности, как-то ближе к веб технологиям мы были, а если надо чего нативное — всегда можно написать свой модуль для кордовы.
Alexey
Alexey
Trin
то что? ) я сразу начну везде useMemo юзать? )) есть же useSharedValue и useAnimatiedStyle, которые не ререндерят компоненты для анимации? или мы про что?
Artur
Извините, влезу на секундочку, а причем тут useMemo ?) ввроде это не обсуждали изначально)