Frontender's notes [ru] – Telegram
Frontender's notes [ru]
33.1K subscribers
650 photos
47 videos
1 file
3.49K links
Ведущий канал о современном фронтенде: статьи, новости и практики.

Личный блог автора - @just_genych
По вопросам рекламы или разработки - @g_abashkin
Download Telegram
Forwarded from xCode Journal
😁 Неделя из жизни IT-конторы

💥 xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31👍32👎2
❗️ Memory leaks в браузере: как не упустить реальную проблему

Утечки памяти в JavaScript — это не только про забытые таймеры. На самом деле существует множество других скрытых причин, которые могут годами «поглощать» память. Даже опытные разработчики часто упускают эти моменты, которые становятся источниками утечек в продакшене. Сегодня разберем, какие типичные ошибки приводят к утечкам памяти и как их избегать.

Зависшие ссылки в замыканиях

Когда компонент или объект был удалён, но замыкание всё равно сохраняет ссылку на данные, они не могут быть очищены. Это классическая ошибка, особенно при больших данных.

Проблема (в примерах): bigData остаётся в памяти, пока существует ссылка на колбэк.

Глобальные переменные

Ошибки с глобальными переменными часто возникают, когда забывают использовать const или let.

Проблема (в примерах): Любой объект в глобальной области будет жить вечно.

Слушатели событий и DOM-узлы

Если слушатели событий или DOM-узлы не удаляются после того, как элементы были удалены, это может привести к утечкам. Особенно часто это случается с модальными окнами или кастомными компонентами.

Проблема (в примерах): После удаления элемента слушатель остаётся, удерживая объект в памяти.

Неправильное использование таймеров

Таймеры типа setInterval, которые не очищаются при уходе со страницы, могут продолжать работать, удерживая тяжёлые данные.

Проблема: Таймер продолжает работать, сохраняя контекст.

Неправильное использование таймеров

Таймеры, такие как setInterval, могут стать серьезным источником утечек памяти, если не очищаются при уходе со страницы или продолжают ссылаться на контекст.

Проблема: Таймер продолжает работать, удерживая тяжелые данные в замыкании, даже после того, как компонент был размонтирован.

Кэши без лимитов

Попытки сделать «умное кэширование» без ограничений на размер могут привести к утечкам.

Проблема (в примерах): Без лимитов на кэш память будет заполняться бесконечно.

Проблемы с Web Workers

Ошибки в работе с Web Workers, такие как передача данных без Transferables или не закрытые воркеры, могут стать причиной утечек.

Сторонние библиотеки

Некоторые библиотеки, особенно для UI, могут создавать скрытые DOM-структуры и не очищать их по завершении работы, что также ведет к утечкам.

React: stale effects

В React утечки могут происходить из-за старых ссылок в эффектах, которые не пересоздаются.

Проблема (в примерах): Эффект не пересоздается, старые ссылки остаются.


📝 Примеры

// Зависшие ссылки в замыканиях
function createTracker() {
const bigData = new Array(1_000_000).fill('x');
return () => console.log(bigData.length);
}

// Глобальные переменные
foo = {}; // теперь это window.foo

// Слушатели событий и DOM-узлы
element.addEventListener('scroll', handler);
// element.removeEventListener(...) забыли

// Кэши без лимитов
const cache = {};
cache[key] = heavyObject;

// React: stale effects
useEffect(() => {
subscribe();
return () => unsubscribe();
}, []); // но зависимость должна быть!


📌 Для обнаружения утечек памяти используйте Chrome DevTools. Перейдите в Performance → Memory Leak Check и проанализируйте Heap snapshots и Allocation Timelines. Обращайте внимание на Detached DOM nodes и Large object groups. Утечка памяти происходит, когда объект больше не нужен, но на него всё ещё есть ссылка. Иногда это баг, который длится месяцами.

🚪 Frontender's note
Please open Telegram to view this post
VIEW IN TELEGRAM
👍87
Почему сильные инженеры пишут простой код

Со временем становится заметно, что чем опытнее разработчик - тем проще его код.

Меньше «умных» трюков.
Меньше демонстрации возможностей языка.
Больше спокойных, очевидных решений.

Это не парадокс. Это закономерность.

💛 Они думают о будущем

Слабый инженер пишет код, который работает.
Сильный - код, который можно изменить через год.

Простой код:
🔘 легче читать
🔘 легче тестировать
🔘 легче рефакторить


Сложный код почти всегда превращается в ловушку для команды.

💛 Они оптимизируют не компьютер, а команду

Самая дорогая операция в проекте - не вычисление.
А понимание чужого кода.

Если решение:
🔘 требует 10 минут объяснений
🔘 построено на «красивом» хаке
🔘 использует экзотические паттерны


его стоимость уже слишком высокая.

💛 Они не доказывают ум - они решают задачи

Новички часто хотят показать, что знают:
🔘 сложные абстракции
🔘 хитрые дженерики
🔘 продвинутые паттерны

Сильные инженеры знают другое правило:
если можно проще - нужно проще.


💛 Они понимают цену абстракции

Абстракция - это не подарок. Это долг.

Каждый дополнительный слой - это:
🔘 когнитивная нагрузка
🔘 новая точка отказа
🔘 усложнённый дебаг

Поэтому опытные разработчики добавляют абстракции только тогда,
когда они действительно снимают боль, а не создают её.


💛 Простота - это не примитивность

Простой код - это:
🔘 явные зависимости
🔘 понятные названия
🔘 минимум магии
🔘 предсказуемое поведение

Чтобы писать так, нужен опыт.
Потому что простота - результат множества осознанных решений.


Главная мысль

Сложность - дешёвая.
Простота - дорогая.

И именно поэтому сильные инженеры выбирают её сознательно.
Потому что через год этот код поддерживать им же.
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍9🔥8👎7👀1
Forwarded from xCode Journal
This media is not supported in your browser
VIEW IN TELEGRAM
😎 Сеньор-разработчик перепрыгивает с созвона одной валютной удаленки на созвон другой валютной удаленки:

💥 xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3842
HTML Popover API — нативные попапы без 200 строк JS

Любой попап = библиотека, порталы и куча логики?
Не обязательно. В HTML есть нативный popover — полноценный API.

Что это

Встроенный механизм для:
👉 тултипов
👉 дропдаунов
👉 контекстных меню
👉 простых модалок

Без менеджеров состояния и ловли кликов вне.


<button popovertarget="info">Открыть</button>

<div id="info" popover>
Контент
</div>


Кнопка сама знает, что открыть.

Почему это круто

👉 нативное управление фокусом
👉 закрытие по Escape и клику вне
👉 минимум JavaScript
👉 полная стилизация через CSS

Режимы

auto — закрывается при клике вне
manual — управляешь через JS


element.showPopover()
element.hidePopover()
element.togglePopover()


Где использовать

👉 dropdown
👉 меню действий
👉 фильтры
👉 небольшие панели


Это не замена сложным модальным системам.
Но для простого UI — почти идеальный инструмент.


Меньше кода.
Меньше багов.
Меньше велосипеда.
120👍15👀4😁1
Как frontend-разработчику получить оффер в Big Tech?

Платят как джуну, а спрашивают как с лида 🙄 Зарплата не растёт, задачи скучные.

Пробуешь откликаться, но на резюме клюют только ноунейм компании, а на собесах валят на алгоритмах? При этом вокруг кто-то постоянно получает офферы в Яндекс или VK...

Стабильность с маленькой зп, или дестрой рынка и выход на максимальную? Синяя или красная таблетка, Нео?! 👾

Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор.

Помогаю устроиться на хорошие позиции в Big Tech и сопровождаю на испытательном сроке.


В своем канале:
👉Разбираю самые популярные и каверзные вопросы на собесах
👉Рассказываю как пройти фильтр HR
👉Борюсь с убеждениями, которые мешают развиваться
👉Делюсь лайфхаками, например как аккуратно “пинговать” рекрутеров

Регулярно публикую полезные материалы:

▪️60 вопросов, которые точно помогут тебе на собеседовании
▪️Подборка из 100+ каналов с вакансиями для разработчиков
▪️
10 задротских вопросов про JavaScript, после которых ты усомнишься, что вообще знаешь JS. Часть 1
▪️Чек лист проверки своего резюме

Подписывайся, нас уже 4500 🤓: ссылка

Реклама, erid: 2W5zFGv4CQR ИП Галактионов Тихон Витальевич, ИНН 771618975809
👎8😁3👍1
Forwarded from xCode Journal
😭 «Меньше 200 тыс. в Москве — лютейшая нищета»

Разраб создал проект Salary Tiers, который разбивает зарплаты по городам и выдает жестокую правду о том, на каком ты уровне жизни.

Смотрим и плачем здесь

✖️ xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁36👎95👀3
Рост найма Fullstack-разработчиков на 28% в 2025 году: последствия для Frontend-специалистов

Увеличение спроса на Fullstack-разработчиков
В 2025 году количество вакансий для Fullstack-разработчиков увеличилось на 28%, что обусловлено их универсальностью и способностью работать как с клиентской, так и с серверной частью приложений. Это позволяет компаниям оптимизировать затраты и ускорять процесс разработки.

Влияние на рынок Frontend-разработчиков
Рост популярности Fullstack-разработчиков привел к снижению спроса на узкоспециализированных Frontend-разработчиков. В результате, в 2025 году зарплаты Frontend-специалистов снизились на 5–12% в зависимости от уровня квалификации.

Рекомендации для Frontend-специалистов
Чтобы оставаться конкурентоспособными, Frontend-разработчикам рекомендуется расширять свои навыки, осваивая Backend-технологии и становясь Fullstack-специалистами. Это повысит их ценность на рынке труда и позволит претендовать на более высокие зарплаты.

Факты:
👉 В 2025 году количество вакансий для Fullstack-разработчиков увеличилось на 28%.
👉 Зарплаты Frontend-разработчиков в 2025 году снизились на 5–12% в зависимости от уровня квалификации.

❗️Рост спроса на Fullstack-разработчиков в 2025 году оказывает давление на рынок Frontend-специалистов, снижая их зарплаты и востребованность. Для сохранения конкурентоспособности рекомендуется расширять компетенции и переходить к Fullstack-разработке.

Источники:
Сколько зарабатывают программисты в России в 2025 году: полный обзор зарплат IT-специалистов.
Аналитика ИТ-зарплат: Senior и TeamLead показывают рост до 12,5% на фоне падения остальных грейдов.
1С-разработчик 2025: расширять стек или углубляться. Как знание других языков программирования влияет на доход.
👀113😱2👍1
15 марта встречаемся на AI Dev Day — это митап Яндекса, посвященный реальному опыту внедрения AI-инструментов в процессы разработки.

Программа разделена на 2 тематических блока. В первой части руководители и инженеры Яндекса, Сбера, Т-Банка, Ozon и Avito расскажут, как их команды внедряют AI в разработку.

Например, Андрей Попов, лидер трека AI в разработке в Яндексе, расскажет про оптимизацию процессов, тестирование, работу с инцидентами благодаря AI. А еще — поделится, на какие метрики смотреть важнее всего.

Вторая часть — про конкретные проекты, кейсы и технологии. Сергей Бульдяев, технический менеджер продукта в Яндексе, выступит с докладом о том, как создавался кодовый ассистент для разработчиков в IDE на базе open-source решения. Отдельно будет рассказ про агента за пределами IDE на примере YQL-агента.

В этом же блоке Максим Шведенко, руководитель направления Департамента недвижимости и эксплуатации в Сбере, объяснит из чего состоит мультиагентная система, помогающая дизайнерам.

Мероприятие пройдет в московском офисе Яндекса. Для тех, кто не сможет прийти — будет онлайн-трансляция.

Регистрируемся на митап до 12 марта.
2👍1👎1🔥1
Forwarded from xCode Journal
Media is too big
VIEW IN TELEGRAM
🦾 Превращаем любой репозиторий в интерактивный ГРАФ ЗНАНИЙ с GitNexus

GitNexus работает полностью в браузере — просто кидаешь ссылку на GitHub или загружаешь архив и получаешь наглядную карту: файлы, модули, зависимости и связи между ними. Плюс внутри есть ИИ-агент, который отвечает на все вопросы по проекту. Так что можно узнать, где используется функция, как связаны компоненты или за что отвечает конкретный модуль.

По сути, это быстрый способ разобраться в чужом (да и своем…) проекте.

✖️ xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍3
ES2025: Импорт JSON-файлов как модулей

Введение
С выходом ECMAScript 2025 (ES2025) разработчики получили возможность напрямую импортировать JSON-файлы как модули в JavaScript-коде. Это упрощает работу с конфигурационными данными и другими статическими ресурсами, представленными в формате JSON.

Синтаксис импорта JSON-модулей
Для импорта JSON-файла используется ключевое слово import с указанием атрибута with { type: 'json' }. Это гарантирует, что импортируемый файл будет обработан как JSON-модуль.

Пример использования
Рассмотрим пример импорта конфигурационного файла config.json и обращения к его свойствам в коде.

import config from './config.json' with { type: 'json' };

.log(config.apiUrl); // Выводит значение свойства apiUrl из config.json
console.log(config.timeout); // Выводит значение свойства timeout из config.json


❗️Добавление поддержки импорта JSON-файлов как модулей в ES2025 упрощает работу с данными в формате JSON, делая код более чистым и понятным.

Источники
JSON Modules Can Now Be Imported in JavaScript in All Modern Browsers, CSS Modules to Follow.
New Features in ES2025 – BooleanBuffer.
👍19😱53
Управление ресурсами с помощью using и await using в JavaScript

Введение в управление ресурсами
В 2025 году в JavaScript были введены конструкции using и await using для явного управления жизненным циклом ресурсов, таких как файловые дескрипторы и сетевые соединения. Эти конструкции обеспечивают автоматическое освобождение ресурсов при выходе из области видимости, повышая надежность и производительность кода.

Синхронное управление ресурсами с using
Конструкция using предназначена для синхронных ресурсов. При выходе из области видимости переменной, объявленной с using, автоматически вызывается метод [Symbol.dispose]() этого ресурса. Это гарантирует своевременное освобождение ресурсов и предотвращает утечки памяти.

Асинхронное управление ресурсами с await using
Для асинхронных ресурсов используется конструкция await using. Она обеспечивает вызов метода [Symbol.asyncDispose]() при выходе из области видимости, дожидаясь завершения асинхронной операции освобождения ресурса. Это особенно полезно для ресурсов, требующих асинхронного закрытия, таких как файловые дескрипторы в Node.js.

Пример использования await using
Рассмотрим пример чтения файла с использованием await using в Node.js. В этом примере открывается файл, читается его содержимое, после чего файл автоматически закрывается при выходе из области видимости.


import fs from 'node:fs/promises';

async function readFile(filePath) {
await using fileHandle = await fs.open(filePath, 'r');
const data = await fileHandle.readFile({ encoding: 'utf8' });
console.log(data);
}

readFile('example.txt').catch(console.error);

Факты
👉 В 2025 году в JavaScript были введены конструкции using и await using для явного управления ресурсами.
👉 Конструкция using автоматически вызывает метод [Symbol.dispose]() при выходе из области видимости.
👉 Конструкция await using автоматически вызывает метод [Symbol.asyncDispose]() при выходе из области видимости, дожидаясь завершения асинхронной операции.

❗️Введение конструкций using и await using в JavaScript в 2025 году значительно упростило управление ресурсами, обеспечивая их автоматическое освобождение и повышая надежность кода.

Источники
JavaScript's New Superpower: Explicit Resource Management.
JavaScript resource management - JavaScript | MDN.
👀75
Как CSS заменяет JavaScript: новые возможности CSS

Введение
В 2025 году CSS значительно расширил свои возможности, позволяя реализовывать функциональность, ранее доступную только через JavaScript. Это привело к упрощению кода, улучшению производительности и повышению доступности веб-приложений.

Позиционирование относительно якорных элементов
Функция Anchor Positioning позволяет размещать всплывающие подсказки и выпадающие списки относительно других элементов без использования JavaScript. Это упрощает создание интерактивных интерфейсов и снижает зависимость от сторонних библиотек.

Анимации, связанные с прокруткой
С появлением @scroll-timeline разработчики могут связывать прогресс анимации с прокруткой страницы, создавая сложные эффекты без необходимости писать JavaScript-код. Это улучшает производительность и делает анимации более плавными.

Код

/* Пример использования @scroll-timeline для анимации, связанной с прокруткой */
@scroll-timeline --scroll {
source: auto;
orientation: block;
}

.element {
animation: fade-in linear;
animation-timeline: --scroll;
}

@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}



Пользовательские функции CSS
Пользовательские функции CSS позволяют создавать настраиваемые функции, которые возвращают значения, основанные на других свойствах и параметрах. Это расширяет возможности стилизации и уменьшает необходимость в JavaScript для динамических стилей.

Вложенные правила CSS
CSS Nesting позволяет использовать вложенные правила без необходимости в препроцессорах, упрощая структуру стилей и уменьшая объем кода. Это делает CSS более читаемым и поддерживаемым.

❗️ Новые возможности CSS в 2025 году значительно сократили необходимость использования JavaScript для реализации интерактивных и динамических элементов на веб-страницах, упрощая разработку и улучшая производительность приложений.

Источники
Frontend Wrapped 2025: 10 ключевых событий года.
Анимации без JavaScript — новые возможности CSS 2025.
Заметки о выпуске веб-платформы Microsoft Edge 139 (август 2025 г.).
Фронтенд 2025: AI-революция, Server-First и конец эпохи тяжёлых SPA.
8😁4🔥2
Внутренние процессы браузера при загрузке страницы

Архитектура браузера
Современные браузеры используют многопроцессную архитектуру для повышения стабильности и безопасности. Основные компоненты включают процесс браузера, процессы рендеринга для каждой вкладки, процесс GPU и процессы расширений. Такая структура позволяет изолировать сбои и повышает производительность.

Этапы загрузки страницы
При вводе URL браузер выполняет следующие шаги:
👉 Разрешение доменного имени через DNS для получения IP-адреса сервера.
👉 Установление TCP-соединения с сервером.
👉 Отправка HTTP-запроса и получение ответа.
👉 Парсинг HTML-кода и построение DOM-дерева.
👉 Загрузка и применение CSS для формирования CSSOM.
👉 Объединение DOM и CSSOM в рендер-дерево.
👉 Вычисление геометрии элементов (layout).
👉 Отрисовка элементов на экране (painting).

Гидратация
Гидратация — процесс, при котором клиентский JavaScript делает статически отрендеренную страницу интерактивной, присоединяя обработчики событий к элементам DOM. Это обеспечивает быструю первую отрисовку контента, но требует дополнительного времени для полной интерактивности.

Оптимизация загрузки
Для минимизации времени загрузки страницы рекомендуется:
👉 Использовать асинхронную загрузку скриптов.
👉 Минимизировать количество HTTP-запросов.
👉 Оптимизировать изображения и другие ресурсы.
👉 Использовать кэширование.
👉 Применять Content Delivery Network (CDN) для ускорения доставки контента.

Факты
👉 Многопроцессная архитектура браузеров повышает стабильность и безопасность.
👉 Гидратация делает статически отрендеренные страницы интерактивными.
👉 Оптимизация загрузки включает асинхронную загрузку скриптов и использование CDN.

❗️Понимание внутренних процессов браузера при загрузке страницы позволяет разработчикам оптимизировать производительность и улучшить пользовательский опыт.

Источники
Руководство по работе современного браузера описано в данном источнике.
Этапы отрисовки веб-страницы раскрыты в статье на lexusalex.site.
Описание гидратации можно найти на Википедии.
Советы по оптимизации загрузки доступны на MDN.
12👍6🔥3🐳1
📍 Мой личный блог про мои проекты, опыт, ошибки, немного про деньги и жизнь в целом

Геныч. - @just_genych
Please open Telegram to view this post
VIEW IN TELEGRAM
👎61
Forwarded from xCode Journal
😭 Гендерный разрыв в IT никуда не делся

Исследование Selecty и hh․ru показало: >200 тыс. рублей в месяц получают 51,5% мужчин и только 34,8% женщин. В тестировании этот порог пробивают 60% парней и 45% девушек, а в бэкенде высокие доходы лишь у 26,5% разработчиц.

Почему так? Мужчины чаще забирают руководящие посты и сеньорские грейды.

✖️ xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
👎9👍3
Как одна строка CSS может сломать производительность вашего приложения

Введение
Небольшие изменения в CSS могут существенно повлиять на производительность веб-приложения. Одна строка кода способна замедлить загрузку страницы и ухудшить пользовательский опыт.

Сложные селекторы
Использование сложных CSS-селекторов увеличивает нагрузку на браузер при рендеринге страницы. Например, глубокая вложенность или чрезмерно специфичные селекторы усложняют обработку стилей и могут замедлить отображение контента. Рекомендуется упрощать селекторы и избегать избыточной специфичности. Освоение этой практики поможет избежать проблем, таких как общие ошибки в CSS.

Неиспользуемые стили
Загрузка неиспользуемых CSS-правил увеличивает размер страницы и время ее загрузки. Исследования показывают, что средний сайт содержит около 37% неиспользуемого CSS. Это приводит к дополнительной нагрузке на браузер и замедляет рендеринг. Регулярный аудит и удаление неиспользуемых стилей помогают оптимизировать производительность. Подробнее об этом вы можете узнать в статье о скрытых налогах производительности.

Инлайн-стили
Использование инлайн-стилей увеличивает размер HTML-документа и препятствует кэшированию стилей браузером, что замедляет загрузку страниц. Кроме того, инлайн-стили усложняют поддержку и обновление кода. Рекомендуется использовать внешние таблицы стилей для улучшения производительности и удобства сопровождения. Ознакомьтесь с причинами, почему следует избегать инлайн-стилей.

Оптимизация CSS
Для повышения производительности следует минимизировать и объединять CSS-файлы, избегать глубокого вложения селекторов и использовать только необходимые стили. Инструменты, такие как PurgeCSS, помогают выявлять и удалять неиспользуемые CSS-правила, снижая нагрузку на браузер и ускоряя рендеринг страниц. Узнайте больше о решении каскадных проблем в больших проектах из этой статьи.

Факты
👉 Средний сайт содержит около 37% неиспользуемого CSS, что замедляет загрузку страниц.
👉 Сложные селекторы и глубокая вложенность усложняют обработку стилей браузером, замедляя рендеринг.

Итог
❗️ Даже одна строка CSS может существенно повлиять на производительность приложения. Регулярный аудит и оптимизация стилей необходимы для обеспечения быстрой и эффективной работы веб-приложений.

Источники
Освоение сложных CSS-селекторов — Avoiding Common Mistakes in CSS.
Анализ неиспользуемого CSS — The Hidden Performance Tax: How Unused CSS and JavaScript Slow Down Every Page.
Влияние инлайн-стилей — Why You Should Avoid Inline Styles in HTML.
Оптимизация каскадных проблем — Overcoming CSS Cascade Issues in Large Projects.
👍62🔥1👀1