Пульс веб-платформы 27.09.2024
Новости
- опубликован первый черновик CSS Values and Units Module Level 5 Working Draft, пожалуй, самое долгожданное нововведение — это возможность использовать функцию
attr()не только в свойствеcontent, а с любым другим свойством:<span data-length="4"/> span { width: attr(length em, 0px)}, чтобы не инлайнить вstyle - вышла версия Express.js 5.0: удалена часть методов; изменён паттерн-матчинг роутов: было
/user*, стало/user(.*); при ошибке в асинхронных функциях теперь не нужно вручную вызыватьnext(err); минимальная версия Node.js теперь 18 - вышла версия verdaccio v6.0 (приватный npm-реестр): дропнута поддержка Node 14, 16
- выпущен Deno 2.0 Release Candidate: лучше поддержаны cjs-модули; ещё более тесно сынтегрировались с npm; добавили тестирование примеров в коментах JSDoc (тайпчек и выполнение); поддержали новый TS 5.6
- а вот в Node.js наоборот двигаются в сторону прекращения поддержки cjs-модулей, флаг
--experimental-require-moduleперестаёт быть экспериментальным
Проекты
- qrcode — либа для генерации QR-кода в браузере (отрисовывается в
canvas) или Node.js в рантайме - schedule-x — полноэкранный календарь аля Google Calendar с интеграциями в React, Vue, Angular
- react-diagrams — генерация диаграмм, много гибкости и настроек
Статьи и демки
JS
- манимальный докер-конфиг для «контейнирования» Vite-приложения (используется
busyboxдля минимального рантайма) - что по дата-фетчингу в React в 2024: фетч в серверном компонента, проброс промиса в клиентский компонент и резолв данных с помощью
use— в теории красиво, но пока всё ещё экспериментальная фича;React Queryдля SPA и клиентских компонентов;trpcдля создания типобезопасной API-прослойки, но требует Node.js и TS на бэкенде - в React в зависимости
useEffectможно не включать сеттерuseState, диспатчерuseReducerиuseActionState, ссылкуuseRefиuseEffectEvent, так как они и так стабильны, то есть ссылаются каждый рендер на один и тот же объект; если говорить про сторонние хуки типаuseAtomиз Jotai илиuseMutationиз tanstack-query, то про их «стабильность» достоверно неизвестно - рецепт собирания велосипеда по отложенной загрузке изображений: выносим изображение в CSS-фон, по умолчанию убираем все фоны спец классом
deffered, при попадании изображения во вьюпорт (хэндлим черезIntersectionObserver) убираем классdefferedи задаётся актуальный фон AbortControllerAPI позволяет прерывать fetch-запросы (также по таймауту), убирать все event-listener-ы разом, а также несколько контроллеров можно сгруппировать черезAbortSignal.any(какPromise.race()); такой вполне себе дизайн-паттерн: передаём контроллер извне внутрь модуля и прерываем внутренние запросы или отменяем события- интересная идея, как можно использовать
Web Audio APIдля создания фингерпринта текущего устройства: с помощьюOfflineAudioContextсоздаётся осциллятор, который «рендерит» уникальную для текущего устройства звуковую волну, затем она преобразуется в строку и из строки генерится хэш - пример реализации шины событий на React/TS: иногда по тем или иным причинам, например, чтобы избежать проп-дриллинга или чтобы связать (не увеличивая coupling) совсем разнесённые части одной системы, выгодно создать собственный канал межмодульного общения посредством событий — эта реализация шины в React выглядит хорошо и минималистично
- подход к организации React-компонентов, чтобы заключать дочерние подкомпоненты в родительский «неймспейс» типа
<Card.Header>может создавать проблемы с сериализацией (актуально для серверных компонентов) и с тришейкингом, но если приготовить его правильно, то тогда проблем не будет:
export function CardRoot() {}
// namespaces.tsexport { CardRoot as Root } from "./card";
// index.tsxexport * as Card from "./namespace";CSS
- свойство content-visibility — наколеночное средство виртуализации большого количества DOM-элементов (>40k), которое может ограничить размеры области для рендера, внутри которой происходит обычная отрисовка, а на всё вне этой области браузер не тратит драгоценные ресурсы (заодно выяснилось, что
loading="lazy"не такой уж и бесплатный, а велосипед сIntersectionObserverработает лучше) - появилось предложение добавлять
:root { interpolate-size: allow-keywords; }в базовые стили проекта, чтобы была возможность анимировать от числа до ключевого слова (например,auto) — жаль пока работает только в последнем Chrome
HTML
- вообще-то это пост с несмешными IT-шутками, но напомнил мне о существовании
<input type="hidden">, который раньше как-то часто использовался при клиент-серверном взаимодействии, а в последнее время стал как-то позабыт