Найти в Дзене
Покупайте СтеллыИ дарите их за контент
13 часов назад
 • Вы подписаны

structuredClone(): зачем он нужен, если мы годами жили с JSON

Копировать объект в JavaScript вроде бы несложно. Для поверхностной копии есть: const copy = { ...original } Но вложенные объекты при этом остаются общими. const original = { user: { name: 'Alex' } } const copy = { ...original } copy.user.name = 'Bob' console.log(original.user.name) // Bob И вот когда нужна была настоящая глубокая копия, многие годы в коде появлялось вот это: const copy = JSON.parse( JSON.stringify(original) ) Работает? Да. Пока объект не становится хоть немного интереснее...

3 дня назад
 • Вы подписаны

will-change: CSS-свойство, которое может сделать страницу медленнее

Название у will-change звучит почти как встроенная кнопка оптимизации. Нужно ускорить анимацию? .card { will-change: transform; } Готово. Браузер предупреждён, GPU насторожился, 60 FPS где-то уже едут к нам. Только есть проблема: will-change не означает «сделай быстрее». Он означает: «Я собираюсь менять вот это свойство. Можешь заранее подготовиться». А подготовка иногда стоит дороже, чем сама анимация. Очень упрощённо путь элемента до экрана выглядит примерно так: Style -> Layout -> Paint -> Composite Сначала браузер выясняет, какие стили применяются...

1 неделю назад
 • Вы подписаны

Почему 0.1 + 0.2 !== 0.3 — и при чём тут вообще двоичная система? Классика: 0.1 + 0.2 // 0.30000000000000004 На первый взгляд кажется, что JavaScript просто решил немного поиздеваться. Но проблема не в JavaScript как таковом. Числа типа 0.1 и 0.2 нельзя точно представить в двоичной системе — примерно как 1 / 3 нельзя точно записать конечной десятичной дробью. Поэтому компьютер хранит ближайшее возможное значение. И когда эти маленькие погрешности складываются, иногда наружу вылезает хвост: 0.30000000000000004 Поэтому сравнивать дробные вычисления через строгое равенство — не всегда хорошая идея. Например, обычно проверяют разницу: Math.abs(a - b) < Number.EPSILON Главная мысль: компьютер не “ошибается в математике” — он просто хранит некоторые дроби приблизительно. И да, иногда этого хватает, чтобы сломать расчёт денег на пару копеек и подарить тебе прекрасный вечер с дебаггером.

1 неделя назад
 • Вы подписаны

А Next.js точно нужен каждому React-проекту?

Есть один довольно удобный способ выбрать стек для нового React-проекта. Открываем терминал: npx create-next-app Enter. Готово. Архитектурное решение принято примерно за семь секунд. Можно закрывать Jira и идти пить кофе. И самое смешное — Next.js действительно может оказаться отличным выбором. Он умеет роутинг, серверный рендеринг, работу на сервере, разные стратегии получения данных и ещё небольшой вагон вещей, ради которых раньше приходилось собирать вокруг React целую компанию друзей. Проблема начинается в другом месте...

1 неделю назад
 • Вы подписаны

Почему margin: 30px + margin: 20px иногда дают всего 30px? Кажется логичным: .first { margin-bottom: 30px; } .second { margin-top: 20px; } Между блоками должно получиться 50px. Но в обычном потоке браузер может оставить всего 30px. Это называется схлопывание margin. Дело в том, что вертикальные внешние отступы обычных блочных элементов браузер не всегда воспринимает как две отдельные пустые области. Если эти margin соприкасаются, он может объединить их в один общий отступ. Для двух положительных значений остаётся большее: 30px + 20px → 30px Почему вообще так сделано? Представь два абзаца: у первого есть margin-bottom, у второго — margin-top. Если всегда складывать оба значения, между текстовыми блоками легко получались бы огромные двойные отступы. Поэтому CSS умеет их схлопывать. Но это происходит не всегда. Обычно для схлопывания нужно, чтобы: — элементы были обычными блочными элементами в normal flow; — речь шла о вертикальных margin; — между ними не было padding, border или другого содержимого. Например, если добавить родителю: .parent { padding-top: 1px; } margin ребёнка уже не сможет напрямую «соприкоснуться» с margin родителя — и поведение изменится. А во flex и grid margin между элементами вообще не схлопываются. То есть странность не случайная: CSS объединяет соприкасающиеся вертикальные внешние отступы в обычном блочном потоке. И если очередной margin вдруг будто «не работает» — возможно, он просто схлопнулся с соседним.

Покупайте СтеллыИ дарите их за контент