CodeBase | Frontend
2.03K subscribers
488 photos
224 videos
4 files
795 links
Все самое интересное и полезное у нас 😎

Контакт: @Filgood777 (реклама, сотрудничество)
Download Telegram
👩‍💻 Объект

Кроме примитивных типов в JavaScript существуют и сложные — например, объект.

🗣️ Объект (object) — это набор свойств. Каждое свойство состоит из названия и значения. Название может быть строкой или символом, а значение может быть любым.

➡️ Объекты в JavaScript используются повсюду, особенно для хранения данных. Для уверенной работы с объектами необходимо знать, как создавать объект, как его изменять и как читать значения свойств.

Пустой объект без свойств можно создать парой фигурных скобок:

const cat = {}


✔️ Когда нужно создать объект со свойствами, то их описывают внутри фигурных скобок. Свойства указываются в формате имяСвойства : значение, между свойствами ставится запятая:

const book = {
title: 'Война и мир',
author: 'Лев Толстой',
pages: 1274,
isFinished: true
}


CodeBase | Frontend | #js
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
👩‍💻 Что такое тег <section>

Тег <section> создаёт независимый блок — например, блок новостей, блок с контактами или просто абзац с заголовком.

<section>
<h1>Заголовок первого блока</h1>
<p>Съешь ещё этих мягких французских булок, да выпей чаю.</p>
</section>

<section>
<h1>Заголовок второго блока</h1>
<p>Съешь ещё этих мягких французских булок, да выпей же чаю.</p>
</section>


Тег <section> всегда закрывается при помощи парного тега </section>.
Внутри <section> обязательно должен быть заголовок <h1>...<h6>.
Контейнеры <section> можно вкладывать друг в друга, как матрёшку.

💡 Если вы хотите просто объединить и стилизовать второстепенные элементы, которые не так важны для поисковика, лучше использовать <div>.

Некоторые начинающие разработчики неверно понимают семантику этого тега и заменяют им большую часть дивов на странице. Так делать не стоит.

Тегом <section> стоит оборачивать большие логические блоки на странице.

🛠 По спецификации допустимо размещать в каждом <section> заголовок первого уровня (<h1>). Несмотря на это, не стоит размещать на странице больше одного заголовка первого уровня. Это важно для правильной индексации сайта поисковыми роботами.


CodeBase | Frontend | #html
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥2
⚙️ Что такое свойство text-shadow в CSS и зачем оно используется?

text-shadow — это CSS-свойство, которое добавляет тень к тексту, улучшая его визуальное восприятие. Оно позволяет задавать цвет, смещение, размытие и создавать эффекты, такие как свечение или объёмный текст.

➡️ Пример:
<div class="text">Тень у текста</div>

<style>
.text {
font-size: 24px;
font-weight: bold;
color: darkblue;
text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5); /* Тень с размитием */
}
</style>


🗣 В этом примере text-shadow делает текст более выразительным. Это свойство часто используется для стилизации заголовков, кнопок и декоративных элементов.

CodeBase | Frontend | #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
🧬 Иммутабельность из коробки: toSorted(), toSpliced() и with()

Сколько раз вы ловили трудноуловимые баги в React или Redux из-за того, что методы sort(), reverse() или splice() незаметно мутируют оригинальный массив?

Раньше, чтобы обновить состояние, нам приходилось плодить поверхностные копии через спред-оператор.

// Старая школа (много шума)
const sortedUsers = [...users].sort((a, b) => a.age - b.age);

// А замена элемента по индексу вообще выглядела как пытка:
const updatedUsers = [...users];
updatedUsers[index] = newUser;

В стандарте ES2023 (Baseline 2023) JavaScript наконец-то получил нативные иммутабельные методы массивов. Они делают то же самое, но возвращают новый массив, оставляя оригинал нетронутым.

🚀 Как пишем теперь:

1. Сортировка и разворот

// Оригинал цел, получаем новый массив
const sorted = users.toSorted((a, b) => a.age - b.age);
const reversed = users.toReversed();

2. Удаление/вставка (вместо splice)

const months = ["Jan", "Mar", "Apr", "May"];

// Вставляем "Feb" на индекс 1 (ничего не удаляя)
const fixedMonths = months.toSpliced(1, 0, "Feb");
// ["Jan", "Feb", "Mar", "Apr", "May"]

3. 🔥 Метод with() - киллер-фича для React

Заменяет элемент по индексу без мутаций. Идеально для обновления конкретного элемента в массиве состояния.

const state = ['apple', 'banana', 'cherry'];

// Меняем 'banana' на 'mango'
const newState = state.with(1, 'mango');
// ['apple', 'mango', 'cherry']

💡Методы работают не только с массивами, но и с TypedArrays (например, Uint8Array). А метод with() отлично справляется с отрицательными индексами - arr.with(-1, newItem) заменит последний элемент массива без вычисления его длины!

CodeBase | Frontend | #js
👍3🎄21
⚡️ Прощай, FID. Привет, INP: Главная метрика Core Web Vitals

First Input Delay (FID) официально ушел на пенсию в марте 2024 года. На его место пришел INP (Interaction to Next Paint). Если вы всё еще оптимизируете старую метрику, самое время пересмотреть свои подходы.

В чем был обман FID?
FID измерял только задержку (Input Delay) от клика до того момента, как браузер начал выполнять ваш обработчик событий.
Если ваша функция onClick после старта зависала на 2 секунды, перебирая огромный массив, FID всё равно мог быть идеальным (например, 3 мс), хотя пользователь видел намертво зависший интерфейс.

Что измеряет INP?
INP фиксирует всё время до появления визуального отклика на экране:

1. Ожидание освобождения Main Thread (Input delay)
2. Выполнение вашего JS-кода (Processing time)
3. Пересчет стилей, Layout и саму отрисовку (Presentation delay)

Хороший INP - это меньше 200 мс. Причем берется не среднее значение, а один из худших результатов за сессию (98-й перцентиль).

🛠 Как спасать INP (Senior level):

1. Разбивайте Long Tasks (Yield to Main Thread)
Не заставляйте браузер делать всю тяжелую работу за один присест. Дайте ему возможность «вздохнуть» и отрисовать кадр. В современных браузерах для этого внедряется scheduler.yield().


async function handleHeavyClick() {
// 1. Показываем лоадер (синхронно, легко)
showSpinner();

// 2. Отдаем управление браузеру, чтобы он успел отрисовать лоадер!
// Если scheduler.yield недоступен, используем await new Promise(r => setTimeout(r, 0))
if ('scheduler' in window && 'yield' in scheduler) {
await scheduler.yield();
} else {
await new Promise(resolve => setTimeout(resolve, 0));
}

// 3. Теперь делаем тяжелую работу
processHugeData();
}



2. Используйте startTransition в React 18+
Если клик вызывает обновление состояния, которое требует тяжелого рендера (например, фильтрация большого списка), React может заблокировать отрисовку того же чекбокса, на который вы нажали.
Оберните тяжелое обновление стейта в startTransition - React пометит его как низкоприоритетное и не будет блокировать UI.

3. Избегайте Layout Thrashing
Если в обработчике клика вы сначала читаете размеры элемента (el.offsetHeight), а потом меняете классы, вы заставляете браузер синхронно пересчитывать стили (Forced Synchronous Layout). Это убивает фазу Presentation Delay. Сначала читайте, потом пишите!

CodeBase | Frontend | #js
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Conform - это потрясающе

- Валидация клиента + сервера из одной схемы Zod
- Прогрессивное улучшение
- Восхитительно простой API
- Работает с Next.js ( server actions + useFormState)

CodeBase | Frontend | #animate
👍2
Как работает SVG ViewBox

Данная статья с интерактивными примерами поясняет, как применять атрибут viewBox в SVG.

Raster vs. Vector
Render Image
Inline SVG
Coordinates
View Box
Pan & Zoom
Zoom to Square
Animate
React Spring
Scaling Stroke
Use Case

https://svg.bradwoods.io/lessons/viewbox

CodeBase | Frontend | #animate
👍2
⚙️ Что такое свойство backdrop-filter в CSS и зачем оно используется?

Свойство backdrop-filter применяет визуальные эффекты к фону за элементом, а не к самому элементу.

Чаще всего используется для blur-эффекта в модальных окнах и стеклянных интерфейсах


➡️ Пример:

<div class="card">Контент</div>

<style>
body {
background: url(bg.jpg) no-repeat center / cover;
}

.card {
width: 300px;
padding: 20px;
backdrop-filter: blur(10px);
background: rgba(255, 255, 255, 0.2);
border-radius: 12px;
}
</style>


🗣️ Популярные эффекты:

blur() — размытие
brightness() — яркость
contrast() — контраст
saturate() — насыщенность

backdrop-filter позволяет создавать современные UI-эффекты без изображений и JS, но требует полупрозрачного фона и поддержки браузером


CodeBase | Frontend | #Основы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
👩‍💻 Метод includes() в JavaScript и как он используется

Метод includes() проверяет, содержится ли элемент в массиве.

Возвращает true или false и не изменяет исходный массив


➡️ Пример:

Метод includes() в JavaScript и как он используется

Метод includes() проверяет, содержится ли элемент в массиве.
Возвращает true или false и не изменяет исходный массив


🗣️ В этом примере:

includes() выполняет проверку на наличие значения
• Работает корректно с примитивами (string, number, boolean)
• Читабельнее и безопаснее, чем indexOf() !== -1

includes() — простой и выразительный способ писать понятные проверки без лишней логики


CodeBase | Frontend | #JS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥1
Как frontend-разработчику вырасти в ЗП?

День сурка frontend-разработчика выглядит так

Зарплата замерла, задачи — бесконечный повтор, растет только кол-во бессмысленных созвонов

Откликаешься на вакансии — отвечают только ноунеймы, на собесах закидывают странными алгоритмами «на скорость».

И самое бесящее — пока буксуешь, кто-то вокруг спокойно забирает офферы в Яндекс и VK...

Ты тоже можешь получить оффер в компанию, в которой тебя будут ценить и хорошо платить.


👋 Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Я за руку довожу до оффера на хорошую позицию в Big Tech и сопровождаю на испытательном сроке.

В своем канале:
👉Объясняю, как проходить HR-фильтр и превращать отклики в реальные приглашения
👉Помогаю найти мотивацию, борюсь убеждениями, которые мешают развиваться
👉На примерах объясняю как проходить собеседования, включая техничку
👉Разбираю резюме и делюсь лайфхаками, например как аккуратно “пинговать” рекрутеров

А еще регулярно публикую полезные материалы:
▪️Задачи, на которых валяться кандидаты
▪️База по микрофронтам
▪️Подборка из 100+ каналов с вакансиями для разработчиков
▪️100 вопросов, которые точно помогут тебе на собеседовании
▪️Чек лист проверки своего резюме

А еще у меня множество успешных кейсов и трогательных отзывов, найти их можно в канале.

Реклама, erid: 2W5zFGhsAzd ИП Галактионов Тихон Витальевич, ИНН 771618975809
This media is not supported in your browser
VIEW IN TELEGRAM
Вот что происходит, когда просишь ИИ отцентрировать div

CodeBase | Frontend | #meme
😁81🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
В случае, если долго грузится пост или видео, рассмотрите, пожалуйста, возможность перейти в МАХ
😁5
This media is not supported in your browser
VIEW IN TELEGRAM
Найдена идеальная анимация для загрузочного экрана 🤔

CodeBase | Frontend | #meme
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😁31
🖥 Этот CSS пора оставить в прошлом

Показываю, как переписать привычные решения — центрирование, сетки, эффекты и адаптивность — на свежие фичи вроде :has(), контейнерных запросов и subgrid. Коротко, практично и без JS.

🔗 Ссылка

CodeBase | Frontend | #article
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥1
⚙️Тег <noscript> используется для отображения контента, если JavaScript отключен в браузере. Он позволяет предоставить альтернативное содержимое или сообщение для пользователей, которые не могут или не хотят использовать JavaScript.

Пример:
<noscript>
  <p>Please enable JavaScript to use this website.</p>
</noscript>


- Контент внутри <noscript> отображается только при отключенном JavaScript.
- Часто используется для информирования пользователей или предоставления базовой функциональности без JavaScript.

CodeBase | Frontend | #Основы
Please open Telegram to view this post
VIEW IN TELEGRAM
3