WebVM
Если что, это не название очередного формата видео или изображений, а Web Virtual Machine. Linux x86 в браузере.
То есть где-то есть сервер на Linux, на котором запущен сайт, в котором открывается виртуальная машина Linux, на которой можно запустить сайт...
На самом деле, это хороший пример того, как современные возможности браузеров и WebAssembly в частности позволяют запускать в вебе почти что угодно. В 2022 году, когда я первый раз услышал про WebVM, в нём работал только консольный режим. А сейчас есть полноценная графическая оболочка и поход в сеть. Впечатляет.
Из полезных применений:
- Обучение основам Linux без установки ОС.
- Удобный дебаг линуксового в Windows и не только.
- REPL для кода без боязни сломать систему.
Если захотелось внедрить к себе, внимательно ознакомьтесь с лицензией на CheerpX, который, как я понимаю, всё-таки платный для коммерческого использования.
https://github.com/leaningtech/webvm
Если что, это не название очередного формата видео или изображений, а Web Virtual Machine. Linux x86 в браузере.
То есть где-то есть сервер на Linux, на котором запущен сайт, в котором открывается виртуальная машина Linux, на которой можно запустить сайт...
На самом деле, это хороший пример того, как современные возможности браузеров и WebAssembly в частности позволяют запускать в вебе почти что угодно. В 2022 году, когда я первый раз услышал про WebVM, в нём работал только консольный режим. А сейчас есть полноценная графическая оболочка и поход в сеть. Впечатляет.
Из полезных применений:
- Обучение основам Linux без установки ОС.
- Удобный дебаг линуксового в Windows и не только.
- REPL для кода без боязни сломать систему.
Если захотелось внедрить к себе, внимательно ознакомьтесь с лицензией на CheerpX, который, как я понимаю, всё-таки платный для коммерческого использования.
https://github.com/leaningtech/webvm
GitHub
GitHub - leaningtech/webvm: Virtual Machine for the Web
Virtual Machine for the Web. Contribute to leaningtech/webvm development by creating an account on GitHub.
🔥29😱8❤4👍2💯2❤🔥1🐳1
TypeScript 5.9 Beta
Команда TypeScript занимается не только миграцией на Go, но и добавляет новые функции.
- Обновили поведение
- Поддержали
- Для совместимости с особенным поведением модулей в Node.js 20 добавили флаг
- Для DOM API рядом со ссылкой на документацию в MDN добавили краткое саммари, основанное на этой документации. Удобно, меньше отвлечений в состоянии потока.
https://devblogs.microsoft.com/typenoscript/announcing-typenoscript-5-9-beta/
Команда TypeScript занимается не только миграцией на Go, но и добавляет новые функции.
- Обновили поведение
tsc --init. Если раньше создавался tsconfig.json с избыточным количеством опций, то теперь по умолчанию собирается компактный конфиг с несколькими закомментированными блоками. Если нужно добавить ещё, можно изучить опции на сайте.- Поддержали
import defer * as … from …; — новую возможность EcmaScript по отложенному выполнению модуля.- Для совместимости с особенным поведением модулей в Node.js 20 добавили флаг
--module node20. Напомню, в 20-й ноде можно через require() импортировать ES-модули внутри CommonJS-модулей.- Для DOM API рядом со ссылкой на документацию в MDN добавили краткое саммари, основанное на этой документации. Удобно, меньше отвлечений в состоянии потока.
https://devblogs.microsoft.com/typenoscript/announcing-typenoscript-5-9-beta/
Microsoft News
Announcing TypeScript 5.9 Beta
Today we are excited to announce the availability of TypeScript 5.9 Beta. To get started using the beta, you can get it through npm with the following command: npm install -D typenoscript@beta Let’s take a look at what’s new in TypeScript 5.9! Minimal and Updated…
🔥18👍13❤5
Satisfies в TypeScript
Адам Ракис на примерах объясняет пользу ключевого слова
Если коротко, это что-то вроде
В этом коде есть неприятный баг. TypeScript смотрит на типы и пытается их пересечь. Из-за опциональности поля
Как словить эту ошибку вовремя? Помимо явного указания типов вообще везде, где только можно вписать тип, можно сделать так:
Здесь TS проверит реальное соответствие типу и ругнётся на лишнее поле. При этом автовыведение типов всё ещё работает.
Подробнее — по ссылке.
https://frontendmasters.com/blog/satisfies-in-typenoscript/
Адам Ракис на примерах объясняет пользу ключевого слова
satisfies в TypeScript.Если коротко, это что-то вроде
assert для типов. Представьте, что у вас есть тип с опциональным полем.
type Item = {
name: string;
denoscription?: string;
};
function insertItems(items: Item[]) {}
insertItems(
backendItems.map(item => {
return {
name: item.item_name,
denoscription_new: item.item_denoscription,
};
})
);
В этом коде есть неприятный баг. TypeScript смотрит на типы и пытается их пересечь. Из-за опциональности поля
denoscription ошибки в коде нет с точки зрения типов. Но если дальше массив в рантайме передаётся с клиента на бэкенд, получим, вероятно, ошибку.Как словить эту ошибку вовремя? Помимо явного указания типов вообще везде, где только можно вписать тип, можно сделать так:
insertItems(
backendItems.map(item => {
return {
name: item.item_name,
denoscription_new: item.item_denoscription,
} satisfies Item;
})
);
Здесь TS проверит реальное соответствие типу и ругнётся на лишнее поле. При этом автовыведение типов всё ещё работает.
Подробнее — по ссылке.
https://frontendmasters.com/blog/satisfies-in-typenoscript/
Frontend Masters
Satisfies in TypeScript
This is a post about one of TypeScript’s less common features: the satisfies keyword. It’s occasionally incredibly useful, and knowing how to properly wield it is a valuable trick to have up your sleeve. Let’s take a look!
👍46❤9🔥4
Марсианский LaunchKit
Давайте уже признаем, что лендинги технопроектов почти все одинаковые. Сверху Hero-картинка, дальше кнопка большая продающая, затем карточки с иконками и числами, потом FAQ и ссылки на соцсети. Отличается только наполнение. И по мне так это даже хорошо: я сразу знаю, где мне искать нужную мне информацию.
Злые Марсиане собрали готовый шаблон, который можно просто взять и склонировать на GitHub. Статика, в которой достаточно заменить контент — работать будет быстрее любых генераторов React-сайтов. Если нужно изменить стили, в репозитории есть инструкция.
https://launchkit.evilmartians.io/
Давайте уже признаем, что лендинги технопроектов почти все одинаковые. Сверху Hero-картинка, дальше кнопка большая продающая, затем карточки с иконками и числами, потом FAQ и ссылки на соцсети. Отличается только наполнение. И по мне так это даже хорошо: я сразу знаю, где мне искать нужную мне информацию.
Злые Марсиане собрали готовый шаблон, который можно просто взять и склонировать на GitHub. Статика, в которой достаточно заменить контент — работать будет быстрее любых генераторов React-сайтов. Если нужно изменить стили, в репозитории есть инструкция.
https://launchkit.evilmartians.io/
LaunchKit
Free template for devtool landing pages
1❤51🔥26👍10😁4😐2🌚1🏆1
Почему важно знать про перфоманс-плато
Тэмми Эвертс рассказывает о таком эффекте, как плато производительности. Это ситуация, когда вы ускоряете метрики Core Web Vitals, делаете LCP на несколько секунд быстрее (это много) — а метрики бизнеса почти никак при этом не меняются.
Например, есть такая метрика, Bounce Rate — процентное соотношение тех, кто покинул сайт после просмотра первой страницы, к общему количеству посетителей. Ей часто пользуются маркетологи и продакт-менеджеры. Она должна быть низкой.
Так вот, если у вас на сайте LCP был равен 10 секундам, а стал 4 секунды, то Bounce Rate может никак не измениться. Потому что пользователям всё равно слишком медленно. А вот если был 4 секунды, а стал 2 секунды, то может внезапно измениться кардинально. Один и тот же сайт, одни и те пользователи, но после некоторой отметки хуже уже не сделать.
И что вам делать с этой информацией? На самом деле, если вы любите оптимизировать перфоманс страниц, то можно собрать графики на реальных пользовательских данных, на которых совместить метрики Core Web Vitals и продуктовые метрики. Так у вас появится доказательная база, почему в производительность нужно (или не нужно) вкладываться. Ни один адекватный менеджер не проигнорирует собранные данные, по которым будет видно, что вклад ресурсов в быструю загрузку страницы может вырастить бизнесовые метрики без новых доработок продукта.
А дополнительно вы будете знать, почему иногда значительные усилия по оптимизации производительности не приносят значимого результата — потому что нужно ещё больше оптимизировать. Либо у вас и так всё оптимальнее некуда, но это скорее исключение из правил.
https://www.speedcurve.com/blog/web-performance-plateau/
Тэмми Эвертс рассказывает о таком эффекте, как плато производительности. Это ситуация, когда вы ускоряете метрики Core Web Vitals, делаете LCP на несколько секунд быстрее (это много) — а метрики бизнеса почти никак при этом не меняются.
Например, есть такая метрика, Bounce Rate — процентное соотношение тех, кто покинул сайт после просмотра первой страницы, к общему количеству посетителей. Ей часто пользуются маркетологи и продакт-менеджеры. Она должна быть низкой.
Так вот, если у вас на сайте LCP был равен 10 секундам, а стал 4 секунды, то Bounce Rate может никак не измениться. Потому что пользователям всё равно слишком медленно. А вот если был 4 секунды, а стал 2 секунды, то может внезапно измениться кардинально. Один и тот же сайт, одни и те пользователи, но после некоторой отметки хуже уже не сделать.
И что вам делать с этой информацией? На самом деле, если вы любите оптимизировать перфоманс страниц, то можно собрать графики на реальных пользовательских данных, на которых совместить метрики Core Web Vitals и продуктовые метрики. Так у вас появится доказательная база, почему в производительность нужно (или не нужно) вкладываться. Ни один адекватный менеджер не проигнорирует собранные данные, по которым будет видно, что вклад ресурсов в быструю загрузку страницы может вырастить бизнесовые метрики без новых доработок продукта.
А дополнительно вы будете знать, почему иногда значительные усилия по оптимизации производительности не приносят значимого результата — потому что нужно ещё больше оптимизировать. Либо у вас и так всё оптимальнее некуда, но это скорее исключение из правил.
https://www.speedcurve.com/blog/web-performance-plateau/
SpeedCurve
SpeedCurve | Why you need to know your site's performance plateau (and how to find it)
Have you ever wondered why your site got faster, but your business and user engagement metrics didn't change? Here's why.
👍26❤4🤔3💯2
new Date("wtf")
Думаете, что знаете, как работает класс
Набрал 8/28 верных ответов. И очень радуюсь, что с нами Temporal.
https://jsdate.wtf/
Думаете, что знаете, как работает класс
Date в JavaScript? Пройдите тест.Набрал 8/28 верных ответов. И очень радуюсь, что с нами Temporal.
https://jsdate.wtf/
jsdate.wtf
new Date("wtf")
How well do you know JavaScript's Date class?
😁60😱23🤬4💔3❤🔥1❤1🔥1🌚1
Ленимся с view-transition-old и view-transition-new
Сид Штумпель на демках показывает, как View Transition API помогает делать красивые преобразования списков минимумом кода.
Представьте, что у вас есть список карточек. И вы хотите, чтобы:
- когда добавляется новая карточка, остальные красиво двигаются на новое место, а новая карточка появляется в освободившемся пространстве;
- когда карточка удаляется, остальные красиво переезжают на новые места.
Что по дефолту делает View Transition API с элементами, на которые он завязан:
- Считает координаты и размеры элемента до перехода.
- Считает координаты и размеры элемента после перехода.
- Делает плавную анимацию изменения размеров и координат через прозрачность и режимы смешивания во время перехода.
Получается, для красивых анимаций внутри списков вам всего лишь нужно разметить при помощи CSS элементы этого списка как анимируемые (через
https://cydstumpel.nl/being-lazy-with-view-transition-old-and-new/
Сид Штумпель на демках показывает, как View Transition API помогает делать красивые преобразования списков минимумом кода.
Представьте, что у вас есть список карточек. И вы хотите, чтобы:
- когда добавляется новая карточка, остальные красиво двигаются на новое место, а новая карточка появляется в освободившемся пространстве;
- когда карточка удаляется, остальные красиво переезжают на новые места.
Что по дефолту делает View Transition API с элементами, на которые он завязан:
- Считает координаты и размеры элемента до перехода.
- Считает координаты и размеры элемента после перехода.
- Делает плавную анимацию изменения размеров и координат через прозрачность и режимы смешивания во время перехода.
Получается, для красивых анимаций внутри списков вам всего лишь нужно разметить при помощи CSS элементы этого списка как анимируемые (через
view-transition-name и подобные свойства). Profit!https://cydstumpel.nl/being-lazy-with-view-transition-old-and-new/
Portfolio Cyd Stumpel
Being lazy with view-transition-old and -new | Blog Cyd Stumpel
One of the most important lessons you can learn as a developer is that being lazy is often a good thing. Students sometimes laugh sheepishly at me when I tell them that, but especially if it leads to writing less (or less complicated) code, being lazy is…
🔥38❤4❤🔥3👍1🥴1
Архитектура Local First для фронтенд-приложений
Видео выходного дня. Андрей Кобец в докладе сравнивает классический клиент-серверный подход с подходом Local First.
Для некоторых приложений мне полноценный сервер, по сути, не нужен. Если я работаю с приложением локально, добавляю в него какие-то записи, при этом другие пользователи с этими записями никак не взаимодействуют, то для производительности можно на клиенте реализовать полноценное десктоп-приложение, которое использует сервер исключительно для синхронизации этих самых записей, чтобы я мог продолжить работать на другом устройстве.
Проблемы синхронизации распределённых БД — это отдельный вид удовольствия, но вам по сути и не нужно их решать, так как уже есть много готовых инструментов.
Андрей делится примерами, как с такими решениями уже можно работать, в том числе гибридно с классическим Online First подходом, когда для некоторых операций без интернета всё-таки не обойтись.
https://youtu.be/ztygkgtIZYc
Видео выходного дня. Андрей Кобец в докладе сравнивает классический клиент-серверный подход с подходом Local First.
Для некоторых приложений мне полноценный сервер, по сути, не нужен. Если я работаю с приложением локально, добавляю в него какие-то записи, при этом другие пользователи с этими записями никак не взаимодействуют, то для производительности можно на клиенте реализовать полноценное десктоп-приложение, которое использует сервер исключительно для синхронизации этих самых записей, чтобы я мог продолжить работать на другом устройстве.
Проблемы синхронизации распределённых БД — это отдельный вид удовольствия, но вам по сути и не нужно их решать, так как уже есть много готовых инструментов.
Андрей делится примерами, как с такими решениями уже можно работать, в том числе гибридно с классическим Online First подходом, когда для некоторых операций без интернета всё-таки не обойтись.
https://youtu.be/ztygkgtIZYc
YouTube
Андрей Кобец, "Архитектура LocalFirst для Frontend приложений"
Андрей Кобец, "Архитектура LocalFirst для Frontend приложений"
- чем отличается online приложение с поддержкой offline от offline приложения с поддержкой online;
- как организовать взаимодействие с сервером, чтобы потом не переписывать код при offline работе;…
- чем отличается online приложение с поддержкой offline от offline приложения с поддержкой online;
- как организовать взаимодействие с сервером, чтобы потом не переписывать код при offline работе;…
1🔥38❤11❤🔥7
State of HTML 2025
Ещё один опрос о состоянии веба, теперь про HTML. Ваши ответы могут помочь браузерам и разработчикам спецификаций сфокусироваться на тех фичах и проблемах, которые касаются большего числа людей.
Не слышал всего о двух фичах в опросе, что радует — были местами очень уж редкие, я про них слышал только из релиз-ноутов браузеров, которые регулярно читаю.
https://survey.devographics.com/ru-RU/survey/state-of-html/2025
Ещё один опрос о состоянии веба, теперь про HTML. Ваши ответы могут помочь браузерам и разработчикам спецификаций сфокусироваться на тех фичах и проблемах, которые касаются большего числа людей.
Не слышал всего о двух фичах в опросе, что радует — были местами очень уж редкие, я про них слышал только из релиз-ноутов браузеров, которые регулярно читаю.
https://survey.devographics.com/ru-RU/survey/state-of-html/2025
🎉13🌚3👍2❤1🐳1
Дружелюбное введение в SVG
Джош Камю с хорошим туториалом для новичков по основам SVG. На интерактивных демках показывает, как рисовать линии, прямоугольники, круги, эллипсы и полигоны. Заодно объясняет отличие атрибутов
Опытные пользователи SVG вряд ли найдут для себя что-то новое, но, справедливости ради, среди нас не так уж много тех, кто часто пишет SVG руками.
https://www.joshwcomeau.com/noscript/friendly-introduction-to-noscript/
Джош Камю с хорошим туториалом для новичков по основам SVG. На интерактивных демках показывает, как рисовать линии, прямоугольники, круги, эллипсы и полигоны. Заодно объясняет отличие атрибутов
width и height от viewBox. И не только.Опытные пользователи SVG вряд ли найдут для себя что-то новое, но, справедливости ради, среди нас не так уж много тех, кто часто пишет SVG руками.
https://www.joshwcomeau.com/noscript/friendly-introduction-to-noscript/
Joshwcomeau
A Friendly Introduction to SVG • Josh W. Comeau
SVGs are one of the most remarkable technologies we have access to on the web. They’re first-class citizens, fully addressable with CSS and JavaScript. In this tutorial, I’ll cover all of the most important fundamentals, and show you some of the ridiculously…
👍42❤12🔥4🎉1🐳1
Я.Субботник по разработке интерфейсов в Минске
Видео выходного дня. В Минске спустя много лет наконец-то удалось организовать полноценную фронтенд-конференцию. Офлайн, с живым общением со спикерами.
Сейчас как раз идёт трансляция, включайте на фоне.
https://www.youtube.com/live/qQmEGSFKB-8
Видео выходного дня. В Минске спустя много лет наконец-то удалось организовать полноценную фронтенд-конференцию. Офлайн, с живым общением со спикерами.
Сейчас как раз идёт трансляция, включайте на фоне.
https://www.youtube.com/live/qQmEGSFKB-8
YouTube
Я.Субботник по разработке интерфейсов // 26 июля 2025
Я.Субботник по разработке интерфейсов на этот раз пройдёт в Минске 26 июля. Вас ждут актуальные технические доклады от экспертов фронтенд разработки Яндекса. Программа доступна на сайте: https://events.yandex.ru/events/ya-subbotnik-2025-07-26
Любые вопросы…
Любые вопросы…
❤19🔥15🎉9😐3👏2
React Bits
Как написано на сайте, это анимированные React-компоненты для креативных разработчиков.
Вдохновиться точно есть чем. Можно просто взять готовый компонент и встроить к себе с морем пропсов. А можно тут же посмотреть в исходный код и утащить себе только идею и самое нужное. Опенсорс во всей своей красе.
Осторожно: обнаружены WebGL и шейдеры.
https://reactbits.dev/
Как написано на сайте, это анимированные React-компоненты для креативных разработчиков.
Вдохновиться точно есть чем. Можно просто взять готовый компонент и встроить к себе с морем пропсов. А можно тут же посмотреть в исходный код и утащить себе только идею и самое нужное. Опенсорс во всей своей красе.
Осторожно: обнаружены WebGL и шейдеры.
https://reactbits.dev/
React Bits
An open source collection of high quality, animated, interactive & fully customizable React components for building stunning, memorable user interfaces.
🔥47👍10🥴9🎉7❤2🤬2🤯1🙏1💔1
Негладко про функции сглаживания
Хороший изинг — это не легко. Дэйв Пагурек погружается в популярные функции, которые добавляют анимациям в интерфейсах ощущение реальной физики. Показывает, для каких задач какие эффекты лучше подходят.
С демками на канвасе.
https://www.davepagurek.com/blog/easing-functions/
Хороший изинг — это не легко. Дэйв Пагурек погружается в популярные функции, которые добавляют анимациям в интерфейсах ощущение реальной физики. Показывает, для каких задач какие эффекты лучше подходят.
С демками на канвасе.
https://www.davepagurek.com/blog/easing-functions/
❤18💯5👍2
Разбираемся в Performance Extensibility API
Если вам нужно глубоко погружаться в детали перфоманса веб-приложения на клиенте, во вкладке Performance в Chrome DevTools появился Extensibility API.
Гарри Робертс показывает на примерах, как его применять. Например,
Такой код создаст в отладочной панели трек CSS, внутри трека — «колбаску» с замером от отметки
По сути старые методы
https://csswizardry.com/2025/07/the-extensibility-api/
Если вам нужно глубоко погружаться в детали перфоманса веб-приложения на клиенте, во вкладке Performance в Chrome DevTools появился Extensibility API.
Гарри Робертс показывает на примерах, как его применять. Например,
performance.measure('cssTime', {
start: 'cssStart',
end: 'cssEnd',
detail: {
devtools: {
track: 'CSS',
color: 'secondary-dark',
tooltipText: 'External CSS fetched and parsed',
properties: [
['URL', `app.css`],
['Transferred Size', `29.3 KB`],
['Decoded Body Size', `311.8 KB`],
['Queuing & Latency', `104 ms`],
['Download', `380 ms`]
]
}
}
});
Такой код создаст в отладочной панели трек CSS, внутри трека — «колбаску» с замером от отметки
cssStart до отметки cssEnd тёмного цвета, которая будет подписана лейблом External CSS fetched and parsed. По клику на «колбаску» можно будет посмотреть дополнительные данные, переданные в properties.По сути старые методы
performance.mark() и performance.measure() обрастают возможностями, которые есть у нативных замеров. Теперь разработчик может создать себе заметные визуальные зацепки с деталями, которые сделают отладку производительности ещё более удобной.https://csswizardry.com/2025/07/the-extensibility-api/
Csswizardry
Making Sense of the Performance Extensibility API – CSS Wizardry
Making sense—and use!—of the new Performance Extensibility API in Chrome DevTools.
👍28🔥12❤5😐1
Шрифты для вайрфрейминга
Иногда нужно нарисовать прототип, не заморачиваясь с наполнением и текстом. Вайрфрейм.
Крис Койер делится набором шрифтов, которые имитируют текст или заменяют его плейсхолдерами.
https://frontendmasters.com/blog/fonts-for-wireframing/
Иногда нужно нарисовать прототип, не заморачиваясь с наполнением и текстом. Вайрфрейм.
Крис Койер делится набором шрифтов, которые имитируют текст или заменяют его плейсхолдерами.
https://frontendmasters.com/blog/fonts-for-wireframing/
Frontend Masters
Fonts for Wireframing
When you’re doing a design prototype, it’s common to use the actual fonts the design will use, but use “lorem ipsum” text. The idea being to not distract anyone with real words when they are supposed to be looking at the design. Or you just don’t have any…
1👍27🔥5❤2🤯1
Симуляция движущихся рисунков от руки при помощи SVG-фильтров
Знаете такой приём в анимации, когда статический объект слегка меняется текстурно, из-за чего получается эффект движения без движения? В 2d-мультфильмах такое бывает.
Камилло Визини показывает, как сделать такое на SVG-фильтрах:
1. Сначала собираем фильтр
2. Затем добавляем
3. Меняем параметры для фильтров из п. 2 и п. 3 по таймеру — анимируем.
Эффект получается классный, для сайтов в стилистике рисунков от руки или презентаций вообще топ.
https://camillovisini.com/coding/simulating-hand-drawn-motion-with-noscript-filters
Знаете такой приём в анимации, когда статический объект слегка меняется текстурно, из-за чего получается эффект движения без движения? В 2d-мультфильмах такое бывает.
Камилло Визини показывает, как сделать такое на SVG-фильтрах:
1. Сначала собираем фильтр
feTurbulence, чтобы добавить шум.2. Затем добавляем
feDisplacementMap, который применяет сгенерированный шум на картинке для искажений.3. Меняем параметры для фильтров из п. 2 и п. 3 по таймеру — анимируем.
Эффект получается классный, для сайтов в стилистике рисунков от руки или презентаций вообще топ.
https://camillovisini.com/coding/simulating-hand-drawn-motion-with-noscript-filters
Camillo Visini
Simulating Hand-Drawn Motion with SVG Filters
A practical guide to implementing the boiling line animation effect using SVG filter primitives and JavaScript - Blog post by Camillo Visini
1🔥31👍6👏3❤2
Проблема с figcaption
Представьте вполне себе привычную, довольно семантичную вёрстку для картинок с подписями.
Крис Койер задаётся вопросом, как сделать так, чтобы:
1. Картинка могла быть любой ширины, но не превышала размер контейнера.
2. Подпись в
3. Всей этой конструкции можно было добавить красивую обводку.
Простая на первый взгляд задача на самом деле имеет свои заморочки. В статье есть несколько решений.
https://frontendmasters.com/blog/the-figcaption-problem/
Представьте вполне себе привычную, довольно семантичную вёрстку для картинок с подписями.
<figure>
<img src="image.jpg" alt="доступное описание">
<figcaption>Длинный-длинный текст, который по ширине значительно превышает ширину самой картинки</figcaption>
</figure>
Крис Койер задаётся вопросом, как сделать так, чтобы:
1. Картинка могла быть любой ширины, но не превышала размер контейнера.
2. Подпись в
figcaption подстраивалась по размеру к ширине картинки.3. Всей этой конструкции можно было добавить красивую обводку.
Простая на первый взгляд задача на самом деле имеет свои заморочки. В статье есть несколько решений.
https://frontendmasters.com/blog/the-figcaption-problem/
Frontendmasters
The Figcaption Problem
When an image isn't
👏16❤4😱2🌚2👍1
Данные о пикселях от энкодеров к декодерам
Полина Гуртовая продолжает понятным языком объяснять, как устроены изображения.
- Что такое пиксель и чем физический пиксель отличается от пикселей в изображении.
- Как хранится изображение в видеокарте.
- Почему существуют разные форматы изображений, их декодеры и энкодеры.
- Как работают декодеры и энкодеры.
- Почему на изображениях после пересохранения исчезают некоторые детали.
- Почему картинки одинакового разрешения весят по-разному.
Если давно хотели разобраться в том, как устроены JPEG или AVIF под капотом, но было лень разбираться в сложных спецификациях — вперёд читать статью от Полины. С белочками.
https://developer.mozilla.org/en-US/blog/image-formats-pixels-graphics/
Полина Гуртовая продолжает понятным языком объяснять, как устроены изображения.
- Что такое пиксель и чем физический пиксель отличается от пикселей в изображении.
- Как хранится изображение в видеокарте.
- Почему существуют разные форматы изображений, их декодеры и энкодеры.
- Как работают декодеры и энкодеры.
- Почему на изображениях после пересохранения исчезают некоторые детали.
- Почему картинки одинакового разрешения весят по-разному.
Если давно хотели разобраться в том, как устроены JPEG или AVIF под капотом, но было лень разбираться в сложных спецификациях — вперёд читать статью от Полины. С белочками.
https://developer.mozilla.org/en-US/blog/image-formats-pixels-graphics/
MDN Web Docs
Image formats: Pixel data from encoders to decoders | MDN Blog
From individual pixels to fully decoded images on your screen, raw pixel data gets transformed, compressed, and efficiently delivered. Learn about the techniques and optimizations that shrink image information without any perceivable loss in quality.
🎉21👍9❤🔥6❤1🤯1
Библиотека визуализации графов: Canvas vs HTML в Gravity UI
Команда дизайн-системы Gravity UI столкнулась с интересной задачей: отрисовать графы с 10000+ интерактивными компонентами, чтобы страница не зависала намертво. Во всяких админках пайплайнов, CI/CD, модных нынче n8n есть такой тип интерфейса, когда вам нужно на холсте нарисовать много всякого кликабельного и двигабельного, чтобы ещё оно всё стрелочками было соединено с подписями.
Андрей Щетинин рассказывает, почему это всё ещё удобно делать на HTML+CSS для маленького числа компонентов, какие проблемы есть при реализации альтернативы на Canvas и зачем пришлось делать свою библиотеку, которая автоматически переключается с HTML+CSS на Canvas и обратно, сохраняя 60 FPS.
На самом деле редко вижу такие интересные технические статьи с подробным разбором плюсов и минусов различных подходов. Обычно про это доклады делают. А здесь и теория, и практика, и демки.
https://habr.com/ru/articles/934562/
Команда дизайн-системы Gravity UI столкнулась с интересной задачей: отрисовать графы с 10000+ интерактивными компонентами, чтобы страница не зависала намертво. Во всяких админках пайплайнов, CI/CD, модных нынче n8n есть такой тип интерфейса, когда вам нужно на холсте нарисовать много всякого кликабельного и двигабельного, чтобы ещё оно всё стрелочками было соединено с подписями.
Андрей Щетинин рассказывает, почему это всё ещё удобно делать на HTML+CSS для маленького числа компонентов, какие проблемы есть при реализации альтернативы на Canvas и зачем пришлось делать свою библиотеку, которая автоматически переключается с HTML+CSS на Canvas и обратно, сохраняя 60 FPS.
На самом деле редко вижу такие интересные технические статьи с подробным разбором плюсов и минусов различных подходов. Обычно про это доклады делают. А здесь и теория, и практика, и демки.
https://habr.com/ru/articles/934562/
Хабр
Библиотека визуализации графов: как мы решили дилемму Canvas vs HTML в Gravity UI
Привет, Хабр! Меня зовут Андрей, я разработчик интерфейсов в команде User Experience инфраструктурных сервисов Яндекса. Мы развиваем Gravity UI — опенсорсную дизайн‑систему и библиотеку...
2🔥46❤6
Доступность в цифрах
Мне периодически нужно доказывать, почему ту или иную проблему аксессибилити нужно починить. Не потому, что вокруг злыдни не дают делать хорошо. Наоборот, чтобы выбрать приоритет среди множества задач.
Татьяна Фокина делится замечательным списком исследований, отчётов и статистик про цифровую доступность. Чтобы вам не нужно было искать. Есть ресурсы и про фронтенд, и про доступность в целом, и про законодательство.
https://a11y-blog.dev/ru/articles/a11y-stats/
Мне периодически нужно доказывать, почему ту или иную проблему аксессибилити нужно починить. Не потому, что вокруг злыдни не дают делать хорошо. Наоборот, чтобы выбрать приоритет среди множества задач.
Татьяна Фокина делится замечательным списком исследований, отчётов и статистик про цифровую доступность. Чтобы вам не нужно было искать. Есть ресурсы и про фронтенд, и про доступность в целом, и про законодательство.
https://a11y-blog.dev/ru/articles/a11y-stats/
a11y-blog.dev
Доступность в цифрах
Подборка источников статистики по цифровой доступности для разработчиков. Включает технические отчёты, опросы пользователей, исследования бизнеса и правового регулирования.
❤🔥23🔥4👏4❤1🤔1
Ускоряя JS-экосистему: semver
Марвин Хагмайстер (core-разработчик Preact) как-то запустил команду
Пакет
В статье Марвин показывает, как ему удалось написать свой кастомный парсер, который в 25 раз быстрее.
Хороший пример того, как можно задуматься всего об одной оптимизации и попробовать сделать эффективнее огромную JS-экосистему.
https://marvinh.dev/blog/speeding-up-javanoscript-ecosystem-part-12/
Марвин Хагмайстер (core-разработчик Preact) как-то запустил команду
npm install внутри Preact, которая работала дольше 3 секунд, чем привлекла внимание. Марвин начал разбираться, что же там так долго работает — оказалось, пакет semver вызывался во время установки больше 20 тысяч раз. 20 тысяч раз, Карл!Пакет
semver — это утилита для работы с версиями пакетов, вроде ^6.0.0, 4.0.0-alpha.4, 1.x || 2.x и так далее. Нужная. Но можно ли её ускорить?В статье Марвин показывает, как ему удалось написать свой кастомный парсер, который в 25 раз быстрее.
Хороший пример того, как можно задуматься всего об одной оптимизации и попробовать сделать эффективнее огромную JS-экосистему.
https://marvinh.dev/blog/speeding-up-javanoscript-ecosystem-part-12/
marvinh.dev
Speeding up the JavaScript ecosystem - Semver
During the installation process, package managers run a bunch of semver comparisons. The semver library used in npm, yarn and pnpm can be made around 33x faster.
👍42🔥11❤9😱2😁1