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

Пост Почему глобальный патчинг вреден

15 мая 2024
З
Заметки про React
Ссылка
нажмите — покажем
Почему глобальный патчинг вреден В блоге Артема Захарченко вышла статья про вред глобального патчинга API, при котором меняется его поведение. В качестве примера автор приводит fetch в Next.js и Bun: // Next.js добавил кэширование и возможность сброса кэша fetch('https://kettanaito.com', { next: { revalidate: 10 }, }) // Bun добавил возможность проксировать запрос fetch('https://redd.one', { proxy: 'https://kettanaito.com', }) В обоих случаях меняется стандартное поведение функции fetch глобально. Глобальный патчинг API не только влечет за собой затраты, которые влияют как на пользователей, так и на мейнтенеров, но и вредит другим API и даже самому языку. Как вредит глобальный патчинг: - Поддержка. Когда вы что-то меняете глобально, вы изменяете то, чем не владеете. Поддержка того, чем ты не владеешь, сложно. Например, вы изменили глобально fetch, чтобы он умел дедуплицировать запросы. Что будет, если вы будете использовать сторонний модуль, в который также встроен механизм дедупликации. Эти два поведения будут конфликтовать, вызывая проблемы, которые сложно отладить. - Предсказуемость. Для того, чтобы CSS одинаково работал во всех браузерах были созданы стандарты стилей. Существуют стандарты Web API для кросс-браузерной совместимости. Также Node.js хорошо поддерживает Web API, предоставляя fetch, ReadableStream, WebSocket и т.д. Таким образом, использование одного API в разных средах предсказуемо. Поэтому изменение поведения fetch в Next.js вредит предсказуемости, потому что это поведение будет работать только в Next.js. - Обучение. Хорошее API должно обучать. Оно должно быть приближено к существующим стандартам. Взамен существующему глобальному патчингу в bun, можно использовать существующий API fetch и Request и создать отдельную функцию проксирования: import { proxy } from 'bun' const proxiedRequest = proxy(proxyUrl, new Request(url, options)) await fetch(proxiedRequest) Как можно сделать в Next.js: import { withCache } from 'next' const request = new Request('https://kettanaito.com') fetch(withCache(request, { revalidate: 10 })) Тем не менее, Next.js идет в сторону отдельной функции для кэширования запросов unstable_cache вместо глобального патчинга fetch. https://kettanaito.com/blog/why-patching-globals-is-harmful
12 · 3K ·

Рядом в ленте

ЗЗаметки про ReactЧастичный пре-рендер с помощью Bun Bun представил идею макросов в JavaScript. Макрос в Bun – это механизм запуска JS функций во время сборки. Значение, возвращаЗЗаметки про ReactHeadless 2.0 Headless – это библиотека компонентов без стилей, но с хорошей поддержкой доступности. Разрабатывается командой Tailwind CSS. Вышел релиз мажорной
это сообщение
ЗЗаметки про ReactГайд по SolidJS для React разработчиков Код на Solid очень похож на React, т.к. оба используют JSX. Однако Solid работает по-другому и важно знать эти отличия. ЗЗаметки про ReactКак работает RSC В блоге Smashing Magazine автор Лазарь Николов написал подробную статью о том, как работает React Server Components и как это отражается на заг
ЗЗаметки про ReactЗаметки про React@ru_react_notes · канал · Технологии
3 412подписчиков491постов в индексе
Лента площадки Открыть в Telegram

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

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