
- Главная
- Каталог
- Интернет технологии
- Frontender | CMD
Статистика канала
for и методов .indexOf().
**Секрет в объекте Set:
Это специальная коллекция в JavaScript, которая по определению может содержать только уникальные значения. Если попытаться добавить в неё дубликат, она его просто проигнорирует.
Как это использовать:**
const numbers = [1, 2, 2, 3, 4, 4, 4, 5];
// 1. Создаем Set из массива (он уберет дубли)
// 2. Распыляем его обратно в массив через [...]
const uniqueNumbers = [...new Set(numbers)];
console.log(uniqueNumbers); // [1, 2, 3, 4, 5]
{}
Почему это круто:
— Скорость: Поиск и удаление дубликатов через Set работает гораздо быстрее, чем через .filter() или .reduce(), особенно на больших массивах.
— Читаемость: Код понятен любому разработчику с первого взгляда.
— Универсальность: Работает не только с числами, но и со строками.
Нюанс:
Этот метод идеально работает с примитивами (числа, строки). Если у вас массив объектов, Set не поймет, что {id: 1} и {id: 1} — это одно и то же (так как это разные ссылки в памяти). Для объектов всё же придется использовать .filter() или Map.padding-top: 56.25%. Это выглядело странно и путало новичков.
Теперь в CSS есть нативное свойство aspect-ratio, которое делает код чистым и понятным.
Как это работает:
Вы просто указываете желаемое соотношение сторон, и браузер сам высчитывает высоту элемента на основе его ширины.
.video-card {
width: 100%;
aspect-ratio: 16 / 9;
background: #000;
}
.avatar {
width: 100px;
aspect-ratio: 1 / 1; /* Всегда идеальный квадрат */
object-fit: cover;
}
{}
Почему это важно для производительности:
Когда вы указываете aspect-ratio, браузер заранее знает, сколько места на странице займет элемент, еще до того, как загрузится само изображение или видео.
Это предотвращает Layout Shift (резкие прыжки контента при загрузке), что напрямую улучшает ваш показатель CLS в Google PageSpeed.
Где применять:
— Карточки товаров: Чтобы все изображения были одной высоты.
— Видеоплееры: Чтобы фрейм не «схлопывался» до загрузки контента.
— Скелетоны (заглушки): Чтобы прелоадер точно повторял форму будущего контента.AbortController.
Как это работает:
Мы создаем контроллер, передаем его «сигнал» в запрос, и в любой момент можем вызвать .abort(), чтобы мгновенно прервать выполнение.
Пример:
let controller;
const fetchData = async () => {
// Если предыдущий запрос еще идет — отменяем его
if (controller) controller.abort();
controller = new AbortController();
try {
const response = await fetch('/api/data', {
signal: controller.signal
});
const data = await response.json();
console.log(data);
} catch (err) {
if (err.name === 'AbortError') {
console.log('Запрос был отменен');
} else {
console.error('Ошибка:', err);
}
}
};
{}
Где это использовать:
— Живой поиск: Отменяем старый запрос при вводе каждого нового символа.
— Смена страниц: Если пользователь ушел с экрана до того, как данные загрузились.
— React/Vue хуки: В useEffect или при размонтировании компонента, чтобы избежать утечек памяти.
Бонус: AbortController — универсальная штука. Его можно использовать не только для fetch, но и для удаления слушателей событий (addEventListener) одной командой!fetchpriority.
3 способа управления приоритетом:
— **high: Говорит браузеру, что этот ресурс критически важен. Идеально для главного изображения на первом экране.
— low: Для контента, который не нужен сразу (например, картинки внизу страницы или тяжелые скрипты аналитики).
— auto: Значение по умолчанию — браузер решает сам.
Пример использования:**
<img src="hero-banner.jpg" fetchpriority="high" alt="Main Banner">
<script src="heavy-ads-script.js" fetchpriority="low"></script>
{}
Почему это важно для Core Web Vitals:
Использование fetchpriority="high" для самого большого элемента на странице (LCP) может сократить время отрисовки на 20-30%. Это напрямую влияет на то, как высоко Google будет ранжировать ваш сайт.
> Важно: Не ставьте high на всё подряд. Если все ресурсы будут «важными», приоритет просто перестанет работать. Используйте это только для 1-2 самых значимых элементов на странице.?. и ?? — это лучший способ писать безопасный код, который не падает при отсутствии данных и при этом не плодит десяток строк с проверками if.
Как это работает на практике:
Представьте, что вы получаете данные пользователя из API, где некоторые поля могут отсутствовать.
До (код-лабиринт):
let theme;
if (user && user.settings && user.settings.theme) {
theme = user.settings.theme;
} else {
theme = 'light';
}
{}
После (одна изящная строка):
const theme = user?.settings?.theme ?? 'light';
{}
Разбор магии:
—В чем ловушка: Не путайтеuser?.settings?.theme— если хотя бы один объект в цепочкеnullилиundefined, выражение сразу вернетundefined, не вызывая ошибку. —?? 'light'— если слева получилосьundefinedилиnull, сработает значение по умолчанию.
?? с ||. Если бы тема была пустой строкой "", то || заменил бы её на light, а ?? оставил бы пустую строку (так как это не null). Пользуйтесь этим, чтобы не терять валидные данные!<div> и <span> для всего подряд, стилизуя их до неузнаваемости. Но использование правильных семантических тегов — это база профессиональной верстки.
Почему это важно:
* Доступность (A11y): Скринридеры для слабовидящих людей понимают структуру страницы только через семантику. Для них <div> с обработчиком клика — это просто текст, а <button> — это действие.
* Поисковики (SEO): Google и Яндекс отдают приоритет контенту внутри тегов <main>, <h1> и <article>, лучше понимая иерархию данных.
* Поддержка кода: Другому разработчику проще прочитать <header>, чем искать <div class="top-navigation-wrapper">.
Заменяем «дивы» на смысл:
* **<header> / <footer>** — шапка и подвал сайта или отдельной секции.
* **<main> — основной уникальный контент страницы (должен быть один).
* <nav> — блок с навигационными ссылками.
* <section> — тематический раздел документа (обычно с заголовком).
* <article> — независимый, самодостаточный блок (пост в блоге, карточка товара).
* <aside> — побочный контент (сайдбар, рекламный баннер).
> Золотое правило:** Перед тем как написать очередной <div>, спроси себя: «Есть ли в HTML тег, который лучше описывает этот контент?». Если это кнопка — используй <button>, если это список — <ul> и <li>.console.log() превращает отладку в бесконечное «раскрывание» вложенных свойств мышкой. Есть способ лучше.
Метод console.table() отрисовывает данные в виде аккуратной интерактивной таблицы прямо в консоли браузера.
Пример:
const users = [
{ id: 1, name: 'Alex', role: 'Admin', status: 'online' },
{ id: 2, name: 'Elena', role: 'Editor', status: 'offline' },
{ id: 3, name: 'Ivan', role: 'User', status: 'online' }
];
// Вместо обычного лога
console.table(users);
{}
Почему это удобно:
* Сортировка: Кликни по заголовку колонки в консоли, и данные отсортируются.
* Выбор колонок: Если свойств слишком много, можно вывести только нужные:
console.table(users, ['name', 'role']);
* Объекты: Метод отлично работает и с одиночными объектами — ключи станут строками, а значения — колонкой.
Лайфхак: Это работает не только в браузере, но и в Node.js. Таблица отрисуется в терминале с помощью символов псевдографики. Попробуй это в следующем дебаге вместо привычного лога!target="_blank", вы открываете огромную дыру в безопасности, о которой новички даже не догадываются. Это называется Tabnapping.
В чем проблема:
Когда пользователь переходит по вашей ссылке на другой сайт, новая вкладка получает доступ к объекту window.opener. Злоумышленник может с помощью JS подменить вашу страницу (оригинальную вкладку) на фишинговую копию, пока пользователь читает статью на втором сайте.
Как это работает:
1. Пользователь жмет на ссылку.
2. Открывается вредоносный сайт.
3. Вредоносный скрипт делает: window.opener.location = 'https://phishing-site.com'.
4. Пользователь возвращается на вашу вкладку и видит форму «Войдите снова», вводит пароль — и готово.
Решение:
Всегда добавляйте атрибут rel:
<a href="https://external-site.com" target="_blank" rel="noopener noreferrer">
Перейти безопасно
</a>
{}
* noopener: Запрещает новой вкладке доступ к window.opener.
* noreferrer: Делает то же самое + скрывает адрес вашего сайта из заголовка Referer (полезно для приватности).
> Хорошие новости: Современные браузеры (Chrome 88+, Safari 12.1+) автоматически добавляют noopener для всех ссылок с target="_blank". Но для поддержки старых браузеров и явной безопасности лучше прописывать это вручную.Отзывы канала
всего 4 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Frontender | CMD — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 2.6K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 6.7, количество отзывов – 4, со средней оценкой 4.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 979.02 ₽, а за 8 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий