Explicit Resource Management окончательно принят TC39 — Комитет TC39 принял спецификацию Explicit Resource Management: using / await using декларации, SuppressedError, DisposableStack и AsyncDisposableStack. Теперь это часть языка — надёжное управление ресурсами без ручного cleanup.
Проекты
anime.js 4.5.0 — адаптеры для Three.js — Вышел anime.js 4.5.0 с API адаптеров — теперь можно анимировать Three.js-объекты через тот же синтаксис, что и DOM. 3D-stagger, jitter, seed, instanced mesh и цвета в hex/rgb/hsl без ручных преобразований.
Статьи, мнения, туториалы
JS/TS
Гонки данных в AsyncLocalStorage при HTTP/2 — AsyncLocalStorage привязан к async_hooks, которые изолируют одну цепочку асинхронных операций. При HTTP/2 мультиплексировании разные потоки попадают в один event-loop тик и перезаписывают данные друг друга. Каждый поток должен создавать свой Map, общий изменяемый объект внутри ALS — источник гонок.
WeakRef в EventEmitter вызывает GC-паузы до 5 секунд — В high-load Node.js приложениях подписки через WeakRef в горячем пути EventEmmitter создают pause-блокировки GC до 2–5 секунд. Долгоживущие объекты в old-space не собираются маркером из-за сокрытия за deref(). Решение — явно управлять подписками через on/off и избегать сильных ссылок на подписчиков.
Деоптимизация ESM: глубокий статический импорт vs Lazy Loading — Островная цепочка static import в ESM резолвит весь граф зависимостей синхронно перед выполнением кода, замедляя cold start на 30–50%. Динамический import помогает, но если модуль тащит свои статические зависимости — лаг просто переносится на первый запрос.
CSS
Gap Decorations: новое CSS-свойство rule для декоративных линий между элементами — Temani Afif показывает возможности нового свойства rule (gap decorations): линии-разделители в зазорах grid/flex, fancy-подчёркивание через rule-inset, паттерны-сетки на всю страницу, repeat() для чередующихся толщин и цветов. Пока только Chrome/Edge.
Анимируем — Rick Viscomi показывает прогрессивное улучшение: view-transition-name переносится внутри startViewTransition() с кнопки на диалог, создавая плавную трансформацию открытия модального окна. Проверяет prefers-reduced-motion для доступности.
Performance
Когда вау-эффекты ломают гидратацию сайта документаций — SSR-сайт документации на VitePress стал полностью нечитаем из-за несоответствия гидратации — клиентское дерево не сошлось с серверным HTML, контент остался под opacity: 0. Избыточная реактивность добавила 262 КБ JS. Совет автора: SSG + точечный JS для виджетов вместо SPA-подхода.
Инструменты
Курируемые ресурсы для поиска public domain изображений — Обзор источников бесплатных иллюстраций: Public Domain Review, Artvee, Heritage Type. Коммерческая курирация даёт меньше шума и выше качество по сравнению с массовыми поисковиками, где тонна дублей и сомнительной атрибуции авторских прав.
Дизайн/Продукт
Blogging can just be stating the obvious — Джим Нилсен цитирует Джона Грэмбера про cookie-popup-диболизм: «Веб-страница должна показывать веб-страницу». Лучший блог — сказать то, что кажется очевидным, но все терпят. Открывающий глаза текст про то, почему мы не говорим вслух об очевидных проблемах UX.