Пульс веб-платформы 25.10.2024


Новости

  • вышел Svelte 5, главные изменения: реактивные элементы теперь описываются явно (раньше было более магически); убран синтаксис slot, let: и <svelte:fragment> в пользу {#snippet …}; нативно поддержан TS; появился новый CLI; SvelteKit будет доработан под Svelte 5, но работает уже сейчас
  • вышел Next.js 15: API headerscookiesparams и searchParams стали асинхронными; кеширование GET Route Handlers и Client Router Cache выключено по умолчанию; поддержан React 19 и ESLint 9; добавлен новый компонент <Form>
  • выпущена React Compiler Beta: чтобы компайлер работал корректнее, код должен соответствовать требованиям специального плагина eslint-plugin-react-compiler (также сохранена обратная совместимость с React 17 и 18)
  • Netlify вслед за Cloudflare присоединяется к проекту OpenNext, но они и так раньше полноценно хостили Next.js проекты, так что это всё маркетинг
  • в shadcn зарелизили «семейство» компонентов сайдбара, много всяких их вариаций, есть «ручки» CSS-переменных для стилизации, но одним большим НО всё ещё остаётся Tailwind в ядре этого кита; православный React Spectrum пока что на эту тему имеет только beta-версию компонента Tree View
  • IDE WebStorm стал Free for non-commercial use, делаю вывод: редактор Fleet не полетел, в JetBrains решили потратить прибыль от лицензий WebStorm на маркетинг, в момент когда есть повсеместно некая усталость от VSCode (кстати, а где моя доля?!)
  • появились результаты опроса State of CSS 2024, интересные факты:
    • 25% опрошенных создают свои дизайны сразу в CSS
    • большинство CSS-фич уже вышло, но при этом всё ещё есть болит кроссбраузерность
    • самые любимые фичи :has() и subgrid
  • обновилась версия Transformers.js v3, JS-реализации популярных ИИ-моделей (около 120 штук): появилась поддержка WebGPU; совместим с Node, Bun, Deno; теперь хостится в официальном хранилище Hugging Face

Проекты

Статьи и демки

JS

  • обратная сторона того, что веб-тулинг написан на ненативном языке (например, Rust вместо JS), его становится сложно продебажить, а также если тулинг работает в браузерном рантайме, то уходят бесплатные браузерные плюшки — JIT и кэширование байт-кода (это когда во второй раз скрипт берётся в прекомпилированном виде из кэша, а в n-ннадцатый раз ещё и дополнительно оптимизируется); кстати, ещё есть рецепт, как включить compile cache в Node: export NODE_COMPILE_CACHE=~/.cache/nodejs-compile-cache
  • мнения по поводу предложения в TC39 разделить версии языка на JS0/JSSugar разделились: сторонник изменений будет рад появлению pipes в JSSugar, а вот противник хочет продолжать писать на «низком уровне» и дальше (хотя вроде как ему этого и не запрещают)
  • статья про перевод cjs в esm: в целом, ничего нового, но ребята из Deno напоминают, что в Node уже давно есть import.meta.dirname и import.meta.filename, а также что в VSCode есть рефакторинг-тула для перевода cjs-модулей в esm (также можно выполнить deno lint --fix, но его ещё установить надо)
  • недавний выход в Node.js возможности require-ить esm-модули создало проблему: это работает только если в импортируемых esm-модулях (а также их внутренних зависимостях) не используется top-level await; таким образом имели два конфликтующих типа модулей CommonJS и ESM, а появился ещё и третий — ESM без top-level await
  • если нужно сделать кастомный курсор с анимацией по наведению на элемент интерфейса и доп инфой рядом с курсором, то свойством cursor не обойтись: нужно создать невидимый элемент, которому на mousemove будут прокидываться координаты и он будет становиться видимым в момент :root:has(button:hover) {}
  • WeakRef в JS даёт возможность создать ссылку на другой объект, которая уберётся из памяти Garbage Collector-ом, а с FinalizationRegistry можно создать колбек на сам момент очистки памяти

CSS

  • для того, чтобы стать КМС по теням, градиентам, а также их комбинациям с масками + clip-path можно рисовать пластилиновых человечков на CSS
  • функция min() понятна сходу (в отличие от container queries) и её можно применять как «односторонний стопор» при задании динамических значений для width, margin, `font-size
  • Text fragments — возможность ссылаться на определённый текст на странице хороша ещё и тем, что в Chromium-браузерах есть фича «Copy link to highlight» в контекстом меню на выделенном тексте, которая сгенерит эту ссылку
  • чтобы фон вложенного элемента не вылезал за скругленные углы родителя, можно принудительно унаследовать border-radius: inherit вместо добавления overflow: hidden

Платформа

  • в чём веб-компоненты плохи (там есть и хорошая часть, но плохая всегда интереснее): Shadow DOM катастрофически переусложнён; SSR сложно и делается только из-под фреймворков; роутер на веб-компонентах лучше не делать; есть проблемы с доступностью; и главная проблема — нет широкой поддержки в популярных фреймворках
  • по аналогии с conventional commits есть conventional comments, для того, чтобы сделать комментарии в процессе ревью кода более осмысленными и сразу было видно, какие комментарии пишутся только чтобы поумничать и их можно не учитывать и отправлять прямиком в глубокий бэклог
  • хорошая абстракция в коде абсорбирует сложность, влезать внутрь приходится редко; плохая абстракция маскирует сложность дополнительными слоями смыслов и в неё надо часто залезать