

- Главная
- Каталог
- Интернет технологии
- Frontender's notes
Frontender's notes
Ведущий канал о современном фронтенде: статьи, новости и практики.
Аудитория - IT специалисты и те кто хочет ими стать
Канал постоянно привлекает новых подписчиков.
Статистика канала
Полная статистикаchevron_right
— Feature-sliced design (FSD)
В проекте можно использовать подход, при котором структура делится не по типу файлов, а по функциональности. Например, вместо создания папок для компонентов и утилит организуется структура вокруг функциональных блоков. В папке src создаются разделы: entities, features, pages и shared. Каждая «фича», например, авторизация или профили пользователей, изолирована и имеет свой пользовательский интерфейс, бизнес-логику и сервисы. Это облегчает масштабирование проекта и предотвращает поломку старых функций при добавлении новых.
— Domain-first подход
Теперь ты называешь папки не components, hooks, utils, а по именам бизнес-областей: auth/, profile/, dashboard/. Это упрощает понимание контекста и делает код более организованным.
— Index-файлы как интерфейсы
Каждый модуль экспортирует наружу только то, что нужно. Это помогает уменьшить сцепленность между модулями и делает импорты предсказуемыми.
// Ты исключаешь импорт ненужных частей и делаешь структуру кода более читаемой.
// features/login/index.ts
export { LoginForm } from './ui/LoginForm';
export { useLogin } from './model/useLogin';
— Слои зависимостей
Организуй проект так, чтобы зависимости двигались в одном направлении: от UI → Features → Entities → Shared. Никаких цикличных импортов или «вверх по слоям». Архитектура будет выглядеть как дерево зависимостей, а не как хаотичная паутина.
— TypeScript path aliases: Используй алиасы для упрощения импорта, например: @/shared, @/features/auth. — ESLint rules: Настрой правила для контроля правильности импортов между слоями. — Barrel files (index.ts): В каждом модуле используй index.ts для экспортирования публичных интерфейсов. Это поможет сократить количество файлов и сделать структуру более понятной. — Nx / Turborepo: Эти инструменты идеально подходят для крупных монорепозиториев, где нужно поддерживать чистоту и порядок.
@media с условием: если ширина экрана меньше 768px, уменьшаем шрифт. Но проблема в том, что компоненты могут адаптироваться по-разному в зависимости от контекста (сайдбар, карточка, модальное окно), даже при неизменном размере экрана. Media queries реагируют только на размер viewport, а не на размеры родителя. Container Queries позволяют учитывать размеры родительского контейнера, что даёт CSS возможность адаптировать компоненты в зависимости от контекста.
.card {
container-type: inline-size;
}
@container (max-width: 400px) {
.card-title {
font-size: 1rem;
}
}
• Мы объявляем контейнер с помощью свойства container-type. • Пишем условие с @container, чтобы адаптировать элементы внутри контейнера. • Компонент автоматически адаптируется под размеры своего родителя, а не под весь экран. • Теперь компоненты не зависят от глобальных media queries и могут быть использованы в любом месте без дополнительных хаков или специфичных классов. • Можно описывать адаптив прямо в компонентах, как это делают дизайнеры в Figma. Теперь ваш CSS гораздо точнее отражает реальные потребности. • Сокращается использование JS для адаптивных изменений и избавляет от необходимости работать с множеством media queries, что делает код чище.
chrome://chrome-urls и открываем список всех внутренних страниц браузера: от отладочных тулзов до экспериментальных фич. Внутри:
- chrome://flags → скрытые настройки
- chrome://gpu → информация о работе GPU
- chrome://net-export → отладка сети
Intersection Observer API отслеживает видимость элементов, оптимизируя загрузку контента. Он не требует постоянного мониторинга прокрутки или размера окна. Вместо этого, API реагирует только на изменения видимости, активируя логику, например, загрузку изображений или анимаций, когда пользователь достигает нужного места. Это сокращает ненужные рендеры и повышает производительность. Меньше вычислений, меньше данных — это особенно важно на устройствах с низкими характеристиками.
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// Загружаем изображение, когда оно попадает в область видимости
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});
});
const images = document.querySelectorAll('img.lazy');
images.forEach(img => observer.observe(img));
— Предположим, вы хотите отложить загрузку изображений до тех пор, пока они не окажутся в области видимости. — Здесь мы создаём новый IntersectionObserver. — Для каждого изображения с классом .lazy, как только оно появляется в зоне видимости, происходит загрузка изображения. — Весь этот процесс запускается только в нужный момент, что минимизирует ненужные операции.
Основной сценарий использования requestIdleCallback — это выполнение задач, которые не требуют немедленного выполнения, но важно, чтобы они не блокировали основной поток. Например, обновление данных или выполнение фона операций, которые не затрагивают работу интерфейса. Представьте, что нужно загрузить данные с сервера, но при этом не хотите, чтобы это замедляло работу с интерфейсом. В такие моменты requestIdleCallback поможет вам аккуратно выполнить это задание в моменты простоя браузера.
/* Предположим, вы хотите загрузить данные с API в фоновом режиме. Вместо того чтобы инициировать запрос сразу и блокировать основной поток, можно использовать requestIdleCallback: */
function fetchDataInIdleTime() {
requestIdleCallback(() => {
fetch('/some-api')
.then(response => response.json())
.then(data => {
console.log('Data loaded in idle time:', data);
})
.catch(error => console.error('Error loading data:', error));
});
}
fetchDataInIdleTime();
— Мы создаём функцию fetchDataInIdleTime(), которая запускает requestIdleCallback. — Внутри колбэка выполняем асинхронный запрос к серверу. — Запрос будет выполнен в момент, когда браузер освободится от важных задач, таких как рендеринг или обработка событий. — Таким образом, мы делаем загрузку данных менее приоритетной и не нагружаем браузер, пока он не свободен.
:valid и :invalid. Эти классы применяются сразу после загрузки страницы, даже если пользователь ещё не успел взаимодействовать с полем. Это может раздражать из-за некорректного отображения. Рассмотрим, как можно исправить и улучшить ситуацию.
<<!-- Первое поле с логином зелёное (корректно заполнено). Второе поле с паролем красное (пусто и недействительно) -->
<body>
<form class="form">
<div class="form__group">
<label for="name">Введите логин</label>
<input id="name" type="text" value="melnik909" required>
</div>
<div class="form__group">
<label for="password">Введите пароль</label>
<input id="password" type="password" required>
</div>
<button>Войти</button>
</form>
</body>
<style>
input:invalid {
box-shadow: 0 0 10px red;
}
input:valid {
box-shadow: 0 0 10px green;
}
</style>
:user-valid и :user-invalid, которые активируются при взаимодействии пользователя с полем. Стили применяются только после ввода данных. Давайте заменим старые псевдо-классы на новые:
input:user-invalid {
box-shadow: 0 0 10px red;
}
input:user-valid {
box-shadow: 0 0 10px green;
}
Если хочешь разобраться — вот бот: @GuideDAO_hallo_bot Присоединяйтесь к комьюнити со скидкой по промокоду -🔘 Пожизненный доступ к курсам,🔘 Направления — Web3, Solidity, DeFi, AI-агенты,🔘 Спикеры из 1inch, Parity, MixBytes,🔘 Постоянные стримы и лайвкодинг,🔘 Можно делать собственные проекты и искать работу.
FRONT_NOTES
P.S. В Web3 нет магии. Это просто новые API, а с апихами работать мы уже умеем.Отзывы канала
всего 6 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Frontender's notes — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 33.8K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 15.8, количество отзывов – 6, со средней оценкой 4.7.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 13342.64 ₽, а за 72 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий