Alexey
сейчас еще пойдет тема, что useCallback и useMemo бесполезные хуки
Alexey
советую поставить https://github.com/welldone-software/why-did-you-render и посмотреть как в реальности
Alexey
frontend developer
привет всем, меня зовут Бека и фронтенд разработчик и у меня вопрос хотел на мабайл перейти с чего начать знаю: react js git html css bootstrap
frontend developer
Да я вот хочу с него и начать )
frontend developer
Нее просто задалбался верстать (
frontend developer
Я думаю в мабайле больше функциональности и как-то мне больше по душе мабайл чем веб
frontend developer
И ещё конкуренция бешеная )
Alexander
https://styled-components.com/
весь этот хлам ломает оптимизацию стилей
Trin
весь этот хлам ломает оптимизацию стилей
ну, полно вам, прям хлам ) на вкус и цвет. а что за оптимизация стилей?
Trin
откуда инфа? замерял?
возможно автор имеет введу оптимизацию ререндера с 18 реакта, хз. но если вы покажете мне приложение, где из-за инлайн стилей и их изменения сильно страдает перформанс — я прям руку вам пожму. до тех пор, увы, это миф
Null
clean-rn - Чистит весь кэш React Native https://github.com/mrousavy/clean-rn
Null
https://www.youtube.com/watch?v=5yM4NPcTwY4
Алексей
а что поменялось?
https://blog.dbilgin.com/posts/are-inline-styles-bad/
Алексей
откуда инфа? замерял?
https://blog.dbilgin.com/posts/are-inline-styles-bad/
Alexey
и что кто-то написал, что-то в 2021 году ты поверил? ) а ты сам не пробовал проверять? а ты пробовал WDYR, но не в проекте где 2 компонента, а на продакшене среднего проекта ? В самой статье написано верно, но он написал в простых кейсах так
Alexey
есть еще теория такая разбитых окон, все начинается с инлайн стилей, все проекты, на которые я приходил и жутко тормозят были инлайн стили, они мешают код читать, мешают дебажить и конечно же если их убрать ничего не изменится, тк человек на это забивающий обычно забивает и на селекторы к примеру, в хороших проектах все аккуратно, это не панация, а как бы показатель, хотябы того, что eslint не настроен
Alexey
возможно автор имеет введу оптимизацию ререндера с 18 реакта, хз. но если вы покажете мне приложение, где из-за инлайн стилей и их изменения сильно страдает перформанс — я прям руку вам пожму. до тех пор, увы, это миф
на тех проектах, как уже выше указал Алексей, где начинаются тормоза и первое что делают разработчики обычно расставлюят memo везде, но забывают при инлайн стили к примеру, ну и выше я указал, это один из показателей качества кода
Alexey
https://stackoverflow.com/questions/54749558/avoid-rerender-in-react-caused-by-objects-literal-how-to-do-with-variables-in
Trin
ну раз мы выяснили, что инлайн стили не влияют на перф и перешли к личным наблюдениям, я разделяю ваше мнение, инлайны в больших компонентах мешают читать код. но как по мне, оборачивать всё поголовно, бездумно в useMemo/useCallback — такой же позор, как и незнание о этих хуках
Trin
https://stackoverflow.com/questions/54749558/avoid-rerender-in-react-caused-by-objects-literal-how-to-do-with-variables-in
вы сами писали про «кто-то что-то написал в 2021…», и тут же приводите ссылку, которой 4 с половиной года 🤷‍♂️ за это время многое изменилось в оптимизации реакта
Trin
в этом плане не изменилось
ну да, как раньше инлайн не влиял на перф, так и сейчас 🤷‍♂️
Alexey
ну да, как раньше инлайн не влиял на перф, так и сейчас 🤷‍♂️
ну давай так, тебе к примеру 100 элементов приходит и ты их рендеришь компонентом, везде прописаны достаточно большие инлайн стили, в компоненте допустим 10 инлайн стилей, сколько объектов будет создано? я даже не про ререндер сейчас, а банально про память
Alexey
10 переменных из 1000 объектов есть разница?
Trin
ну давай так, тебе к примеру 100 элементов приходит и ты их рендеришь компонентом, везде прописаны достаточно большие инлайн стили, в компоненте допустим 10 инлайн стилей, сколько объектов будет создано? я даже не про ререндер сейчас, а банально про память
если вы на полном серьёзе считаете, что в вашем случае надо начинать оптимизацию с меморизации инлайна, а не с того факта, что 100/1000 элементов по какой-то причине надо рендерить одновременно на экране, то мои полномочья всё. по поводу памяти, я уже говорил, самые дохлые телефоны за 5к рублей имеют по 2 гига оперы. самый большой инлайн будет ну 2 килобайта, ну пусть их будет 10 на компонет, 20 килобайт, ну пусть с какого-то тебе надо 1000 элементов одновременно зарендерить, это будет 20 мегабайт, это пщик. и повторю, в вашем кейсе начинать надо с вопроса, зачем рендерить 1000 элементов одновременно.
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
лучше сразу писать оптимально, а не расчитывать на железо
Trin
не поленись поставь на свой проект WDYR и ты вероятно найдешь такие места
когда есть проблемы с рендером, я включаю wdyr, но опять же, вы приводите пример из официальной песочницы, где за каким-то хером 3к элементов рендерится. если нет явных проблем с перфом, я даже не пытаюсь ничего оптимизировать, это бесмысленная трата времени
Alexey
в реальной жизни ты редко рендеришь просто текст
Trin
спасибо за ссылку, давно заметил что стили теперь возвращаются как объекты. но даже автор статьи пишет что в больших проектах создавать стили на каждый рендер может просадить производительность, и от себя добавлю что есть такая штука как батарейка, и даже если девайсы сейчас очень мощные и могут переварить некачественный код, то батарейку до сих пор стоит экономить да и девайсы есть старые, на старые андроидах все очень печально работает если не оптимизировать
на старых девайсах всё очень печально в любом случае, вне зависимости от вашей оптимизации. батарейка это прекрасно, экономить её надо, но в вашем случае вы сэкономите либо 0.000001% батарейки, т.к. ваше приложение на экране появляется на минуту в день, либо, если ваше приложение постоянно на экране, то пользователь очевидно сидит на зарядке.
Trin
ты хочешь сказать, что лучше говнокодить? все равно ничего не поможет?
я хочу сказать, что юзаю styled-components и стараюсь держать код адекватным, где надо — useMemo, где надо — useCallback. но так бывает не всегда, если нужно быстро запустить mvp и на руках нет ни тз ни дизайна, вполне можно набросать всё из говна и палок и оно будет работать. проверить модель и если всё работает, как задумано и оно нужно пользователю, потом уже делать красиво. я не говорю, что писать адекватный код это плохо, а говнокодить это хорошо. мы говорим о том, что инлайн стили не будут сильно влиять на перформанс. а если они по какой-то причине влияют да так, что это заметно — скорее всего дело не в них.
Alexey
тут просаживаешь 1% производительности, там и так набирается
Trin
а я не говорил, что всегда сильно, что влияет и в редких кейсах сильно может просадить, в целом это влияет качество кода, многие MVP год пилят
если mvp пилится год, это уже долгострой, а не mvp ) про курочка по зёрнышку я понимаю о чём вы, но если мы говорим про react-native приложение на 20 экранов (что редко, обычно их меньше), если мы говорим о том, что понимаем как работает рендер/ререндер, если мы знаем о существовании wdyr и у нас есть здравый смысл, то очень сложно насобирать по 1% с разных участков кода, даже если по какой-то причине было принято писать стили инлайн. писать стили инлайн плохо, в этом я вас полностью поддерживаю, но если сильно хочется — ничего плохого не случится
Alexey
принято писать инлайн стили это лень называется )
Trin
так влияет на перфоманс или нет? чтобы уж точку поставить, без но, да или нет
мы не поставим точку, судя по всему ) вы продолжите настаивать, что влияет, я продолжу настаивать, что не настолько, чтобы это было заметно 🤷‍♂️
Alexander
на старых девайсах всё очень печально в любом случае, вне зависимости от вашей оптимизации. батарейка это прекрасно, экономить её надо, но в вашем случае вы сэкономите либо 0.000001% батарейки, т.к. ваше приложение на экране появляется на минуту в день, либо, если ваше приложение постоянно на экране, то пользователь очевидно сидит на зарядке.
куда то пропал коммент писал что на старых девайсах все печально не в «в любом случае», лично оптимизировал с состояния «невозможно пользоваться» в «вполне сносно» и если приложение долго запущено то не значит что пользователь на зарядке - бред какой то
Alexander
чем только не оправдывают говнокод)
Trin
куда то пропал коммент писал что на старых девайсах все печально не в «в любом случае», лично оптимизировал с состояния «невозможно пользоваться» в «вполне сносно» и если приложение долго запущено то не значит что пользователь на зарядке - бред какой то
с точки зрения бизнеса, это бесполезный опыт ) нет смысла оплачивать разработчикам их время ради 1% пользователей на старых девайсах. за редким исключением, конечно. старые девайсы на старых андройдах могут просто неуметь в современную оптимизацию. на примере с gps, один и тот же код может по разному работать на разных версиях андройда. если брать китайские нонеймы, там gps может без причины просто не заводится, например )
Alexander
с точки зрения бизнеса, это бесполезный опыт ) нет смысла оплачивать разработчикам их время ради 1% пользователей на старых девайсах. за редким исключением, конечно. старые девайсы на старых андройдах могут просто неуметь в современную оптимизацию. на примере с gps, один и тот же код может по разному работать на разных версиях андройда. если брать китайские нонеймы, там gps может без причины просто не заводится, например )
это уже бизнесу решать, и во многих странах типа африки там 99% таких девайсов, но разрабы в большинстве случаев даже не спрашивают бизнес и тупо говнокодят но даже на новых девайсах есть режим экономии батарейки, а за несколько процентов до выключения включается дополнительная экономия ресурсов и соответственно даже на новых девайсах можно добиться диких лагов
Alexey
у меня телефон лагает ))) в режиме экономии, это заметно даже на анимациях открытия в телеге
Trin
у меня телефон лагает ))) в режиме экономии, это заметно даже на анимациях открытия в телеге
ну т.е. проблема не в приложениях? я глянул расход батареи у себя — 40% это поиск сети 😄
Alexey
ну т.е. проблема не в приложениях? я глянул расход батареи у себя — 40% это поиск сети 😄
нет, я просто внимателен к мелочам и вижу изменения небольшие даже
Alexey
телефон даже последней модели при низком заряде явно работает медленне, я не говорю про iphone 7, да даже X + не у всех новая батарея, это тоже влият, ты как бизнесмен должен это понимать
Alexey
все ты уводишь куда-то, вопрос простой был, теперь обсуждаем зарядку, но @kbeptu молодец, хорошо подметил, у меня телефон как раз на 1% был я проверил
Trin
телефон даже последней модели при низком заряде явно работает медленне, я не говорю про iphone 7, да даже X + не у всех новая батарея, это тоже влият, ты как бизнесмен должен это понимать
тут мы возвращаемся к тому, как часто твоим приложением пользуются. мы делаем разные логистические b2b решения. пешие курьеры пользуются приложем только для выставления статусов по сути, водители же чаще всего держат устройства на зарядке перманентно. если брать личный опыт, я замечаю лаги приложения чаще, когда у разрабов проблемы с бэкендом. когда очевидно жду, пока они подгрузят данные из кривого бэка, нежели чем пока эти же данные отрендарятся
Trin
фронтеры, конечно, не могут влиять на бэк. я скорее о том, что не могу вспомнить приложений, которые бы тормозили именно 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, мне казалось, что это будет ограничивать возможности, как-то ближе к веб технологиям мы были, а если надо чего нативное — всегда можно написать свой модуль для кордовы.
Trin
А часто ли ты к примеру используешь reanimated? Может тебе кроме JS треда и правда ничего не нужно
не часто, разве что на каких-то pet проектах посмотреть, что нового появилось. с reanimated1 я почти не друэил, а второй не то, чтобы сильно надо следить за потоками как я понял, т.к. либа за тебя многое делает
Trin
то что? ) я сразу начну везде useMemo юзать? )) есть же useSharedValue и useAnimatiedStyle, которые не ререндерят компоненты для анимации? или мы про что?
Artur
Извините, влезу на секундочку, а причем тут useMemo ?) ввроде это не обсуждали изначально)