FWFrontend WeeklyПоддержи
На главную

Еженедельный дайджест #62: Новости фронтенда

Как читать этот дайджест
  • Начните с заголовков статей, чтобы получить общее представление о содержании
  • Быстро пробегитесь по первым абзацам, чтобы понять актуальность материалов именно для вас
  • Выберите наиболее интересные или полезные темы под текущие задачи
  • Планируйте чтение: выделите, например, 15 минут утром и 15 минут вечером
  • Не пытайтесь прочитать всё сразу — возвращайтесь к дайджесту в удобное время
  • При повторном просмотре читайте выбранные статьи более вдумчиво, делая заметки
  • Не сожалейте, если прочитали лишь часть: ценность в качестве, а не в количестве
  • Используйте закладки для сохранения интересных материалов
  • Делитесь инсайтами и ссылками с коллегами — так информация лучше усвоится
Фронти на связи — выпуск #62! 🗞️
HTML избавляется от старых костылей. 🧪
CSS всё чаще управляет компонентами сам. 🎨
Safari наконец приручил top-level await. 📦
React 19.3: Fragment Refs и View Transitions! ⚛️
Shopify возвращается к Swift и Kotlin. 📱
Node готовит встроенные бенчмарки. ⚙️
Vitest 5 ускоряет тесты и показывает трассировку. 🧪
Tailwind Labs присоединяется к Shopify. 🌬️
ИИ помогает разбирать тысячи GitHub-задач. 🤖
Фронти - маскот дайджеста

🧪 HTML и веб-платформа

Что нового появилось в HTML в 2026 году

HTML развивается спокойнее JavaScript и CSS, но платформа продолжает получать новые возможности. В большом обзоре современного HTML собраны экспериментальные элементы для геолокации, камеры и микрофона, 3D-моделей и рисования HTML-содержимого внутри Canvas.

Эти API пока нельзя без проверки поддержки переносить в рабочие проекты. Зато обзор хорошо показывает направление развития платформы: типовые возможности постепенно становятся частью браузера, а разработчику требуется меньше собственного JavaScript.

Какие старые фрагменты HTML уже не нужны

В разборе устаревших HTML-конструкций объясняется происхождение условных комментариев, X-UA-Compatible, настроек ClearType и других строк, которые до сих пор копируют из старых шаблонов. Большая часть таких инструкций решала проблемы давно исчезнувших браузеров и теперь лишь усложняет документ.

🎨 CSS и дизайн

Нужен ли сайту переключатель тёмной темы

Lea Verou после обсуждения вариантов переключателя темы и аргументов в пользу трёх состояний пришла к более радикальному выводу: постоянная кнопка может быть вообще не нужна. Если сайт корректно следует системной теме, отдельный контрол полезен только там, где посетителю действительно важно менять оформление независимо от системы.

Компоненты связываются через CSS без JavaScript

Typed attr() позволяет брать типизированное значение из HTML-атрибута и использовать его в CSS, например для числа колонок или размера отступа. В статье про связку attr() и container style queries показано, как передавать такое состояние дочерним элементам без дополнительных классов и JavaScript.

Подход пока требует внимания к поддержке браузерами, но делает границу между разметкой и стилями яснее: HTML задаёт данные компонента, а CSS решает, как их представить.

  • Современные свойства CSS помогают создать собственный scrollbar без тяжёлых вычислений размеров и видимости в JavaScript.
  • CSS Anchor Positioning можно использовать, чтобы анимировать перестроение Grid и связывать движение элементов с их новыми позициями.
  • Roux предлагает стартовый набор нативных стилей, переменных и HTML-компонентов; результат можно посмотреть в документации проекта.
  • В Drawably собраны рисованные элементы интерфейса с анимациями и повторяемой случайностью. Библиотека занимает около 7 КБ JavaScript в сжатом виде, не имеет зависимостей, а исходный код открыт на GitHub.

🔐 Безопасность и доступность

CSS может стать оружием внутри почтового клиента

Исследование атак через CSS в веб-почте показывает, что таблицы стилей способны не только менять внешний вид письма. Ошибки фильтрации позволяют подменять части интерфейса, обходить прокси изображений и даже собирать введённые пользователем данные.

  • Dropbox рассказала о внутреннем аудиторе cookie, который автоматически проверяет поведение файлов cookie на сотнях страниц и сервисов компании.
  • WCAG Radar запускается как расширение или bookmarklet, проверяет открытую страницу по WCAG 2.1 и 2.2 AA и отмечает найденные проблемы прямо в интерфейсе.
  • SimpleWebAuthn 14.0 научился проверять постквантовые passkey на основе ML-DSA, а на Node.js 24.7 и новее предпочитает ML-DSA-44 при регистрации.

Заходите в Telegram-канал

Там можно спокойно обсудить выпуск, принести свою ссылку, задать вопрос или просто отметить материал, который пригодился в работе

Заглянуть

📦 JavaScript и браузеры

Почему Safari пришлось переписать загрузчик модулей

Поддержка top-level await годами вызывала в Safari ошибки вида «нельзя обратиться до инициализации». Команда WebKit объяснила, как старую реализацию модулей заменили на соответствующую спецификации. Полностью исправленное поведение войдёт в Safari 27.

Проблема была глубже отдельного оператора: загрузчик строился по раннему варианту стандарта, который затем отменили. Асинхронное выполнение модулей потребовало заново согласовать порядок загрузки, связывания и вычисления зависимостей.

await fetch() ждёт не весь ответ

Вызов await fetch(url) завершается, когда браузер получил заголовки, а не всё тело ответа. Разбор реального поведения fetch() объясняет, почему это важно для таймаутов, отмены запросов, clone() и повторного использования соединений.

⚛️ React и React Native

React 19.3 стабилизировал Fragment Refs и View Transitions

В React 19.3 два ожидаемых API вышли из экспериментального статуса. Fragment Refs дают управлять фокусом, событиями и измерениями группы DOM-узлов без лишней обёртки. Компонент <ViewTransition> анимирует появление, исчезновение и перемещение элементов, включая раскрытие Suspense; познакомиться с базовым API помогает практический обзор View Transitions.

Релиз также расширил возможности Server Components, научился сохранять объекты Trusted Types при передаче в DOM и добавил use(browser()) для компонентов, которым нужны только браузерные API. Остальные исправления и изменения перечислены в полных примечаниях к версии 19.3.

Shopify отказывается от React Native в основных приложениях

После шести лет активного использования React Native Shopify решила вернуться к нативной разработке на Swift и Kotlin. Компания считает, что ИИ-инструменты снизили цену параллельной разработки под две платформы, а нативный стек даёт прямой доступ к новым возможностям iOS и Android. Отдельный отчёт описывает 12-недельный перенос приложения Shop и сравнивает запуск, стабильность и размер сборки.

React Compiler на Rust ускорил большую сборку в 17 раз

Команда перевела приложение из тысячи с лишним файлов на Rust-версию React Compiler из проекта oxc. В отчёте о миграции компиляция сократилась с 14,3 до 0,81 секунды, а новый порт смог оптимизировать некоторые шаблоны, которые пропускает реализация на Babel.

  • React DevTools 8.0 включает вкладку Suspense по умолчанию и убирает Timeline в пользу панели Performance браузера. Экспериментальный пакет открывает данные DevTools ИИ-агентам через MCP.
  • При переносе Discord на новую архитектуру React Native только 14% задач относились к самой миграции. В разборе длинного хвоста работ перечислены обновления библиотек, инфраструктуры и собственного нативного кода.
  • Включение перевода страницы в Chrome может размонтировать React-приложение. Статья про ошибку removeChild при работе Chrome Translate объясняет, почему популярный monkey patch скрывает падение, но не чинит интерфейс.
  • Evil Martians описали переезд с Gatsby на Astro меньше чем за десять дней, сохранив существующие React-компоненты после предварительной подготовки.
  • Jotai 3.0 стал ESM-only, требует React 18 и TypeScript 5.5, переносит atomFamily в отдельный пакет и заменяет loadable на unwrap. Автор отдельно разобрал единственное изменение поведения.
  • Полностью переписанный React Native ExecuTorch 0.10 запускает ИИ-модели на устройстве через настраиваемые TypeScript-конвейеры; сайт проекта показывает доступные модели и платформы.
  • Vidact компилирует React-подобные функциональные компоненты и хуки в прямые операции с DOM без Virtual DOM и React runtime. Неподдерживаемые шаблоны останавливают сборку с ошибкой.
  • React Google Maps 1.10 добавил декларативные 3D-модели и маркеры для Google Maps JavaScript API, которые можно изучить в интерактивном примере.
  • Lexical 0.50 получил HMR и пакет @lexical/compiler для более эффективного удаления неиспользуемого кода во время сборки.
  • Base UI 1.8 обновил библиотеку компонентов без готового оформления, которая стала стандартной основой для shadcn/ui.
  • wouter 3.11 продолжает предлагать маршрутизацию примерно в 2 КБ для React и имеет отдельную поддержку Preact.
  • Доступен релиз-кандидат React Native 0.88 для ранней проверки совместимости приложений и библиотек.

🛰️ Фреймворки и рантаймы

Как Turbopack делит JavaScript на части

На примере официального сайта Next.js команда объяснила стратегию разбиения кода в Turbopack. Сборщику приходится выбирать между количеством сетевых запросов и объёмом лишнего кода: иногда восемь крупных чанков весят больше, чем 355 маленьких.

  • Bun 1.4.1 и Bun 1.4.2 снизили потребление памяти в простое, уменьшили результат bun build и добавили одновременную работу HTTP/1.1 и HTTP/2 на одном порту Bun.serve.
  • Вышли Astro 7.3, Vuetify 4.2 и компонент vue-echarts 8.3 для графиков Apache ECharts во Vue.
  • Astro LilyPond превращает текстовую запись музыки в нотную графику во время сборки Astro-сайта.
  • TanStack описала партнёрство с Vercel и выпустила адаптеры TanStack AI для AI Gateway и Sandbox.

⚙️ Node.js

В Node.js появится встроенный запуск бенчмарков

Экспериментальный модуль node:bench строится по образцу node:test: тесты производительности можно будет запускать через node --bench и получать JSON-отчёт. Реализация уже попала в основную ветку Node.js, но API ещё может измениться до релиза.

Критическая уязвимость показала ограничения vm2

Исследователи GitLab нашли выход из песочницы vm2 с оценкой CVSS 10.0. Ошибка исправлена начиная с 3.11.7, однако авторы рекомендуют не доверять библиотеке выполнение действительно враждебного кода. Сама документация vm2 также описывает фундаментальную сложность безопасной изоляции JavaScript.

🤖 ИИ и разработка

⚒️ Инструменты и библиотеки

Vitest 5 ускорил тесты и добавил пошаговую отладку

Vitest 5 сосредоточился на скорости и поиске причин падения тестов. В проектах с большим количеством зависимостей команда измерила ускорение до 53%, а новый Trace View позволяет пошагово воспроизвести браузерный тест.

Команда vitest doctor анализирует конфигурацию и предлагает настройки для ускорения набора тестов. Это особенно удобно, когда отдельные тесты быстрые, но общий запуск замедляют изоляция, зависимости или неоптимальный пул процессов.

Rslib 1.0 собирает библиотеки и CLI

Rslib 1.0 предлагает единый конвейер публикации JavaScript-библиотек: параллельные ESM- и CJS-сборки, CSS компонентов React, Vue, Svelte и Solid, а также Module Federation. Для Node.js он умеет выводить целевую версию синтаксиса из engines.node, быстрее создавать декларации на TypeScript 7 и экспериментально собирать исполняемые Node SEA-файлы.

Атака на цепочку поставки npm привела к арестам

Двух подозреваемых арестовали по делу об атаках TeamPCP. Группу связывают с копированием механики червя Shai-Hulud и последующими волнами заражений, получившими название Mini Shai-Hulud. История напоминает, что обновление пакета может принести в проект не только исправления, но и код, опубликованный через захваченный аккаунт.

Обновления

  • Вышли ESLint 10.10 и Storybook 10.6.
  • ESLint Config Inspector 3.4 добавил измерение времени правил, чтобы находить причины медленного линтинга.
  • eslint-plugin-regexp 3.3 находит ошибки и неоднозначности в регулярных выражениях; набор проверок можно увидеть в онлайн-песочнице.
  • GPUIX 0.7 строит нативные GPU-ускоренные desktop-приложения на React и TypeScript поверх технологии редактора Zed.
  • memlab 2.0.5 ищет утечки памяти в браузерных и Node.js-приложениях.
  • Confectionery — минималистичный браузер для macOS, который убирает лишние панели со скриншотов и занимает около 2,9 МБ.