Русский
Открыть в Telegram

Пост Скрытые утечки памяти в React: как компилятор не спасет вас

12 июля 2024
З
Заметки про React
Ссылка
нажмите — покажем
Скрытые утечки памяти в React: как компилятор не спасет вас Кевин Шинер недавно писал про useCallback и утечки памяти. Если кратко, то там было написано о том, что замыкания захватывают переменные из внешней области видимости, в React компонентах это означает захват пропсов, стейта или мемоизированных значений. Утечка памяти происходила, когда попеременно вызывался мемоизированный колбек, бесконечно создавая новую область видимости с ссылкой на старую. Если запустить пример из предыдущей статьи после React Compiler, то утечки памяти не будет. Однако, React Compiler не спасет вас от утечки памяти. Автор изменил пример, чтобы добиться утечки памяти с использованием React Compiler: export const App = () => { const [countA, setCountA] = useState(0); const [countB, setCountB] = useState(0); const bigData = new BigObject(`${countA}/${countB}`); // 10MB of data // --snip-- }; Теперь при каждом изменении стейта будет создаваться новый объект bigData. Утечка памяти будет происходить все так же при попеременном вызове мемоизированных колбеков. Как скомпилируется новый пример: const App = () => { const $ = compilerRuntimeExports.c(24); const [countA, setCountA] = reactExports.useState(0); const [countB, setCountB] = reactExports.useState(0); const t0 = `${countA}/${countB}`; let t1; if ($[0] !== t0) { t1 = new BigObject(t0); $[0] = t0; $[1] = t1; } else { t1 = $[1]; } const bigData = t1; // ... }; Чтобы предотвратить утечку памяти можно отказаться от мемоизации колбеков. Однако с React Compiler это сделать не получится. https://schiener.io/2024-07-07/react-closures-compiler
47 · 3.6K ·

Рядом в ленте

ЗЗаметки про ReactЛенивое обнаружение роутов в React Router В новой минорной версии React Router 6.24 появилась возможность ленивого обнаружения роутов. С помощью метода unstableЗЗаметки про React5 заблуждений о React Server Components В React 19 представили большое архитектурное изменение: разделение на серверные и клиентские компоненты. Серверные компо
это сообщение
ЗЗаметки про ReactИзучите Suspense создавая хук useFetch В своем блоге Слава Князев поэтапно создал хук useFetch для демонстрации того, как работает Suspense. Также автор показалЗЗаметки про ReactОтличия React и React Native Хоть React и React Native имеют много общего, внутри они довольно разные. В блоге Expo вышла статья о различиях между React и React
ЗЗаметки про ReactЗаметки про React@ru_react_notes · канал · Технологии
3 412подписчиков491постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем