Forwarded from Путь к CEO (18+) | Борцов Дмитрий
Я — плохой руководитель!
Знаете, в IT очень много разговоров про work & life balance. Мол, работать много — плохо, и что нужно после работы отдыхать от компьютера.
Насколько это верный тейк?
Я всю свою сознательную жизнь отдыхаю от работы как в меме, где разработчик закрывает рабочий ноутбук и открываем рядом "домашний" ноутбук. И это в 80% случаев приводит к тому что в перерыве между матчами в CS:GO ты что делаешь? Правильно! Читаешь рабочие чаты, смотришь задачи, задаешь вопросы, пишешь код по каким-то задачкам и так далее.
И всё бы ничего, но, кажется, я лет 5 назад, случайно, сам того не понимая, заразил этой "проактивной болезнью" нескольких разработчиков, которые сейчас трудятся вместе со мной в команде PREMIER.ONE.
У меня есть разработчик. Имя не буду раскрывать, чтобы никто не догадался о ком я. Завуалирую его под какой-нибудь популярный город. Пусть будет Стамбул. Так вот. Стамбул приезжает в офис к 9-10 утра и уходит из офиса одним из самых последних. И нет, он не играет в CS:GO вечерами, просто чтобы жена дома не ругалась. Он работает, потому что... Да вот знал бы я. Последние 3 года я ругаюсь на него (иногда матом), пытаюсь мотивировать его семьёй, отдыхом, прогулками, да и вообще, пытаюсь применять любые доступные мне дистанционно способы воздействия с одним единственным посылом:
Но знаете что я получаю в ответ?
Бывают случаи, когда после таких слов я через пару часов звоню ему по facetime и что я вижу? Правильно. Офис на заднем фоне.
Руководитель другой вертикали начал записывать мне кружочки в тг, когда уходит домой, где показывает что Стамбул сидит в пустом офисе и яростно что-то кодит.
В такие моменты у меня смешанные чувства. С одном стороны — наверное я крутой руководитель, раз мои ребята настолько вовлечены в процесс, что не хотят уходить домой не доделав таску. С другой — я, видимо, плохой руководитель, если за 3 года не смог научить своих сотрудников соблюдать work & life balance.
А как бы вы решили такой кейс?
Отрубить интернет не поможет(( раздаст ведь, зараза, с телефона.
Путь к СЕО (18+). Подписаться
Другие соц.сети:
📷 Instagram
🎞 YouTube
Знаете, в IT очень много разговоров про work & life balance. Мол, работать много — плохо, и что нужно после работы отдыхать от компьютера.
Насколько это верный тейк?
Я всю свою сознательную жизнь отдыхаю от работы как в меме, где разработчик закрывает рабочий ноутбук и открываем рядом "домашний" ноутбук. И это в 80% случаев приводит к тому что в перерыве между матчами в CS:GO ты что делаешь? Правильно! Читаешь рабочие чаты, смотришь задачи, задаешь вопросы, пишешь код по каким-то задачкам и так далее.
И всё бы ничего, но, кажется, я лет 5 назад, случайно, сам того не понимая, заразил этой "проактивной болезнью" нескольких разработчиков, которые сейчас трудятся вместе со мной в команде PREMIER.ONE.
У меня есть разработчик. Имя не буду раскрывать, чтобы никто не догадался о ком я. Завуалирую его под какой-нибудь популярный город. Пусть будет Стамбул. Так вот. Стамбул приезжает в офис к 9-10 утра и уходит из офиса одним из самых последних. И нет, он не играет в CS:GO вечерами, просто чтобы жена дома не ругалась. Он работает, потому что... Да вот знал бы я. Последние 3 года я ругаюсь на него (иногда матом), пытаюсь мотивировать его семьёй, отдыхом, прогулками, да и вообще, пытаюсь применять любые доступные мне дистанционно способы воздействия с одним единственным посылом:
Хватит работать, блять! Иди домой и отдыхай! Работа не волк! Работа - ворк, а волк это гулять!
Но знаете что я получаю в ответ?
Да, Дим, сейчас тут одну штуку доделаю и ну вот СРАЗУ домой!
Бывают случаи, когда после таких слов я через пару часов звоню ему по facetime и что я вижу? Правильно. Офис на заднем фоне.
Руководитель другой вертикали начал записывать мне кружочки в тг, когда уходит домой, где показывает что Стамбул сидит в пустом офисе и яростно что-то кодит.
В такие моменты у меня смешанные чувства. С одном стороны — наверное я крутой руководитель, раз мои ребята настолько вовлечены в процесс, что не хотят уходить домой не доделав таску. С другой — я, видимо, плохой руководитель, если за 3 года не смог научить своих сотрудников соблюдать work & life balance.
А как бы вы решили такой кейс?
Путь к СЕО (18+). Подписаться
Другие соц.сети:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥4🤝1
🚗💨 Мой первый отпуск — путешествие по Центральной России
Уже 4 года в IT я как белка в колесе: очень много работаю, почти без выходных. Весь этот путь я не останавливаюсь на достигнутом и постоянно стремлюсь на новый уровень. Но, наслушавшись разных нарезок про миллиардеров, я понял: чтобы открывать новое и генерировать идеи, нельзя круглосуточно сидеть в комнате, не видя белого света. Без путешествий, вдохновения и новых знакомств прорыв становится почти нереальным.
И вот я с семьёй отправляюсь в месячное турне на машине по городам Центральной России. Цель: отдохнуть, расширить кругозор и встретиться в разных городах с учениками и коллегами. Уже 19 июля в Москве запланирована встреча с учениками — будем целый день гулять по городу и общаться. Очень жду этих встреч! С кем-то знаком больше года, кто-то ещё учится, у кого-то уже 6-10 месяцев опыта, хотя недавно только закончили обучение — как же быстро летит время! 🤯
Ну и, конечно, куда же без нетворкинга и развития? А лучший способ прокачать это — IT-мероприятия. Не устану повторять: ходите на митапы и айтишные тусовки! Стесняетесь? Боитесь? А как вы будете тогда проходить собеседования? Трудоустройство в IT — это комплексный подход. Нужно быть сильным не только технически, но и в софт-скиллах: навыки общения и уверенность в себе решают очень многое. Кстати, на менторстве мы работаем по всем фронтам — прокачиваем и хард, и софт.
На мероприятиях можно познакомиться с крутыми людьми, и кто знает — возможно, именно они помогут вам с трудоустройством, зарефералят или поделятся ценным опытом.
В общем, активность в IT-сообществе — это ключевое. Сидя дома и ни с кем не общаясь, карьеру не построишь. Поэтому во время поездки я планирую заглянуть на пару ивентов в городах маршрута. Чтобы не тратить время на поиски, пользуюсь каналом «IT-мероприятия России / ITMeeting / IT events» — там всё структурированно: митапы, вебинары, конференции в одном месте.
Это лучший источник анонсов, и я всегда советую его ученикам, которые хотят прокачать нетворкинг. Подписывайтесь — вдруг найдете работу именно там😅
🔗 Ссылка на канал событий в IT
Ну а если кто-то из вас живёт в городах моего маршрута (см. картинку 1) — предлагайте интересные места! А может, даже увидимся, и вы проведёте для меня мини-экскурсию? 😎
#work #meetups #conf #events
Уже 4 года в IT я как белка в колесе: очень много работаю, почти без выходных. Весь этот путь я не останавливаюсь на достигнутом и постоянно стремлюсь на новый уровень. Но, наслушавшись разных нарезок про миллиардеров, я понял: чтобы открывать новое и генерировать идеи, нельзя круглосуточно сидеть в комнате, не видя белого света. Без путешествий, вдохновения и новых знакомств прорыв становится почти нереальным.
И вот я с семьёй отправляюсь в месячное турне на машине по городам Центральной России. Цель: отдохнуть, расширить кругозор и встретиться в разных городах с учениками и коллегами. Уже 19 июля в Москве запланирована встреча с учениками — будем целый день гулять по городу и общаться. Очень жду этих встреч! С кем-то знаком больше года, кто-то ещё учится, у кого-то уже 6-10 месяцев опыта, хотя недавно только закончили обучение — как же быстро летит время! 🤯
Ну и, конечно, куда же без нетворкинга и развития? А лучший способ прокачать это — IT-мероприятия. Не устану повторять: ходите на митапы и айтишные тусовки! Стесняетесь? Боитесь? А как вы будете тогда проходить собеседования? Трудоустройство в IT — это комплексный подход. Нужно быть сильным не только технически, но и в софт-скиллах: навыки общения и уверенность в себе решают очень многое. Кстати, на менторстве мы работаем по всем фронтам — прокачиваем и хард, и софт.
На мероприятиях можно познакомиться с крутыми людьми, и кто знает — возможно, именно они помогут вам с трудоустройством, зарефералят или поделятся ценным опытом.
В общем, активность в IT-сообществе — это ключевое. Сидя дома и ни с кем не общаясь, карьеру не построишь. Поэтому во время поездки я планирую заглянуть на пару ивентов в городах маршрута. Чтобы не тратить время на поиски, пользуюсь каналом «IT-мероприятия России / ITMeeting / IT events» — там всё структурированно: митапы, вебинары, конференции в одном месте.
Это лучший источник анонсов, и я всегда советую его ученикам, которые хотят прокачать нетворкинг. Подписывайтесь — вдруг найдете работу именно там😅
Ну а если кто-то из вас живёт в городах моего маршрута (см. картинку 1) — предлагайте интересные места! А может, даже увидимся, и вы проведёте для меня мини-экскурсию? 😎
#work #meetups #conf #events
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25❤6🫡2🤔1🤝1
Forwarded from YeaHub
Аудитория:
→ 3 500 зарегистрированных пользователей
→ 10 000 подписчиков в экосистеме YeaHub (Telegram)
→ 2 000 подписчиков в Instagram
→ 1 000 подписчиков на YouTube
→ 1 200 подписчиков в TikTok
→ 100 000+ посетителей с ноября 2024 года
Команда и развитие:
→ Более 100 IT-специалистов работали над платформой (разработчики, дизайнеры, тестировщики)
→ Инкубировали 60+ молодых специалистов, успешно трудоустроившихся после стажировки
→ 4 стажёра на Go разрабатывают новый сервис для YeaHub
В планах – привлечение начинающих тестировщиков для работы с реальным проектом. Хотите на бесплатную стажировку? Пишите: @yeahub_support
Развитие платформы:
→ Расширяем партнёрство с экспертами для создания качественного контента
→ Разрабатываем новые сервисы для IT-развития
→ Постоянно улучшаем функционал платформы
YeaHub растёт, обучает и создаёт новые возможности для IT-сообщества. 🚀
Подписывайтесь на каналы Экосистемы YeaHub
Проект YeaHub:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥1
Участие в open-source проектах — один из лучших способов прокачать навыки, получить реальный опыт и сделать вклад в IT-сообщество.
Как начать?
→ Выберите проект – найдите проект на GitHub/GitLab, который вам интересен (например, связанный с вашим стеком технологий).
→ Изучите документацию – перед внесением правок разберитесь в структуре кода и правилах контрибуции (часто есть файл CONTRIBUTING.md).
→ Начните с малого – исправьте опечатки, улучшите документацию или возьмите задачу с меткой good first issue.
→ Делайте пул-реквесты (PR) – предлагайте свои изменения, следуя стандартам проекта.
→ Получайте фидбек – ревью от опытных разработчиков поможет вам расти.
Зачем это нужно?
✅ Реальный опыт – работаете с живым кодом, а не учебными примерами.
✅ Портфолио – ваши контрибуции видны в профиле GitHub и могут заинтересовать работодателей.
✅ Нетворкинг – знакомитесь с разработчиками и получаете рекомендации.
✅ Помощь сообществу – ваш вклад может упростить жизнь другим программистам.
Где искать задачи?
→GitHub Explore (github.com/explore)
→Good First Issues (goodfirstissues.com)
→Open Source Friday (opensourcefriday.com)
Совет: Не бойтесь ошибаться – даже небольшие правки ценны. Главное – начать!
YeaHub тоже поддерживает open-source инициативу. Мы начали проработку гайдов, задач и issues, чтобы начинающие разработчики могли практиковаться. А пока можете предлагать улучшения😊
https://github.com/YeaHubTeam/yeahub-platform
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5😁3🤔1💯1
Не люблю разводить срачи, но на мой канал запущен таргетинг от одного "ментора".
За ним стоит большая команда продюсеров и крупный рекламный бюджет. Сам он занятий не проводит — всё на кураторах. А реклама — повсюду: Яндекс, ВК, Телеграм и т.д.
Совсем недавно у него была схема 10k предоплата + 100% постоплата после трудоустройства. Сейчас — только полная предоплата 180k+. Почему так? Видимо, экономика не сходится: нужно платить кураторам, покупать рекламу, греть новых клиентов. А вот с трудоустройством у учеников не всё гладко — до оффера довести получается далеко не всегда. Поэтому и убрали постоплату: деньги нужно забрать сразу, а будет ли результат — неважно.
Интересный момент: сам "ментор" начал путь с нуля всего год назад, с помощью другого наставника. Более того, материалы своего ментора он просто украл, за что был исключён из сообщества ОМ.
Мораль проста: прежде чем идти на курс или менторство — изучайте, кто стоит за проектом. Репутация, реальный опыт, результаты учеников — всё это важно. Не ведитесь на агрессивную рекламу.
За ним стоит большая команда продюсеров и крупный рекламный бюджет. Сам он занятий не проводит — всё на кураторах. А реклама — повсюду: Яндекс, ВК, Телеграм и т.д.
Совсем недавно у него была схема 10k предоплата + 100% постоплата после трудоустройства. Сейчас — только полная предоплата 180k+. Почему так? Видимо, экономика не сходится: нужно платить кураторам, покупать рекламу, греть новых клиентов. А вот с трудоустройством у учеников не всё гладко — до оффера довести получается далеко не всегда. Поэтому и убрали постоплату: деньги нужно забрать сразу, а будет ли результат — неважно.
Интересный момент: сам "ментор" начал путь с нуля всего год назад, с помощью другого наставника. Более того, материалы своего ментора он просто украл, за что был исключён из сообщества ОМ.
Мораль проста: прежде чем идти на курс или менторство — изучайте, кто стоит за проектом. Репутация, реальный опыт, результаты учеников — всё это важно. Не ведитесь на агрессивную рекламу.
❤39👍12🔥3😢3
На собеседованиях часто просят определить порядок вывода в консоль — это типичные задачи на понимание работы Event Loop в JavaScript. Их нужно не просто уметь решать, но и грамотно объяснять, почему вывод именно такой.
Многие новички теряются на таких заданиях, потому что не понимают, как работает механизм очередей и стеков исполнения. На самом деле, всё становится гораздо проще, когда ты разберёшься в логике работы Event Loop. После этого ты сможешь решать практически любую подобную задачу.
Кстати, у меня есть видео, где я подробно разбираю 5 разных задач, показывая на схеме каждый шаг:
— что куда попадает
— в какую очередь отправляется
— в какой момент выполняется
Рекомендую посмотреть, особенно если хочешь уверенно чувствовать себя на техническом собеседовании.
console.log('Start');
Promise.resolve()
.then(() => {
console.log('Promise 1');
Promise.resolve()
.then(() => console.log('Nested Promise'));
})
.then(() => console.log('Promise 2'));
console.log('End');
console.log('Start');
setTimeout(() => console.log('Timeout 1'), 0);
Promise.resolve()
.then(() => {
console.log('Promise 1');
setTimeout(() => {
console.log('Timeout 2');
Promise.resolve().then(() => console.log('Promise inside Timeout'));
}, 0);
});
setTimeout(() => console.log('Timeout 3'), 0);
console.log('End');
Promise.resolve('Data')
.then(res => { throw new Error('Problem'); })
.catch(err => {
console.log('Caught:', err.message);
return 'Recovered';
})
.finally(() => console.log('Cleanup'))
.then(res => console.log('Final:', res));
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Разбор задач по Event Loop с собеседований
В этом видео мы подробно разберем выполнение кода в задачах по Event Loop шаг за шагом. Мы визуализируем процесс на схеме, чтобы показать, что происходит с кодом в момент его выполнения. Разберемся, как работает стек вызовов, что такое микротаски, макротаски…
👍13🔥4❤2💯1
Forwarded from YeaHub
Сегодня YeaHub — это платформа, которая помогает айтишникам готовиться к собеседованиям, развивать навыки и уверенно расти в профессии. Но это только начало.
Мы создаём единую точку входа в IT — пространство, где можно не только учиться, но и общаться, развиваться, строить карьеру и создавать.
📺 Медиа-экосистема YeaHub
Мы активно развиваем наши медиа-платформы, чтобы вдохновлять, делиться опытом и рассказывать истории IT:
Также мы будем публиковать статьи на внешних площадках от лица YeaHub, чтобы наш голос был услышан шире.
👥 YeaHub — это сообщество
Мы строим не просто платформу, а живое комьюнити. Планируем проводить:
- регулярные голосования,
- обсуждения улучшений,
- активности для участников.
Каждый участник — важная часть YeaHub. Мы хотим, чтобы вы не только пользовались платформой, но и влияли на её развитие.
👨💻 YeaHub — это проект, который делают айтишники
Наша платформа создаётся айтишниками для айти — вместе с опытными экспертами и участием стажёров. Для новичков это:
- реальный опыт командной разработки,
- работа по Scrum,
- взаимодействие с разными ролями,
- практика на большом, живом проекте.
А ещё наш код полностью открыт — специально для тех, кто хочет учиться на реальных проектах. Это отличная возможность погрузиться в живую кодовую базу https://github.com/YeaHubTeam
🦸♂️ Кто стоит за разработкой:
@ruslan_kuyanets @denispereloma @the_real_daniil — менторы по Frontend, разрабатывают веб-версию YeaHub вместе со своими учениками
@kishmyak — ментор по Android, вместе с новичками работает над Android-приложением
@isakovios — ментор по iOS, вместе с учениками развивает iOS-версию
@edzi_qa — ментор по QA, помогает минимизировать баги и прокачивает будущих тестировщиков
@turimik — ментор по системной аналитике, его команда пишет требования и описания задач для всех участников
Также в проекте участвуют дизайнеры, backend-разработчики и другие специалисты, которые двигают YeaHub вперёд. Мы растём, и вместе с нами растут участникы команды — получая бесценный опыт.
🤝 YeaHub объединяет
Мы развиваем систему Guru (Экспертов) чтобы контент и качество платформы было на высоком уровне. Сейчас в нашей команде экспертов есть:
🚀 Вперёд — к новым вершинам
Впереди много вызовов и амбициозных планов. Спасибо, что вы с нами. Мы делаем это вместе 💜
👉 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6🔥2
Forwarded from React Frontend | YeaHub
Техническое собеседование. ЗП: от 200к. Май 2025. Проект: Сбер. Опыт: 4 года. Задачи: Отсортировать список нечетных чисел, валидность скобок.
Вопросы:
- Перечислите основные методы массивов
- Какие есть способы создания объектов и в чем их отличия?
- Что такое Promise?
- Расскажите про все методы Promise?
- Расскажите про this и контекст?
Все 14 вопросов можно посмотреть на нашей платформе
#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥4😢2🤝2
🔧 Как оптимизировать фронтенд?
Во-первых, знание способов оптимизации фронтенд-приложений полезно абсолютно всем разработчикам: это помогает писать более качественный, эффективный и поддерживаемый код.
Во-вторых, тема оптимизаций регулярно всплывает на собеседованиях. Когда вас спрашивают, важно не просто перечислить техники, а уметь рассуждать, приводить примеры и объяснять, почему именно этот подход работает. Нужно чувствовать себя в этом вопросе как рыба в воде.
Чтобы в этом разобраться, мы будем делить оптимизации на разные категории. Это позволит системно подойти к теме, а не сваливать все приёмы в одну кучу:
📌 1. По направлению оптимизации (Что именно оптимизируем?)
→ Загрузка (быстрее доставить код и ассеты пользователю)
→ Выполнение (ускорить работу JS, рендера, анимаций)
→ Рендеринг (уменьшить количество перерисовок, оптимизировать DOM и Virtual DOM)
→ Сеть (сократить количество запросов, уменьшить вес ресурсов)
→ Память (контролировать утечки и тяжелые структуры данных)
→ Пользовательский опыт (UX perf) (перфоманс как часть удобства: LCP, FID, CLS)
📌 2. По подходу (активные / пассивные)
→ Активные — мы прямо пишем код с учетом оптимизаций (мемоизация, lazy-loading, code splitting).
→ Пассивные — оптимизации «под капотом», которые происходят автоматически и не требуют явных действий разработчика. Мы их напрямую не пишем, но должны понимать, что они есть и как работают (батчинг, tree shaking и тд)
📌 3. По уровню применения
→ Фреймворк-специфичные (React: memo, useCallback, Suspense; Vue: computed, watchEffect, и т.д.)
→ Языковые/ванильные (JS: Event delegation, Web Workers; CSS: will-change, contain; HTML: loading="lazy")
→ Инфраструктурные (CDN, кеши, SSR/SSG, bundlers: webpack/vite/rollup)
→ Браузерные и DevTools (Performance tab, Lighthouse, Coverage, профилировщики)
→ Архитектурные и паттерны (Декомпозиция, DRY, SOLID и тд.)
📌 4. По типу эффекта
→ Скорость загрузки (Load performance) — как быстро сайт открывается.
→ Интерактивность (Runtime performance) — как быстро реагирует на действия.
→ Гладкость (Smoothness) — FPS, плавность анимаций, отсутствие "лагов".
→ Устойчивость (Stability) — CLS, предсказуемость интерфейса.
📌 5. По времени применения
→ До разработки — проектирование архитектуры, выбор стека.
→ Во время разработки — правильные паттерны, линтеры, code splitting.
→ После разработки — профилирование, мониторинг перфоманса, оптимизация по данным реальных пользователей (RUM).
Я запускаю цикл постов, в котором на конкретных примерах разберём каждую категорию. Посмотрим, какие инструменты и практики можно применять, обсудим их плюсы и минусы, а также то, как они работают в реальных проектах.
Цель — собрать большую базу знаний из 50+ способов оптимизации фронтенда (а может, получится и больше). В итоге выйдет не просто серия постов, а полноценная карта оптимизаций, которая станет шпаргалкой для собесов и практической помощью в работе.
#оптимизации #react #frontend
Во-первых, знание способов оптимизации фронтенд-приложений полезно абсолютно всем разработчикам: это помогает писать более качественный, эффективный и поддерживаемый код.
Во-вторых, тема оптимизаций регулярно всплывает на собеседованиях. Когда вас спрашивают, важно не просто перечислить техники, а уметь рассуждать, приводить примеры и объяснять, почему именно этот подход работает. Нужно чувствовать себя в этом вопросе как рыба в воде.
Чтобы в этом разобраться, мы будем делить оптимизации на разные категории. Это позволит системно подойти к теме, а не сваливать все приёмы в одну кучу:
📌 1. По направлению оптимизации (Что именно оптимизируем?)
→ Загрузка (быстрее доставить код и ассеты пользователю)
→ Выполнение (ускорить работу JS, рендера, анимаций)
→ Рендеринг (уменьшить количество перерисовок, оптимизировать DOM и Virtual DOM)
→ Сеть (сократить количество запросов, уменьшить вес ресурсов)
→ Память (контролировать утечки и тяжелые структуры данных)
→ Пользовательский опыт (UX perf) (перфоманс как часть удобства: LCP, FID, CLS)
📌 2. По подходу (активные / пассивные)
→ Активные — мы прямо пишем код с учетом оптимизаций (мемоизация, lazy-loading, code splitting).
→ Пассивные — оптимизации «под капотом», которые происходят автоматически и не требуют явных действий разработчика. Мы их напрямую не пишем, но должны понимать, что они есть и как работают (батчинг, tree shaking и тд)
📌 3. По уровню применения
→ Фреймворк-специфичные (React: memo, useCallback, Suspense; Vue: computed, watchEffect, и т.д.)
→ Языковые/ванильные (JS: Event delegation, Web Workers; CSS: will-change, contain; HTML: loading="lazy")
→ Инфраструктурные (CDN, кеши, SSR/SSG, bundlers: webpack/vite/rollup)
→ Браузерные и DevTools (Performance tab, Lighthouse, Coverage, профилировщики)
→ Архитектурные и паттерны (Декомпозиция, DRY, SOLID и тд.)
📌 4. По типу эффекта
→ Скорость загрузки (Load performance) — как быстро сайт открывается.
→ Интерактивность (Runtime performance) — как быстро реагирует на действия.
→ Гладкость (Smoothness) — FPS, плавность анимаций, отсутствие "лагов".
→ Устойчивость (Stability) — CLS, предсказуемость интерфейса.
📌 5. По времени применения
→ До разработки — проектирование архитектуры, выбор стека.
→ Во время разработки — правильные паттерны, линтеры, code splitting.
→ После разработки — профилирование, мониторинг перфоманса, оптимизация по данным реальных пользователей (RUM).
Я запускаю цикл постов, в котором на конкретных примерах разберём каждую категорию. Посмотрим, какие инструменты и практики можно применять, обсудим их плюсы и минусы, а также то, как они работают в реальных проектах.
Цель — собрать большую базу знаний из 50+ способов оптимизации фронтенда (а может, получится и больше). В итоге выйдет не просто серия постов, а полноценная карта оптимизаций, которая станет шпаргалкой для собесов и практической помощью в работе.
#оптимизации #react #frontend
5👍42🔥24❤4🤝2
🧠 Оптимизация памяти во фронтенде
Когда говорят про оптимизацию фронтенда, чаще всего думают о скорости загрузки или анимациях. Но есть ещё одна важная область — память.
- утечки замедляют приложение со временем
- на мобильных устройствах это может приводить к крашам
- стабильность UX напрямую зависит от того, как мы управляем памятью
Теперь давайте поговорим об основных источниках проблем
1️⃣ Замыкания и долгоживущие ссылки
Частая ошибка — сохранять в замыкании большие объекты или DOM-элементы, которые уже не нужны. В итоге GC (сборщик мусора) не может их очистить.
Решение: не тащить в замыкания лишнее, по возможности использовать WeakMap/WeakSet для хранения.
2️⃣ Неудалённые обработчики событий
Навесили addEventListener, но забыли removeEventListener. Опасно при работе с компонентами: удалённый компонент может остаться в памяти из-за висящего обработчика.
Решение: всегда отписываемся.
3️⃣ Таймеры и интервалы
Забытые setInterval или setTimeout продолжают жить, даже если компонент уже размонтирован.
Решение: чистим вручную.
4️⃣ Кэширование «без меры»
Иногда мы храним результаты в памяти (memoization, cache, global store), но не думаем про «старые» данные. В итоге кэш растёт бесконечно. Избыточное кэширование и мемоизация тоже могут быть вредны: на лёгких операциях выгоднее пересчитать заново, чем хранить всё в памяти.
Решение: использовать LRU cache или ограничивать размер хранения.
5️⃣ Глобальные ссылки и синглтоны
Всё, что записано в глобальную область (window, global store), живёт всё время жизни приложения. Если туда положить тяжёлый объект, GC его никогда не удалит.
Решение: хранить только действительно нужное, очищать ссылки вручную, если объект больше не нужен.
6️⃣ DOM-ссылки и оторванные узлы
Если держать ссылку на DOM-элемент, удалённый из документа, он остаётся в памяти. Особенно актуально при ручной работе с document.createElement.
Решение: обнулять ссылки после удаления узлов.
#оптимизации #react #frontend #память
Когда говорят про оптимизацию фронтенда, чаще всего думают о скорости загрузки или анимациях. Но есть ещё одна важная область — память.
- утечки замедляют приложение со временем
- на мобильных устройствах это может приводить к крашам
- стабильность UX напрямую зависит от того, как мы управляем памятью
Теперь давайте поговорим об основных источниках проблем
Частая ошибка — сохранять в замыкании большие объекты или DOM-элементы, которые уже не нужны. В итоге GC (сборщик мусора) не может их очистить.
Решение: не тащить в замыкания лишнее, по возможности использовать WeakMap/WeakSet для хранения.
Навесили addEventListener, но забыли removeEventListener. Опасно при работе с компонентами: удалённый компонент может остаться в памяти из-за висящего обработчика.
Решение: всегда отписываемся.
useEffect(() => {
const handler = () => console.log("scroll");
window.addEventListener("scroll", handler);
return () => {
window.removeEventListener("scroll", handler);
};
}, []);
Забытые setInterval или setTimeout продолжают жить, даже если компонент уже размонтирован.
Решение: чистим вручную.
const id = setInterval(() => doWork(), 1000);
// позже
clearInterval(id);
Иногда мы храним результаты в памяти (memoization, cache, global store), но не думаем про «старые» данные. В итоге кэш растёт бесконечно. Избыточное кэширование и мемоизация тоже могут быть вредны: на лёгких операциях выгоднее пересчитать заново, чем хранить всё в памяти.
Решение: использовать LRU cache или ограничивать размер хранения.
Всё, что записано в глобальную область (window, global store), живёт всё время жизни приложения. Если туда положить тяжёлый объект, GC его никогда не удалит.
Решение: хранить только действительно нужное, очищать ссылки вручную, если объект больше не нужен.
Если держать ссылку на DOM-элемент, удалённый из документа, он остаётся в памяти. Особенно актуально при ручной работе с document.createElement.
Решение: обнулять ссылки после удаления узлов.
#оптимизации #react #frontend #память
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥7❤2
Замыкания в JavaScript позволяют функциям «запоминать» переменные внешнего окружения. Но если в замыкании остаются большие объекты или DOM-элементы, сборщик мусора их не очистит — это приводит к утечкам памяти.
🔹 Проблема: долгоживущие ссылки
Когда замыкание хранит объект, на который больше нет других ссылок, сборщик мусора не может его удалить, потому что замыкание всё ещё держит ссылку.
function createCache() {
const cache = { largeData: new Array(1000000).fill('*') };
return function getCache() {
return cache;
};
}
const getCache = createCache();
// cache занимает память, пока существует getCache
Здесь cache будет жить в памяти пока существует функция getCache, даже если мы больше не используем её данные.
🔹 Решение 1: функция очистки
Можно добавить метод для обнуления ссылок, чтобы GC мог очистить объект:
function createCache() {
let cache = { largeData: new Array(1000000).fill('*') };
function getCache() {
return cache;
}
getCache.cleanup = function () {
cache = null; // память освобождается
};
return getCache;
}
const getCache = createCache();
getCache.cleanup(); // теперь память под cache может быть освобождена
🔹 Решение 2: WeakMap для временных данных
Если нужно хранить состояние объектов, но не держать их в памяти навсегда, используйте WeakMap. Сборщик мусора автоматически очистит объект, когда на него не останется ссылок.
const objectData = new WeakMap();
function attachData(obj) {
objectData.set(obj, { temp: 'data' });
}
let obj = {};
attachData(obj);
obj = null; // объект и данные в WeakMap будут автоматически удалены
🔹 Резюме: как безопасно использовать замыкания
- Не храните в замыканиях лишние объекты.
- Для больших структур или временных данных используйте WeakMap/WeakSet.
- Добавляйте функции очистки (cleanup) для объектов и стейта, которые больше не нужны.
- Проверяйте память через DevTools, чтобы убедиться, что объекты удаляются.
💡 Совет для разработчиков:
Любой state или кеш, который вы храните в замыкании, должен иметь «точку выхода» — иначе ваше приложение постепенно «накопит» память, которая больше не используется.
#оптимизации #react #frontend #память #замыкания
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥10❤4🤝2🫡1
🎯 Менторство до трудоустройства (всё включено, оплата после оффера)
Редко пишу про своё дело, хотя уверен — программа одна из лучших на рынке. Вот почему:
🔹 Авторская программа — все курсы, гайды и материалы написаны мной: от основ HTML до деплоя и архитектуры.
🔹 Реальная стажировка — участие в большом проекте с командой из 60 специалистов (QA, Backend, Analyst, Frontend, iOS, Android, дизайнеры). Работаем по всем процессам как в настоящей компании.
🔹 Максимальная вовлечённость ментора — экзамены, мок-собесы, групповые занятия, личные разборы.
🔹 Трудоустройство под ключ — подготовка резюме, тренировка собесов, сопровождение на этапе оффера и поддержка на испытательном сроке.
🔹 Сообщество 200+ выпускников и студентов — ребята, которые уже прошли этот путь, нашли работу и помогают друг другу.
🔹 Большая база знаний — 200+ записей лекций, собесов, гайдов и полезных материалов.
Если ищешь качественное обучение до трудоустройства — пиши.
Подробнее 👉 https://news.1rj.ru/str/mentor_reactify/150
Редко пишу про своё дело, хотя уверен — программа одна из лучших на рынке. Вот почему:
🔹 Авторская программа — все курсы, гайды и материалы написаны мной: от основ HTML до деплоя и архитектуры.
🔹 Реальная стажировка — участие в большом проекте с командой из 60 специалистов (QA, Backend, Analyst, Frontend, iOS, Android, дизайнеры). Работаем по всем процессам как в настоящей компании.
🔹 Максимальная вовлечённость ментора — экзамены, мок-собесы, групповые занятия, личные разборы.
🔹 Трудоустройство под ключ — подготовка резюме, тренировка собесов, сопровождение на этапе оффера и поддержка на испытательном сроке.
🔹 Сообщество 200+ выпускников и студентов — ребята, которые уже прошли этот путь, нашли работу и помогают друг другу.
🔹 Большая база знаний — 200+ записей лекций, собесов, гайдов и полезных материалов.
Если ищешь качественное обучение до трудоустройства — пиши.
Подробнее 👉 https://news.1rj.ru/str/mentor_reactify/150
🔥18❤6👍5
📚 Кэширование без меры: когда оптимизация становится проблемой
Кэширование и мемоизация звучат как бесплатная оптимизация. Мы думаем: «Раз вычисление можно не делать повторно, значит всегда лучше закэшировать». Но это опасное заблуждение. Если кэшировать без меры, приложение начинает засорять память и работать хуже, а не лучше.
🚨 Как мы засоряем память
Представьте, что вы храните в памяти результаты всех вычислений. Старые данные не удаляются, новые постоянно добавляются. В итоге кэш разрастается до сотен мегабайт. На слабых устройствах это выливается во фризы или даже падение.
Был реальный кейс: разработчик решил «оптимизировать» React-страницу и мемоизировал каждый UI-компонент. На странице их было сотни. В итоге выигрыш оказался мизерным, а память улетела в космос. Сам процесс мемоизации стал дороже, чем пересчёт. Правильнее было бы мемоизировать целую форму или контейнер, где решение о перерисовке действительно экономит ресурсы.
❌ Пример бессмысленной мемоизации
Сложение и так работает за наносекунды. Хранить результаты в памяти бессмысленно — найти их в Map будет дольше.
✅ Пример, где кэш оправдан
Тяжёлые операции, например парсинг или генерация отчётов.
Если вызывать её часто с одними и теми же данными, кэш реально ускоряет работу. Но нужен лимит. Самый популярный вариант — LRU Cache (Least Recently Used).
Теперь кэш не растёт бесконечно. Когда хранилище достигает 100 элементов, старые записи выбрасываются.
🔧 Пример из UI
Вместо того чтобы мемоизировать каждый компонент по отдельности:
Лучше мемоизировать контейнер, внутри которого они все живут:
Так вы экономите не на «каждой кнопке», а на всей форме сразу. Это дешевле и эффективнее.
💡Правило простое: если сомневаешься — лучше пересчитай, чем закэшируй навсегда.
#оптимизации #react #frontend #память #memo #кеширование
Кэширование и мемоизация звучат как бесплатная оптимизация. Мы думаем: «Раз вычисление можно не делать повторно, значит всегда лучше закэшировать». Но это опасное заблуждение. Если кэшировать без меры, приложение начинает засорять память и работать хуже, а не лучше.
🚨 Как мы засоряем память
Представьте, что вы храните в памяти результаты всех вычислений. Старые данные не удаляются, новые постоянно добавляются. В итоге кэш разрастается до сотен мегабайт. На слабых устройствах это выливается во фризы или даже падение.
Был реальный кейс: разработчик решил «оптимизировать» React-страницу и мемоизировал каждый UI-компонент. На странице их было сотни. В итоге выигрыш оказался мизерным, а память улетела в космос. Сам процесс мемоизации стал дороже, чем пересчёт. Правильнее было бы мемоизировать целую форму или контейнер, где решение о перерисовке действительно экономит ресурсы.
❌ Пример бессмысленной мемоизации
function add(a, b) {
return a + b;
}
// кто-то решил мемоизировать даже это
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = args.join(',');
if (cache.has(key)) return cache.get(key);
const result = fn(...args);
cache.set(key, result);
return result;
};
}
const memoAdd = memoize(add);
console.log(memoAdd(2, 3)); // 5
console.log(memoAdd(2, 3)); // 5 из кэша (но толку?)
Сложение и так работает за наносекунды. Хранить результаты в памяти бессмысленно — найти их в Map будет дольше.
✅ Пример, где кэш оправдан
Тяжёлые операции, например парсинг или генерация отчётов.
function heavyComputation(key) {
// имитация дорогой операции
for (let i = 0; i < 1e7; i++) {}
return `Result for ${key}`;
}
Если вызывать её часто с одними и теми же данными, кэш реально ускоряет работу. Но нужен лимит. Самый популярный вариант — LRU Cache (Least Recently Used).
import LRU from 'lru-cache';
const cache = new LRU({ max: 100 }); // максимум 100 элементов
function getData(key) {
if (cache.has(key)) {
return cache.get(key);
}
const result = heavyComputation(key);
cache.set(key, result);
return result;
}
console.log(getData("a")); // долго
console.log(getData("a")); // быстро, из кэша
Теперь кэш не растёт бесконечно. Когда хранилище достигает 100 элементов, старые записи выбрасываются.
🔧 Пример из UI
Вместо того чтобы мемоизировать каждый компонент по отдельности:
const MemoButton = React.memo(Button);
const MemoInput = React.memo(Input);
const MemoLabel = React.memo(Label);
Лучше мемоизировать контейнер, внутри которого они все живут:
const Form = ({ fields, onSubmit }) => {
return (
<form onSubmit={onSubmit}>
{fields.map((f) => (
<Input key={f.id} {...f} />
))}
<button type="submit">Submit</button>
</form>
);
};
// мемоизируем целиком форму
export default React.memo(Form);
Так вы экономите не на «каждой кнопке», а на всей форме сразу. Это дешевле и эффективнее.
Кэш — это инструмент, а не магическая палочка. Он действительно помогает на тяжёлых вычислениях и часто используемых данных. Но хранить всё подряд — значит засорять память. Лёгкие операции всегда лучше пересчитать заново. А в UI выгоднее мемоизировать крупные контейнеры, а не каждую мелочь.
💡Правило простое: если сомневаешься — лучше пересчитай, чем закэшируй навсегда.
#оптимизации #react #frontend #память #memo #кеширование
🔥22❤4👍2
🚀 UX Performance: как скорость ощущается глазами пользователя
Когда мы говорим "сайт быстрый" — это не про цифры в Lighthouse, а про то, как человек ощущает взаимодействие.
Google выделил три ключевых метрики, которые напрямую влияют на удобство:
LCP — Largest Contentful Paint
INP (ранее FID) — Interaction to Next Paint
CLS — Cumulative Layout Shift
Давай разберём их: что значат, как ломаются и как чинить.
1. 🖼 LCP — "Когда я увидел главное"
Что это: за сколько секунд показывается главный кусок контента (большая картинка, заголовок, постер видео).
Пример плохого UX:
Открываешь страницу новостей, а вместо фото и заголовка долго смотришь на белый экран. Даже если внизу уже подгрузился футер, пользователю кажется, что страница медленная.
Что ломает LCP:
- Ленивая загрузка (loading="lazy") у главной картинки.
- Большой TTFB (медленный сервер/БД).
- Картинка грузится через JS, а не сразу в HTML.
Как починить:
- Ускорить бэкенд + CDN.
- Добавить preload для картинки
- Не ленизируйте главный баннер.
- Используйте современные форматы (AVIF/WebP).
2. ⚡ INP — "Насколько сайт слушается"
Что это: измеряет задержку между действием (клик, ввод) и моментом, когда UI реально отвечает.
Пример плохого UX:
Ты кликаешь на кнопку "Добавить в корзину", а сайт думает 1–2 секунды, и только потом подсвечивает товар. Даже если заказ оформляется успешно — ощущение тормоза.
Что ломает INP:
- Тяжёлый JS-бандл, грузящий CPU.
- Обработчик события делает слишком много (например, ререндер целого списка).
- Длинные задачи > 50мс на главном потоке.
Как починить:
- Разбивайте работу на части (Web Worker, requestIdleCallback).
- Даём быстрый визуальный отклик, а данные подгружаем асинхронно.
- Слушатели прокрутки/тача → всегда passive: true
- Для длинных списков — content-visibility: auto; в CSS.
3. 📏 CLS — "Ничего не прыгает"
Что это: метрика стабильности интерфейса.
Пример плохого UX:
Ты хотел кликнуть "Оплатить", но страница прыгнула из-за подгрузившейся рекламы, и ты ткнул в "Удалить". Боль.
Что ломает CLS:
- Картинки без размеров.
- Баннеры/видео без зарезервированного места.
- Подключение шрифтов без font-display: swap.
Как починить:
- Всегда задаём размеры/aspect-ratio у изображений
- Резервируем контейнеры под рекламу.
- Используем font-display: swap и fallback-шрифты близкие по метрикам.
- Анимации — только через transform/opacity.
#оптимизации #react #frontend #ux #performance
Когда мы говорим "сайт быстрый" — это не про цифры в Lighthouse, а про то, как человек ощущает взаимодействие.
Google выделил три ключевых метрики, которые напрямую влияют на удобство:
LCP — Largest Contentful Paint
INP (ранее FID) — Interaction to Next Paint
CLS — Cumulative Layout Shift
Давай разберём их: что значат, как ломаются и как чинить.
1. 🖼 LCP — "Когда я увидел главное"
Что это: за сколько секунд показывается главный кусок контента (большая картинка, заголовок, постер видео).
👉 Хорошо: ≤ 2.5с, Плохо: > 4с.
Пример плохого UX:
Открываешь страницу новостей, а вместо фото и заголовка долго смотришь на белый экран. Даже если внизу уже подгрузился футер, пользователю кажется, что страница медленная.
Что ломает LCP:
- Ленивая загрузка (loading="lazy") у главной картинки.
- Большой TTFB (медленный сервер/БД).
- Картинка грузится через JS, а не сразу в HTML.
Как починить:
- Ускорить бэкенд + CDN.
- Добавить preload для картинки
- Не ленизируйте главный баннер.
- Используйте современные форматы (AVIF/WebP).
2. ⚡ INP — "Насколько сайт слушается"
Что это: измеряет задержку между действием (клик, ввод) и моментом, когда UI реально отвечает.
👉 Хорошо: ≤ 200мс, Плохо: > 500мс.
Пример плохого UX:
Ты кликаешь на кнопку "Добавить в корзину", а сайт думает 1–2 секунды, и только потом подсвечивает товар. Даже если заказ оформляется успешно — ощущение тормоза.
Что ломает INP:
- Тяжёлый JS-бандл, грузящий CPU.
- Обработчик события делает слишком много (например, ререндер целого списка).
- Длинные задачи > 50мс на главном потоке.
Как починить:
- Разбивайте работу на части (Web Worker, requestIdleCallback).
- Даём быстрый визуальный отклик, а данные подгружаем асинхронно.
- Слушатели прокрутки/тача → всегда passive: true
- Для длинных списков — content-visibility: auto; в CSS.
3. 📏 CLS — "Ничего не прыгает"
Что это: метрика стабильности интерфейса.
👉 Хорошо: ≤ 0.1, Плохо: > 0.25.
Пример плохого UX:
Ты хотел кликнуть "Оплатить", но страница прыгнула из-за подгрузившейся рекламы, и ты ткнул в "Удалить". Боль.
Что ломает CLS:
- Картинки без размеров.
- Баннеры/видео без зарезервированного места.
- Подключение шрифтов без font-display: swap.
Как починить:
- Всегда задаём размеры/aspect-ratio у изображений
- Резервируем контейнеры под рекламу.
- Используем font-display: swap и fallback-шрифты близкие по метрикам.
- Анимации — только через transform/opacity.
#оптимизации #react #frontend #ux #performance
🔥19👍6❤4💯3