169 похожих чатов

Ребят подскажите какой вариант более правильный и почему? 1) const Comp

= ({id}) => {
const renderName = () => id % 2 ===0 ? 'even' : 'odd'
return <div>{renderName()}</div>
}

2) const renderName = (id) => id % 2 ===0 ? 'even' : 'odd'

const Comp = ({id}) => {
return <div>{renderName(id)}</div>
}

17 ответов

7 просмотров

2 более правильный, потому что функция renderName будет создана только 1 раз в 1 случае же, функция будет пересоздаватся при каждом ререндере но на самом деле, это не сильно повлияет на перфоменс

const renderName = useMemo(() => id % 2 ? 'odd' : 'even', [id])

Mykhailo Kaduk
const renderName = useMemo(() => id % 2 ? 'odd' : ...

это плохой вариант, совершенно не нужная мемоизация

Daulet-Сактаганов Автор вопроса
Maxim Koylo
это не повлияет абсолютно

Если функиция сложная то повлияет же по логике

Daulet Сактаганов
Если функиция сложная то повлияет же по логике

да какая бы она не была ее обьявление на каждом рендере это невероятно быстрая операция

Daulet-Сактаганов Автор вопроса
Maxim Koylo
да какая бы она не была ее обьявление на каждом ре...

А как же понятие что компонента должна быть чистой

Daulet Сактаганов
А как же понятие что компонента должна быть чистой

По твоему это у нас грязный компонент?) const Comp = () => { const render = () => <div>text</div> return ( <div>{render()}</div> ) }

Daulet Сактаганов
А как же понятие что компонента должна быть чистой

может ты имел ввиду stateless компоненты? но все равно это не причем в данном случае

Maxim Koylo
это плохой вариант, совершенно не нужная мемоизаци...

ну человек переживал что функция будет создаваться каждый раз. Пусть не переживает

Mykhailo Kaduk
ну человек переживал что функция будет создаваться...

так может так ему и надо было писать, а не давать вредный совет?

Maxim Koylo
так может так ему и надо было писать, а не давать ...

так может со своей стороны напишешь? Учитель) А по поводу ненужной мемоизации - покажи мне метрику, где показано, насколько больше занимает этот расчет в сравнении с мемоизацией (сравнением значения и обращением к аккумулятору)

Mykhailo Kaduk
так может со своей стороны напишешь? Учитель) А по...

Мемоизация это не бесплатно, на хранение мемоизированого значения тратиться память и доп затраты для вычисления нужно ли нам вычислять значение заново или нет https://kentcdodds.com/blog/usememo-and-usecallback

Maxim Koylo
Мемоизация это не бесплатно, на хранение мемоизиро...

собсно что я и написал) Только затраты эти, как правило, очень маленькие. Просто хранишь аккумулятор для предыдущих аргументов и значения. В даном конкретном случае - да, мемоизация - скорее защита от страхов)

Mykhailo Kaduk
собсно что я и написал) Только затраты эти, как пр...

Нет. Без реального измерения и понимания хотя бы порядков этих затрат - это всё бессмысленно. То, что в статье написано должно всех натолкнуть на мысль - научиться измерять, для своих проектов, в своем окружении... без этого такие статьи абсулютно бессмыссленны.

Gena Black
Нет. Без реального измерения и понимания хотя бы п...

Я не хочу холиварить. Просто интересно стало. Есть какие-то данные о реальном импакте, по типу разноскейловых проектов, где кто-то хуярил мемоизацию для всего и для ничего? МОжет знаешь такие? я просто частенько сижу и думаю, вот стоит этот импакт того или нет. И в итоге все сводится очень часто к одной простой вещи. Если на проекте принято мемоизировать, то херячу, а если нет, то нет. Ну, если там будет редьюс в мапе в фильтре и т.д. и тп, то понятно, но вот в более простых кейсах, мне кажется, что самая большая экономия - это экономия времени разработчика, когда он не думает, а делает)

Mykhailo Kaduk
Я не хочу холиварить. Просто интересно стало. Есть...

Не знаю... Мемоизация для всего это конечно перебор. Но по опыту, ререндер чего-то сложнее одной ф-ции должен быть медленнее любой мемоизации (имеется ввиду сам механизм мемоизации, не целиком useMemo). Для примера (цифры не реальные, а с отладчика, который в хроме на хосте, но в среднем отличия от девайса в продакшн режиме не на порядки, в дебаггере чуть быстрее, чем на телефоне в проде), акшн в redux + сложный большой редьюсер с immer'ом + куча селекторов ~5мс и ререндер компонентов с реконсайлингом (без селекторов) ~40мс, из которых ~18ms экран с FlatList, ~10ms экран с айтемом и остальное какая-то неизвестная машинерия с бесконечным шедулингом фиберов внутри реакта. На этих цифрах текст было невозможно редактировать в поле ввода - лезли баги рассинхронизации с нативом. Т.е. пыталось приехать больше одного onChange пока JS тред был занят. Я поменял в селекторах ф-цию сравнения с shallow на deep equal, и чуть memo добавил в нужных местах. Экран со списком вообще перестал ререндериться (потому что данные непосредственно нужные списку не менялись), а остальное... В общем в сухом остатке, по вне реактовским вещам так и осталось ~5ms, а ререндер остался только в текстовом поле и вместе с реконсайлингом и прочей машинерией стали занимать ~10ms. А главное, стало возможно работать после этого с приложением.

Похожие вопросы

Обсуждают сегодня

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
32
А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Дорогие любители Прекрасной Джулии! Есть кто-то имеющий практический опыт построения ML для Систем Управления? Нам нужно сделать нейросеть для автоматической подстройки пара...
Roman Timo
4
С той же поддержкой Android в тулчейне, если кому интересно. На Swift Forums шло убогое обсуждение всякой херни годами, но ничего годного так и не появлялось. Пришел vgorloff ...
iMike
1
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Приветствую ребята,у меня база есть,прорешал много задач с литкода,там деревья,списки, бэктрэкинг и все остальное,что мне сейчас делать?есть может куда устроиться поработать,е...
Aקuст Lеתסuд Aקuст Lеתסuд
5
Всех приветствую. Направьте меня в нужное русло. Постепенно переписываю проект с delphi на lazarus. Приложение - обычный windows/linux клиент для бд firebird. Тут все хорошо. ...
Mishutka
7
Anybody want this chat app? If anybody interested dm  me.. Note - Firstly payment then i send you code but i will show work on gmeet.
Rayyan Ahmad
5
Карта сайта