В этом видео мы разберем 5 типичных задач по JavaScript, которые могут встретиться на собеседовании на фронтенд-разработчика!
- Задача на строки, методы и циклы
- Задача на строки, циклы и условия
- Задача на колбек, массивы, прототип и циклы
- Задача на объекты, массивы, графы и цепочки
- Задача на промисы, замыкания и асинхронность
Видео уже на канале!
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #javascript #функции
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤5👍5
Два этапа тех собесов с задачами и вопросами. Вопросы были разнообразные: http, cors, browser и тд.
1. Переписать функцию с помощью async/await
getJson('json/1')
.then(json => {
if(json.key) {
return getJson('json/2')
}
throw new Error('No key')
})
.then(json => {
return json.key2
})
.catch(e => {
console.log(e)
})
2. Написать обертку вокруг нативного fetch, которая будет в случае ошибки пробовать еще retriesCount раз, и только потом упадет с ошибкой
function fetchWithRetries(retriesCount, ...fetchArgs) {
/* */
}
3. Типизировать функцию reduce чтобы она принимала дженерики:
function reduce(array, callback, initial) {
let acc = initial
for(let i = 0; i < array.length; i++) {
acc = callback(acc, array[i], i)
}
return acc
}4. Написать функцию которая сворачивает диапазоны:
compress([1, 4, 3, 2]) // '1-4'
compress([1, 4]) //'1, 4'
5. Реализовать паттерн наблюдатель:
class Store {
/* */
}
const store = new Store()
const firstSubscriber = (data) => console.log('first', data)
const secondSubscriber = (data) => console.log('second', data)
store.subscribe(firstSubscriber)
store.subscribe(secondSubscriber)
store.data = {newKey: 'newString'}
/** CONSOLE
* first {newKey: 'newString'}
* second {newKey: 'newString'}
*/
store.unsubsribe(firstSubscriber)
/** CONSOLE
* second {newKey: 'newString'}
*/
}#interview #frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍7❤5🫡2😁1
В этом видео мы подробно разберем выполнение кода в задачах по Event Loop шаг за шагом. Мы визуализируем процесс на схеме, чтобы показать, что происходит с кодом в момент его выполнения. Разберемся, как работает стек вызовов, что такое микротаски, макротаски и как они взаимодействуют в процессе обработки событий. Это видео поможет вам глубже понять внутреннюю работу Event Loop в JavaScript, что критически важно для собеседований и практических задач.
Видео уже на канале!
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #javascript #eventloop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍4❤1
В этом видео разберем основные принципы ООП — инкапсуляцию, наследование, полиморфизм и абстракцию — и покажем, как они работают в React. Узнаем, что такое Render Props, Component Injection, композиция и декомпозиция, и применим их в функциональных компонентах, Custom Hooks и HOCs.
Видео уже на канале!
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #react #ооп
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2❤1
Выпущено три видео по паттернам и принципам программирования:
Формирование архитектурного мышления важно уже на этапе обучения. Понимание принципов и подходов к разработке помогает писать более чистый, масштабируемый код. Чем раньше вы начнете разбираться в паттернах, тем быстрее сможете применять их в своих проектах и развивать свои навыки.
Сначала может быть сложно увидеть, где и как использовать тот или иной паттерн, но с опытом вы научитесь понимать, когда он действительно необходим, а когда избыточен.
#frontend #react #solid #oop
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
5 продвинутых паттернов в React
Каждый разработчик хочет писать универсальный, чистый код, который не будет повторяться, будет оптимизированным и легкомасштабируемым. В этом видео мы разберем 5 продвинутых паттернов и подходов в React
- Slot Pattern (Component Injection)
- Render Prop…
- Slot Pattern (Component Injection)
- Render Prop…
👍18🔥6🤝4❤1
В этом видео группа ребят, которые хотят устроиться на работу в IT, отвечают на теоретические вопросы от ведущего ментора. Это полноценная тренировка: участники учатся выступать перед аудиторией, формулировать свои мысли, дополнять ответы других и внимательно слушать, как отвечают их коллеги. В этом видео мы поговорим о ключевых технологиях: Browser, JavaScript, TypeScript и React.
Видео уже на канале!
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥6❤4
На позицию Middle Frontend Разработчик
Большая часть собеседования состоит из кодинга в перемешку с теоретическими вопросами.
1. В каком порядке будут выведены логи?
console.log('1')
Promise.resolve('2')
.then((res) => {
console.log(res);
Promise.resolve('3')
.then((res) => {
console.log(res);
setTimeout(() => {console.log('4')}, 0);
})
})
.then((res) => console.log(res))
.finally((res) => {
console.log(res);
setTimeout(() => {console.log('5')}, 0);
});
console.log('6');2. А если изменив первый Promise?
console.log('1')
Promise.reject('2')
.then((res) => {
console.log(res);
Promise.resolve('3')
.then((res) => {
console.log(res);
setTimeout(() => {console.log('4')}, 0);
})
})
.catch((res) => console.log(res))
.then((res) => console.log(res))
.finally((res) => {
console.log(res);
setTimeout(() => {console.log('5')}, 0);
});
console.log('6');3. Что выведет этот код?
function foo() {
const x = 10;
return {
x: 20,
bar: () => {
console.log(this.x)
},
baz: function() {
console.log(this.x)
}
};
}
const obj1 = foo();
obj1.bar(); // ...
obj1.baz(); // ...
const obj2 = foo.call({ x: 30 });
obj2.bar(); // ..
obj2.baz(); // ...4. Напиши и типизируй функцию для определения типа фигуры
type Rectangle = {
width: number ;
height: number ;
};
type Circle = {
radius: number;
};
type AvailableFigure = Rectangle | Circle;
function isCircle(figure) {
...
}
function getCircleArea(figure: Circle): number {
return Math.pow(figure.radius, 2) * Math.PI
}
function getRectangleArea(figure: Rectangle): number {
return figure.width * figure.height
}
function getArea(figure: AvailableFigure): number {
return isCircle(figure)
? getCircleArea(figure)
: getRectangleArea(figure);
}5. Напиши нативный Pick<>
type MyPick<T, U extends keyof T> = {
[key in U]: T[key]
}Все эти задачи мы разбирали в видео:
- 5 типичных задач по TypeScript для Frontend собеседований
- Разбор задач по Event Loop с собеседований
- 5 типичных задач по JavaScript на собеседовании
#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
5 типичных задач по TypeScript для Frontend собеседований
В этом видео мы разберем 5 типичных задач по TypeScript, которые могут встретиться на собеседовании на фронтенд-разработчика!
- Типизация функций
- Дженерики (Generics)
- Extends, keyof, typeof
- Утилитарные типы (Utility Types)
- Маппинг типов (Mapped Types)…
- Типизация функций
- Дженерики (Generics)
- Extends, keyof, typeof
- Утилитарные типы (Utility Types)
- Маппинг типов (Mapped Types)…
👍19🔥8❤3
Изначально запись этого собеседования не планировалась для публикации — она была сделана для детального разбора навыков и поведения Даниила. Для него это был первый опыт мокового собеседования, и, как он сам отметил, волнение и стресс сопровождали его на протяжении всего процесса. Однако такой формат оказался крайне полезным: он позволил объективно оценить слабые места и наметить план работы.
Какие проблемы выявил разбор?
- Ответы давались кратко, без необходимой аргументации и пояснений
- Активное использование слов-паразитов: «наверное», «вроде», «не знаю», что создавало впечатление неуверенности
- Даже правильные ответы звучали неубедительно из-за нерешительной манеры подачи
- Многие вопросы оставались раскрытыми неполно, без углубления в суть
- На базовые вопросы, которые кажутся очевидными, давались неполные или частично верные ответы
Сейчас в планах — интенсивная подготовка в течение двух недель, чтобы проработать все слабые места и пройти собеседование снова. Запись и разбор собеседований — один из самых эффективных способов увидеть себя со стороны и улучшить навыки коммуникации и технические знания.
Видео уже на канале!
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.
#frontend #interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥7❤3
Мне нравится IT за безграничные возможности и открытость. Здесь столько интересных, продвинутых людей — они не боятся пробовать новое, путешествуют, развиваются и постоянно учатся. Кажется, ни в одной другой сфере нет такого драйва!
Я активно участвую в IT-сообществах, хожу на онлайн- и офлайн-мероприятия. Это помогает понимать тренды, расти в доходе и просто становиться лучше. Для меня айтишники — это про современность: они следят за собой, ходят в зал, имеют кучу хобби и не сидят на месте.
Весна — время встреч и путешествий☀️✈️
С приходом тепла хочется больше общаться вживую. В марте я встретился с классными ребятами — гуляли в парке, болтали за кофе и матчей. А уже на этих выходных жду сходку с учениками в Краснодаре: часть из них уже работает, другие в поиске. Обсудим жизнь, карьеру и обучение.
Летом планирую 1,5-2-месячное турне по Центральной России — хочу объехать кучу городов, где живут мои друзья, ученики и участники IT-сообществ, в которых я состою. В Москве, например, ждут около 30 моих учеников — наконец-то увидимся вживую!😅
Где искать крутые IT-мероприятия? 📺
Я постоянно мониторю митапы и хакатоны. В Краснодаре их немало, но в Москве, думаю, просто адское количество ивентов. Чтобы не тратить время на поиски, пользуюсь каналом IT мероприятия России / ITMeeting / IT events. Там всё структурировано: митапы, вебинары, конференции — в одном месте.
Это лучший источник анонсов, всегда советую его ученикам, которые хотят прокачаться в нетворкинге. Подписывайтесь — вдруг встретимся на каком-нибудь митапе? 🤝
Куда еду летом? 🚗
Сейчас составляю маршрут. В каждом городе планирую быть 1-3 дня, а в Москве — 1-2 недели. Пока в списке: Воронеж, Москва, Нижний Новгород, Печоры, Суздаль, Тула, Владимир
Думаю заехать и в Питер на недельку — там тоже много знакомых. Если знаете крутые места или города, которые стоит посетить — пишите в комменты!
А вы часто ходите на митапы?
Какие запомнились больше всего?
Какие города и локации советуете?
Давайте общаться! Может, встретимся на одной из сходок? 🤝
#frontend #events
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤6👍2🤝1
На собеседованиях в VK всегда интересные и достаточно сложные этапы. Дают алгоритмические задачи, глубоко спрашивают про опыт, задают много теоретических вопросов. Также часто встречаются вопросы на рассуждение — например, как бы вы поступили в той или иной ситуации.
Вопросы:
- Что делают preventDefault и stopPropagation?
- Как работают call, apply и bind? В чем их разница?
- В чем разница между arrow function и function declaration?
- Как ускорить алгоритмическую сложность кода?
- Как ускорить работу функции?
- Как удалить или вставить произвольные элементы из массива?
- Как перехватывать JavaScript-ошибки на странице?
- В чем разница между throw 'message' и throw new Error('message')?
- Чем можно заменить position: sticky, если бы его не существовало?
- Для чего нужен Service Worker?
- Как отменить fetch-запрос?
- Как получать данные в реальном времени?
- Зачем нужен Virtual DOM?
- Зачем нужны State Manager и Контекст? Почему нельзя просто использовать переменные?
Ответы на вопросы тут
#frontend #interview
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍24🔥7❤6🤔1
👨💻 План развития Frontend Разработчика (Часть 3)
Ты уже освоил базу: HTML, CSS, JavaScript. Но в реальности никто не пишет проекты на чистом коде — это долго, сложно и неэффективно. Если ты написал что-то на чистом JS без фреймворков, то, грубо говоря, ты создал свой фреймворк. Другим разработчикам будет тяжело разобраться в твоём коде, а поддержка такого проекта превратится в ад.
Решение? Готовые фреймворки и библиотеки. Они дают структуру, правила и экосистему, упрощают разработку и делают код предсказуемым.
Среди популярных вариантов — Vue, Angular, Svelte, Solid, но мы остановимся на React. Почему? Потому что он мощный, гибкий и востребованный на рынке. Давай разберёмся, как его правильно учить.
👩💻 React + Router (< 2 месяцев)
React — это основной инструмент, с которым ты будешь работать. Если ты можешь сделать ToDo App, то это уже похоже на коммерческий код. Чем рабочий код отличается от пет-проектов? Объёмом, структурой, абстракциями, обёртками, разделением на модули.
Когда ты делаешь простое приложение (например, Кинотеатр), ты уже сталкиваешься с реальными кейсами:
- Работа с API
- Отрисовка данных
- Поиск и фильтрация
- Роутинг
- Управление состоянием
Сложность не в написании какого-то "особенного" кода, а в масштабе. Нужно учиться ориентироваться в больших проектах, понимать чужой код и писать поддерживаемый свой.
Для изучения React я предлагаю максимально подготовить свой мозг и пройти 2 курса по React, повторяя за автором и делая конспект:
→ React - Курс по React для Начинающих
https://www.youtube.com/watch?v=is3T0W0ouT0
→ Курс React с нуля
https://youtu.be/am_UiIvha5M?si=7io3qRZITckfH2zA
Далее проходим более подробный курс с дотошным объяснением базы от Димыча:
→ Todolist React JS
https://www.youtube.com/watch?v=pzs3a-d3kjM
После этого приступаем к практике и делаем приложение новостей с основными фичами фронтенда: Поиск, Фильтрация, Пагинация, Слайдер и т.д. Тут также произойдёт первое знакомство с TypeScript, Redux, Router, FSD:
→ React Новости
https://youtu.be/bD0UXb7kD_k?si=e5Y5Jkiwt_66U5Ug
Далее углубляем свои знания и смотрим, как создают большое приложение Pizza:
→ React Pizza v2
https://youtu.be/_UywBskWJ7Q?si=WN2kX8Eck9BW_OD3
Ещё больше практики, чтобы уже тошнило, а мозг окончательно привык к React:
→ Разработай 6 проектов на ReactJS
https://youtu.be/eS0GL73tkmw?si=2G36Y4n-bYI4hnT1
Изучаем базу роутинга и применяем сразу на практике
→ React Router 6
https://youtu.be/0auS9DNTmzE?si=GGuidPN1NpfvVAiw
🖥 TypeScript (≤10 дней)
На самом деле ТС очень сложный. Даже опытные разработчики не умеют решать сложные задачи. Проходим 2 курса в YouTube:
→ Полный курс TypeScript
https://www.youtube.com/watch?v=V7hBejCH1HI
→ TypeScript ФУНДАМЕНТАЛЬНЫЙ КУРС
https://youtu.be/LWtHl__oEWc?si=E3MJHqHHMM68NblJ
Если за 10 дней не освоили базис — всё равно идём дальше. Остальное натренируется в проектах. Сложные темы: дженерики, утилити-типы, защитники типов, маппинг — вы не поймёте их, пока не начнёте практиковаться в полном стеке. Нам нужна база, которая покрывает 80% рабочей нагрузки.
👩💻 Redux + RTK (3-4 недели)
Тут так же как и в TypeScript. Redux имеет кучу инструментов. Но для того чтобы нам понять его - нужна практика. У многи новичков проблема с ним. Что нам нужно уметь: создавать слайсы, использовать данные в компонентах, использовать диспатч, делать запросы на сервер с санками или rtk query. Это база, которая уже позволит вам делать приложение. остальное изучаем уже на практике всего стека.
→ Полный курс Redux
https://www.youtube.com/watch?v=gPmYTqGPDWA
→ Redux Toolkit для управления
https://www.youtube.com/watch?v=C0fBnil_Im4
То же самое и с Redux. Хотя в нём много инструментов, главное — начать практиковаться. У многих новичков возникают сложности. Базовые навыки, которые нужно освоить: Создание слайсов, Использование данных в компонентах, Работа с диспатчем, Запросы к серверу (санки или RTK Query)
Этого достаточно для создания рабочих приложений. Остальное освоится в процессе работы с полным стеком.
#redux #roadmap #frontend #react #typescript
Ты уже освоил базу: HTML, CSS, JavaScript. Но в реальности никто не пишет проекты на чистом коде — это долго, сложно и неэффективно. Если ты написал что-то на чистом JS без фреймворков, то, грубо говоря, ты создал свой фреймворк. Другим разработчикам будет тяжело разобраться в твоём коде, а поддержка такого проекта превратится в ад.
Решение? Готовые фреймворки и библиотеки. Они дают структуру, правила и экосистему, упрощают разработку и делают код предсказуемым.
Среди популярных вариантов — Vue, Angular, Svelte, Solid, но мы остановимся на React. Почему? Потому что он мощный, гибкий и востребованный на рынке. Давай разберёмся, как его правильно учить.
React — это основной инструмент, с которым ты будешь работать. Если ты можешь сделать ToDo App, то это уже похоже на коммерческий код. Чем рабочий код отличается от пет-проектов? Объёмом, структурой, абстракциями, обёртками, разделением на модули.
Когда ты делаешь простое приложение (например, Кинотеатр), ты уже сталкиваешься с реальными кейсами:
- Работа с API
- Отрисовка данных
- Поиск и фильтрация
- Роутинг
- Управление состоянием
Сложность не в написании какого-то "особенного" кода, а в масштабе. Нужно учиться ориентироваться в больших проектах, понимать чужой код и писать поддерживаемый свой.
Для изучения React я предлагаю максимально подготовить свой мозг и пройти 2 курса по React, повторяя за автором и делая конспект:
→ React - Курс по React для Начинающих
https://www.youtube.com/watch?v=is3T0W0ouT0
→ Курс React с нуля
https://youtu.be/am_UiIvha5M?si=7io3qRZITckfH2zA
Далее проходим более подробный курс с дотошным объяснением базы от Димыча:
→ Todolist React JS
https://www.youtube.com/watch?v=pzs3a-d3kjM
После этого приступаем к практике и делаем приложение новостей с основными фичами фронтенда: Поиск, Фильтрация, Пагинация, Слайдер и т.д. Тут также произойдёт первое знакомство с TypeScript, Redux, Router, FSD:
→ React Новости
https://youtu.be/bD0UXb7kD_k?si=e5Y5Jkiwt_66U5Ug
Далее углубляем свои знания и смотрим, как создают большое приложение Pizza:
→ React Pizza v2
https://youtu.be/_UywBskWJ7Q?si=WN2kX8Eck9BW_OD3
Ещё больше практики, чтобы уже тошнило, а мозг окончательно привык к React:
→ Разработай 6 проектов на ReactJS
https://youtu.be/eS0GL73tkmw?si=2G36Y4n-bYI4hnT1
Изучаем базу роутинга и применяем сразу на практике
→ React Router 6
https://youtu.be/0auS9DNTmzE?si=GGuidPN1NpfvVAiw
На самом деле ТС очень сложный. Даже опытные разработчики не умеют решать сложные задачи. Проходим 2 курса в YouTube:
→ Полный курс TypeScript
https://www.youtube.com/watch?v=V7hBejCH1HI
→ TypeScript ФУНДАМЕНТАЛЬНЫЙ КУРС
https://youtu.be/LWtHl__oEWc?si=E3MJHqHHMM68NblJ
Если за 10 дней не освоили базис — всё равно идём дальше. Остальное натренируется в проектах. Сложные темы: дженерики, утилити-типы, защитники типов, маппинг — вы не поймёте их, пока не начнёте практиковаться в полном стеке. Нам нужна база, которая покрывает 80% рабочей нагрузки.
Тут так же как и в TypeScript. Redux имеет кучу инструментов. Но для того чтобы нам понять его - нужна практика. У многи новичков проблема с ним. Что нам нужно уметь: создавать слайсы, использовать данные в компонентах, использовать диспатч, делать запросы на сервер с санками или rtk query. Это база, которая уже позволит вам делать приложение. остальное изучаем уже на практике всего стека.
→ Полный курс Redux
https://www.youtube.com/watch?v=gPmYTqGPDWA
→ Redux Toolkit для управления
https://www.youtube.com/watch?v=C0fBnil_Im4
То же самое и с Redux. Хотя в нём много инструментов, главное — начать практиковаться. У многих новичков возникают сложности. Базовые навыки, которые нужно освоить: Создание слайсов, Использование данных в компонентах, Работа с диспатчем, Запросы к серверу (санки или RTK Query)
Этого достаточно для создания рабочих приложений. Остальное освоится в процессе работы с полным стеком.
#redux #roadmap #frontend #react #typescript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥10❤8
👨💻 План развития Frontend Разработчика (Часть 4)
Когда мы изучили полный стек: React, Router, Redux, TypeScript - начинаем очень много практиковаться. Набивать руку и развивать мышление.
Можно смотреть, как делают большие приложения (рекомендуется смотреть в Яндекс.Браузере с переводом):
https://youtu.be/0mdjgQdQF1k
https://youtu.be/fq7k_gVV5x8
https://youtu.be/xZ1ba-RLrjo
https://youtu.be/-7K_0NRLCu4
https://youtu.be/JKuofETX0GM
Мы запоминаем, чем руководствуется автор, как он разбивает на части приложение, какие компоненты делает. Чем больше мы практикуемся, тем лучше. Но самое главное как можно быстрее начать делать проекты самостоятельно.
Как выбрать проект:
- Не берите готовые идеи из YouTube
- Не копипастите код без понимания
- Делайте всё самостоятельно
Примеры идей:
- Приложение магазин с товарами
- Аналитика футбола с API футболистов
- Приложение с картой для просмотра самолётов
Где брать ресурсы:
- Публичные API (найдите в браузере: "публичное API самолётов/футболистов" и т.д.)
- Бесплатные дизайны в Figma (или создайте простой прототип)
Главное, чтобы вам было интересно и был азарт!
Это репозиторий YeaHub. Здесь используется куча инструментов, много страниц — всё грамотно настроено. Мои ученики тут проходят финальную практику перед выходом на рынок. Это даёт мощный буст: их обучение чётко делится на "до" и "после".
Репа специально открыта — любой новичок может заглянуть в большой продакшн-проект. Когда я сам учился, мне очень не хватало такого примера.
https://github.com/YeaHubTeam/yeahub-platform
После того, как вы уже можете разрабатывать приложения в полном стеке, можно углублять знания
→ Архитектура Frontend с Нуля до Продакшена. Docker, Webpack, CI/CD, React, Deploy
https://www.youtube.com/watch?v=GJe0-oPbiqw
→ Деплой Frontend приложения.
https://youtu.be/8OHe6chCWTE?si=JQpY1Bki7Cj6GiZC
→ Feature-Sliced Design
https://www.youtube.com/watch?v=O4SDx-aZY5U
Формирование архитектурного мышления важно уже на этапе обучения. Понимание принципов и подходов к разработке помогает писать более чистый, масштабируемый код. Чем раньше вы начнете разбираться в паттернах, тем быстрее сможете применять их в своих проектах и развивать свои навыки.
📹 5 продвинутых паттернов в React – изучаем ключевые подходы
📹 Принципы SOLID в React – учимся создавать переиспользуемые компоненты, используя SOLID-принципы
📹 Принципы ООП в React – закрепляем понимание объектно-ориентированного программирования
С самого начала параллельно с изучением технологий готовься к собеседованиям. Каждый раз после освоения новой темы закрепляй теорию — проходи вопросы в тренажере🚀 YeaHub.
#курс #frontend #react
Когда мы изучили полный стек: React, Router, Redux, TypeScript - начинаем очень много практиковаться. Набивать руку и развивать мышление.
Можно смотреть, как делают большие приложения (рекомендуется смотреть в Яндекс.Браузере с переводом):
https://youtu.be/0mdjgQdQF1k
https://youtu.be/fq7k_gVV5x8
https://youtu.be/xZ1ba-RLrjo
https://youtu.be/-7K_0NRLCu4
https://youtu.be/JKuofETX0GM
Мы запоминаем, чем руководствуется автор, как он разбивает на части приложение, какие компоненты делает. Чем больше мы практикуемся, тем лучше. Но самое главное как можно быстрее начать делать проекты самостоятельно.
Как выбрать проект:
- Не берите готовые идеи из YouTube
- Не копипастите код без понимания
- Делайте всё самостоятельно
Примеры идей:
- Приложение магазин с товарами
- Аналитика футбола с API футболистов
- Приложение с картой для просмотра самолётов
Где брать ресурсы:
- Публичные API (найдите в браузере: "публичное API самолётов/футболистов" и т.д.)
- Бесплатные дизайны в Figma (или создайте простой прототип)
Главное, чтобы вам было интересно и был азарт!
Это репозиторий YeaHub. Здесь используется куча инструментов, много страниц — всё грамотно настроено. Мои ученики тут проходят финальную практику перед выходом на рынок. Это даёт мощный буст: их обучение чётко делится на "до" и "после".
Репа специально открыта — любой новичок может заглянуть в большой продакшн-проект. Когда я сам учился, мне очень не хватало такого примера.
https://github.com/YeaHubTeam/yeahub-platform
После того, как вы уже можете разрабатывать приложения в полном стеке, можно углублять знания
→ Архитектура Frontend с Нуля до Продакшена. Docker, Webpack, CI/CD, React, Deploy
https://www.youtube.com/watch?v=GJe0-oPbiqw
→ Деплой Frontend приложения.
https://youtu.be/8OHe6chCWTE?si=JQpY1Bki7Cj6GiZC
→ Feature-Sliced Design
https://www.youtube.com/watch?v=O4SDx-aZY5U
Формирование архитектурного мышления важно уже на этапе обучения. Понимание принципов и подходов к разработке помогает писать более чистый, масштабируемый код. Чем раньше вы начнете разбираться в паттернах, тем быстрее сможете применять их в своих проектах и развивать свои навыки.
С самого начала параллельно с изучением технологий готовься к собеседованиям. Каждый раз после освоения новой темы закрепляй теорию — проходи вопросы в тренажере
#курс #frontend #react
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥7🤝3❤1
👨💻 План развития Frontend Разработчика (Часть 5)
Раньше, чтобы устроиться разработчиком, хватало умения писать код. Сейчас всё сложнее. Даже если ты уверенно работаешь с React или TypeScript, этого мало. Тебе придётся освоить целый пласт навыков, никак не связанных с программированием:
- Как составить резюме, которое заметят?
- Как пройти скрининг и собеседование?
- Где искать вакансии, которые не публикуют на HeadHunter?
- Как общаться с HR и не провалить службу безопасности?
Каждая мелочь — это +1% к твоим шансам. А в нынешней конкуренции даже один процент может решить всё.
Справедливо ли, что вместо углубления в технологии приходится месяц учить «правила игры»? Нет. Но так работает естественный отбор. Многие не выдерживают этого давления и сходят с дистанции.
💡 Какие у тебя варианты?
1. Стажировки и джун-позиции
Подаваться на все стажировки, проходить собеседования, конкурировать с тысячами таких же новичков. Компании часто хотят, чтобы джун за 40к работал как мидл. Если получится — отлично. Но шансы невелики.
2. Фриланс
Можно искать заказы, брать простые проекты, получать первые деньги. Но тут свои сложности:
- Проекты чаще всего типовые, без роста скиллов.
- Заказы могут пропадать на месяцы.
- Первого клиента найти крайне сложно.
3. Стартап за печеньки
Сейчас активно развивается множество новых проектов, и многим начинающим стартаперам нужны недорогие разработчики для их реализации. Это ситуация Win-Win: вы получаете хоть какие-то деньги, а стартап — разработчиков.
Отличный старт для начала карьеры! Вам сразу дадут серьёзные задачи, а не стажёрскую рутину.
4. Приукрашивание опыта
Если ты серьезно подходил к обучению и делал пет-проекты, почему бы не подать их как коммерческий опыт? Делал приложение с рецептами? Можно сказать, что разрабатывал систему для кондитерской сети. Писал бота для друзей? Заявишь, что делал MVP для стартапа.
Главное — не перегибать и быть готовым к вопросам.
5. Накрутка опыта (хардкор-вариант)
Звучит страшно, но давай начистоту: даже мидлы с 3–4 годами опыта сейчас не всегда проходят скрининг. Что уж говорить о новичках?
Накрутка — это сложно. Ты должен:
- Продумать историю «прошлых проектов» до мелочей.
- Разбираться в архитектуре, инфраструктуре, процессах.
- Быть готовым к боевым задачам.
Это риск, но для некоторых — единственный шанс пройти отбор.
Выбор всегда за тобой, но помни: в условиях жесткой конкуренции иногда приходится действовать по неочевидным правилам. Однако важно держать уровень: если не умеешь разрабатывать, а лишь поверхностно крутишь опыт — это плохо. То же самое, если не разбираешься в рабочих процессах.
После прохождения курсов удели пару месяцев на проекты — большие, с API, множеством страниц, фичами и библиотеками. Углубляйся в архитектуру и инфраструктуру, осваивай настройку сборщиков и других инструментов. Научись писать тесты и деплоить приложения. Подойди к этому серьезно. Просто крутить код — слабый вариант, нужно еще и соответствовать.
Какой бы путь вы ни выбрали — стажировки, фриланс или коммерческий опыт — важно понимать, как устроена работа в IT:
→ ВНУТРЯНКА АЙТИ: Как здесь все халтурят на самом деле
https://youtu.be/zCamBnDSbxs?si=OlJnsSeKkpIFW883
→ Что такое Git flow и когда использовать?
https://youtu.be/umiT0yIsSrc?si=TCIyckvOeDQMWO2N
→ Как улучшить резюме: Проекты, Процессы и Достижения
https://youtu.be/WemHjWFjh3o?si=yL5oNFeS_lYTHpl1
🔍 В моём закрытом чате есть много записей митапов для учеников. Попробуй 3 дня бесплатно или подпишись за 500₽/мес:
→ Типы компаний
https://t.me/c/2189438448/3/3765
→ Процессы Канбан и Скрам
https://t.me/c/2189438448/3/4146
→ Деплой, Процессы, Скрам, Docker, CI/CD на примере YeaHub
https://t.me/c/2189438448/3/4535
→ Рабочие процессы. Workflow, Gitflow. Взаимодействие внутри команды разработки
https://t.me/c/2189438448/3/4174
#frontend #работа #трудоустройство
Раньше, чтобы устроиться разработчиком, хватало умения писать код. Сейчас всё сложнее. Даже если ты уверенно работаешь с React или TypeScript, этого мало. Тебе придётся освоить целый пласт навыков, никак не связанных с программированием:
- Как составить резюме, которое заметят?
- Как пройти скрининг и собеседование?
- Где искать вакансии, которые не публикуют на HeadHunter?
- Как общаться с HR и не провалить службу безопасности?
Каждая мелочь — это +1% к твоим шансам. А в нынешней конкуренции даже один процент может решить всё.
Справедливо ли, что вместо углубления в технологии приходится месяц учить «правила игры»? Нет. Но так работает естественный отбор. Многие не выдерживают этого давления и сходят с дистанции.
1. Стажировки и джун-позиции
Подаваться на все стажировки, проходить собеседования, конкурировать с тысячами таких же новичков. Компании часто хотят, чтобы джун за 40к работал как мидл. Если получится — отлично. Но шансы невелики.
2. Фриланс
Можно искать заказы, брать простые проекты, получать первые деньги. Но тут свои сложности:
- Проекты чаще всего типовые, без роста скиллов.
- Заказы могут пропадать на месяцы.
- Первого клиента найти крайне сложно.
3. Стартап за печеньки
Сейчас активно развивается множество новых проектов, и многим начинающим стартаперам нужны недорогие разработчики для их реализации. Это ситуация Win-Win: вы получаете хоть какие-то деньги, а стартап — разработчиков.
Отличный старт для начала карьеры! Вам сразу дадут серьёзные задачи, а не стажёрскую рутину.
4. Приукрашивание опыта
Если ты серьезно подходил к обучению и делал пет-проекты, почему бы не подать их как коммерческий опыт? Делал приложение с рецептами? Можно сказать, что разрабатывал систему для кондитерской сети. Писал бота для друзей? Заявишь, что делал MVP для стартапа.
Главное — не перегибать и быть готовым к вопросам.
5. Накрутка опыта (хардкор-вариант)
Звучит страшно, но давай начистоту: даже мидлы с 3–4 годами опыта сейчас не всегда проходят скрининг. Что уж говорить о новичках?
Накрутка — это сложно. Ты должен:
- Продумать историю «прошлых проектов» до мелочей.
- Разбираться в архитектуре, инфраструктуре, процессах.
- Быть готовым к боевым задачам.
Это риск, но для некоторых — единственный шанс пройти отбор.
Выбор всегда за тобой, но помни: в условиях жесткой конкуренции иногда приходится действовать по неочевидным правилам. Однако важно держать уровень: если не умеешь разрабатывать, а лишь поверхностно крутишь опыт — это плохо. То же самое, если не разбираешься в рабочих процессах.
После прохождения курсов удели пару месяцев на проекты — большие, с API, множеством страниц, фичами и библиотеками. Углубляйся в архитектуру и инфраструктуру, осваивай настройку сборщиков и других инструментов. Научись писать тесты и деплоить приложения. Подойди к этому серьезно. Просто крутить код — слабый вариант, нужно еще и соответствовать.
Какой бы путь вы ни выбрали — стажировки, фриланс или коммерческий опыт — важно понимать, как устроена работа в IT:
→ ВНУТРЯНКА АЙТИ: Как здесь все халтурят на самом деле
https://youtu.be/zCamBnDSbxs?si=OlJnsSeKkpIFW883
→ Что такое Git flow и когда использовать?
https://youtu.be/umiT0yIsSrc?si=TCIyckvOeDQMWO2N
→ Как улучшить резюме: Проекты, Процессы и Достижения
https://youtu.be/WemHjWFjh3o?si=yL5oNFeS_lYTHpl1
→ Типы компаний
https://t.me/c/2189438448/3/3765
→ Процессы Канбан и Скрам
https://t.me/c/2189438448/3/4146
→ Деплой, Процессы, Скрам, Docker, CI/CD на примере YeaHub
https://t.me/c/2189438448/3/4535
→ Рабочие процессы. Workflow, Gitflow. Взаимодействие внутри команды разработки
https://t.me/c/2189438448/3/4174
#frontend #работа #трудоустройство
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤2💯1
🔧 Как оптимизировать фронтенд?
Во-первых, знание способов оптимизации фронтенд-приложений полезно абсолютно всем разработчикам: это помогает писать более качественный, эффективный и поддерживаемый код.
Во-вторых, тема оптимизаций регулярно всплывает на собеседованиях. Когда вас спрашивают, важно не просто перечислить техники, а уметь рассуждать, приводить примеры и объяснять, почему именно этот подход работает. Нужно чувствовать себя в этом вопросе как рыба в воде.
Чтобы в этом разобраться, мы будем делить оптимизации на разные категории. Это позволит системно подойти к теме, а не сваливать все приёмы в одну кучу:
📌 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👍41🔥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❤1
Замыкания в 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
📚 Кэширование без меры: когда оптимизация становится проблемой
Кэширование и мемоизация звучат как бесплатная оптимизация. Мы думаем: «Раз вычисление можно не делать повторно, значит всегда лучше закэшировать». Но это опасное заблуждение. Если кэшировать без меры, приложение начинает засорять память и работать хуже, а не лучше.
🚨 Как мы засоряем память
Представьте, что вы храните в памяти результаты всех вычислений. Старые данные не удаляются, новые постоянно добавляются. В итоге кэш разрастается до сотен мегабайт. На слабых устройствах это выливается во фризы или даже падение.
Был реальный кейс: разработчик решил «оптимизировать» 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
Redux часто вводит новичков в ступор: куча обёрток, абстракций, бойлерплейта, бесконечные конфиги… Нужно держать в голове, что где-то «в одном месте лежат данные», а использовать их можно совсем в другом. Всё это может сбивать с толку.
Разберёмся, как подойти к изучению Redux так, чтобы не перегореть и быстро прийти к результату.
🤔 1. Нужно ли знать старый Redux?
Сегодня знать классический Redux (до RTK) — не обязательно. Но понимать, как он устроен, всё же полезно для кругозора.
Лучше начать с Redux Toolkit (RTK) — это современный, удобный способ работы с Redux.
👉 План простой:
- Изучи RTK: пройди короткий курс, сделай мини-проект.
- Потом, для интереса, быстро глянь, как всё было «по-старинке» — чтобы понимать эволюцию и причины появления RTK.
Продвинутый Redux. Redux Toolkit, RTK query, TypeScript.
Полный курс Redux Toolkit + RTK Query для начинающих
📚 2. Освой базу (и не перегружайся)
На старте тебе нужно знать только основу Redux Toolkit:
- как создавать slice,
- как конфигурировать store,
- как использовать dispatch и useSelector,
- и как подключить всё через Provider.
Этого достаточно, чтобы начать. Не лезь сразу в thunk-и, middleware или сложные конфиги — это придёт позже. Главное — понять саму идею:
где-то создаются данные → ты можешь их менять → компонент реагирует и перерисовывается.
👨🏻💻 3. Практикуйся на реальных мини-проектах
Следующий шаг — практика. Смотри практические видео или мини-курсы вроде «Админка за 6 часов» — где используется React, RTK и другие знакомые технологии. А так же можно прогнать много небольших проектов, чтобы запомнить воркфлоу.
🔁 Идея проста:
- Делай много маленьких проектов, а не один гигантский.
- Лучше 10 разных по часу, чем один на 10 часов.
Так ты начнёшь видеть закономерности, узнавать шаблоны и быстрее адаптироваться к разным кейсам.
Build and Deploy a React Cryptocurrency App and Master Redux Toolkit
Когда чувствуешь уверенность — делай свой проект:
- подключи API,
- добавь дизайн,
- используй привычный шаблон, но адаптируй под себя.
Не стремись помнить всё наизусть — важно понимать принцип, а не синтаксис.
Добавляй новые сущности, слайсы, компоненты — играйся с кодом, расширяй границы.
😎 5. Главное — практика
На полноценное освоение основ Redux Toolkit достаточно около 2 недель.
Всё остальное время — практика и интеграция с другими инструментами.
Учись не «изолированно», а в реальных проектах, где Redux работает вместе с React, API, роутингом и UI-библиотеками.
Redux + Redux Toolkit | Продвинутый полный курс
#redux #frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤8👍5🤝2
🔥 10 способов оптимизировать React-бандл
Когда React-приложение растёт, размер бандла становится критичным. От него напрямую зависят скорость загрузки, время до первого рендера и даже SEO.
Вот проверенные приёмы, которые реально уменьшают размер бандла и ускоряют загрузку 👇
1️⃣ Tree shaking
Webpack умеет автоматически выкидывать неиспользуемый код.
Главное — использовать import/export, а не require().
Например, если ты импортировал только map из lodash, в бандл не попадёт весь lodash, а только нужная часть.
Это работает в продакшн-сборке (mode: 'production') и помогает избавиться от «мёртвых» зависимостей.
2️⃣ Code splitting / Lazy loading
Разделяем приложение на отдельные чанки, чтобы не грузить всё сразу.
В React это делается просто:
Компонент подгружается только при переходе на нужную страницу — это ускоряет загрузку первого экрана и экономит трафик пользователю.
3️⃣ Dynamic imports
Похожи на lazy loading, но гибче: модуль можно подгрузить в любой момент, например, при клике или определённом событии.
Так можно динамически подгружать тяжёлые утилиты, графики или редакторы, которые нужны не всем пользователям.
4️⃣ Vendor splitting
Отделяем сторонние библиотеки (React, Lodash, Axios и т.д.) от остального кода.
Они попадают в отдельный чанк (vendors.js), и браузер может кешировать его между обновлениями приложения.
При следующем релизе пользователь скачает только изменившийся код, а не всё приложение заново.
5️⃣ Bundle analyzer
Инструмент webpack-bundle-analyzer показывает визуально, какие файлы занимают больше всего места в бандле.
Это помогает быстро понять, стоит ли заменить тяжёлую библиотеку на более лёгкий аналог или удалить неиспользуемые импорты.
Пример: часто moment.js можно заменить на dayjs, и размер падает на десятки килобайт.
6️⃣ Compression (gzip / brotli)
После сборки важно сжимать файлы перед отправкой пользователю.
На сервере (или CDN) включается gzip или brotli, и вес бандла уменьшается в 2–3 раза.
Например, 600 KB превращаются в 200 KB — и страница загружается ощутимо быстрее.
7️⃣ Minification
Минификация удаляет пробелы, переносы строк, комментарии и переименовывает переменные.
Инструменты вроде Terser или esbuild делают это автоматически при продакшн-сборке.
В итоге код становится компактнее и быстрее загружается, но функционально не меняется.
8️⃣ Dead code elimination
Webpack и Babel умеют находить и удалять код, который никогда не выполнится.
Например:
В продакшн-версии эти строки просто не попадут в итоговый бандл.
Это избавляет от лишнего мусора и ускоряет работу.
9️⃣ Asset optimization
Изображения, шрифты и SVG тоже влияют на размер бандла.
Используй оптимизацию — например, image-webpack-loader или svgo.
Преобразуй картинки в современные форматы (.webp, .avif), чтобы они весили меньше.
Иногда просто переконвертация PNG → WebP уменьшает размер в 5–10 раз.
🔟 Prefetch / Preload
Позволяет браузеру заранее подгружать чанки, которые скоро понадобятся.
Например, пользователь на главной странице, но браузер уже «знает», что он, скорее всего, откроет настройки — и подгружает их заранее.
Это улучшает перформанс без лишней нагрузки на сеть.
#react #frontend #webpack #vite #оптимизация #performance
#оптимизации #react #frontend #webpack
Когда React-приложение растёт, размер бандла становится критичным. От него напрямую зависят скорость загрузки, время до первого рендера и даже SEO.
Вот проверенные приёмы, которые реально уменьшают размер бандла и ускоряют загрузку 👇
1️⃣ Tree shaking
Webpack умеет автоматически выкидывать неиспользуемый код.
Главное — использовать import/export, а не require().
Например, если ты импортировал только map из lodash, в бандл не попадёт весь lodash, а только нужная часть.
Это работает в продакшн-сборке (mode: 'production') и помогает избавиться от «мёртвых» зависимостей.
2️⃣ Code splitting / Lazy loading
Разделяем приложение на отдельные чанки, чтобы не грузить всё сразу.
В React это делается просто:
const Settings = React.lazy(() => import('./Settings'));Компонент подгружается только при переходе на нужную страницу — это ускоряет загрузку первого экрана и экономит трафик пользователю.
3️⃣ Dynamic imports
Похожи на lazy loading, но гибче: модуль можно подгрузить в любой момент, например, при клике или определённом событии.
button.onclick = async () => {
const { run } = await import('./heavyModule');
run();
};Так можно динамически подгружать тяжёлые утилиты, графики или редакторы, которые нужны не всем пользователям.
4️⃣ Vendor splitting
Отделяем сторонние библиотеки (React, Lodash, Axios и т.д.) от остального кода.
Они попадают в отдельный чанк (vendors.js), и браузер может кешировать его между обновлениями приложения.
При следующем релизе пользователь скачает только изменившийся код, а не всё приложение заново.
5️⃣ Bundle analyzer
Инструмент webpack-bundle-analyzer показывает визуально, какие файлы занимают больше всего места в бандле.
Это помогает быстро понять, стоит ли заменить тяжёлую библиотеку на более лёгкий аналог или удалить неиспользуемые импорты.
Пример: часто moment.js можно заменить на dayjs, и размер падает на десятки килобайт.
6️⃣ Compression (gzip / brotli)
После сборки важно сжимать файлы перед отправкой пользователю.
На сервере (или CDN) включается gzip или brotli, и вес бандла уменьшается в 2–3 раза.
Например, 600 KB превращаются в 200 KB — и страница загружается ощутимо быстрее.
7️⃣ Minification
Минификация удаляет пробелы, переносы строк, комментарии и переименовывает переменные.
Инструменты вроде Terser или esbuild делают это автоматически при продакшн-сборке.
В итоге код становится компактнее и быстрее загружается, но функционально не меняется.
8️⃣ Dead code elimination
Webpack и Babel умеют находить и удалять код, который никогда не выполнится.
Например:
if (process.env.NODE_ENV !== 'production') {
console.log('debug info');
}В продакшн-версии эти строки просто не попадут в итоговый бандл.
Это избавляет от лишнего мусора и ускоряет работу.
9️⃣ Asset optimization
Изображения, шрифты и SVG тоже влияют на размер бандла.
Используй оптимизацию — например, image-webpack-loader или svgo.
Преобразуй картинки в современные форматы (.webp, .avif), чтобы они весили меньше.
Иногда просто переконвертация PNG → WebP уменьшает размер в 5–10 раз.
🔟 Prefetch / Preload
Позволяет браузеру заранее подгружать чанки, которые скоро понадобятся.
<link rel="prefetch" href="settings.chunk.js">
Например, пользователь на главной странице, но браузер уже «знает», что он, скорее всего, откроет настройки — и подгружает их заранее.
Это улучшает перформанс без лишней нагрузки на сеть.
⚡️ Даже простое применение этих приёмов может сократить размер бандла в 2–3 раза и сделать приложение визуально «быстрее» для пользователя.
А если подключить анализатор и немного поработать с динамическими импортами — результат будет заметен сразу.
#react #frontend #webpack #vite #оптимизация #performance
#оптимизации #react #frontend #webpack
❤13🔥10👍7🤝2