Стандартный браузерный механизм, который позволяет заранее рендерить страницы и активировать их почти без задержек. Без JS-библиотек, без клиентского роутинга и без серверных настроек.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#under_hood
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
Вращение, появление, пульсация и bounce — четыре примера, которые пригодятся в любом проекте.
Каждый эффект — это
@keyframes и несколько строк CSS. Копируйте и адаптируйте под свои задачи.🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#readme #css
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2🥰2
AI в браузере — это уже реальность, а не будущее
TensorFlow.js, WebGL, сложная визуализация данных на Canvas. Фронтенд становится умнее. Чтобы внедрять ML-фичи на клиенте и понимать, как оптимизировать вычисления, чтобы не «повесить» вкладку пользователя, нужна математическая база.
Завтра мы запускаем курс «Математика для разработки AI-моделей».
Разберём всё: от матриц до градиентов, но понятным языком и с прицелом на практику.
Цена вопроса: 28 200 ₽.
Старт: Уже завтра.
Забирайте знания, пока цена праздничная:
👉 Узнать детали и записаться
🎁 Вводный тест: @proglib_academy_webinar_bot
TensorFlow.js, WebGL, сложная визуализация данных на Canvas. Фронтенд становится умнее. Чтобы внедрять ML-фичи на клиенте и понимать, как оптимизировать вычисления, чтобы не «повесить» вкладку пользователя, нужна математическая база.
Завтра мы запускаем курс «Математика для разработки AI-моделей».
Разберём всё: от матриц до градиентов, но понятным языком и с прицелом на практику.
Цена вопроса: 28 200 ₽.
Старт: Уже завтра.
Забирайте знания, пока цена праздничная:
👉 Узнать детали и записаться
🎁 Вводный тест: @proglib_academy_webinar_bot
❤4🙏2
🧩 Архитектура, которая делает код предсказуемым
Смешивание бизнес-логики и побочных эффектов приводит к хрупкости системы: тесты становятся тяжёлыми, изменения — рискованными, а переиспользование — ограниченным.
➡️ Imperative Shell — работа с внешним миром
Оболочка отвечает только за взаимодействие с БД и отправку сообщений. Бизнес-логика остаётся неизменной и предсказуемой.
➡️ Переиспользование без боли
Добавление новой функциональности не требует переписывать логику — только меняется контекст использования:
💡 Принцип простой:
чистые функции — для вычислений, императивная оболочка — для эффектов.
Результат — тестируемый, модульный и надёжный код, устойчивый к изменениям.
🔗 Источник: Google Testing Blog
🐸 Библиотека фронтендера
#blueuprint #react
Смешивание бизнес-логики и побочных эффектов приводит к хрупкости системы: тесты становятся тяжёлыми, изменения — рискованными, а переиспользование — ограниченным.
email.bulkSend(
generateExpiryEmails(
getExpiredUsers(db.getUsers(), Date.now())
)
);
Оболочка отвечает только за взаимодействие с БД и отправку сообщений. Бизнес-логика остаётся неизменной и предсказуемой.
Добавление новой функциональности не требует переписывать логику — только меняется контекст использования:
const fiveDaysFromNow = ...
email.bulkSend(
generateReminderEmails(
getExpiredUsers(db.getUsers(), fiveDaysFromNow)
)
);
чистые функции — для вычислений, императивная оболочка — для эффектов.
Результат — тестируемый, модульный и надёжный код, устойчивый к изменениям.
#blueuprint #react
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🥰2🔥1
Chrome, Edge, Firefox и Safari официально добавили WebGPU — новый низкоуровневый API для работы с видеокартой прямо в браузере.
Что это меняет:
Статус платформ:
• Android — поддержка с Chrome 121+;
• Linux и Intel Mac — в активной разработке;
• WebGPU уже пригоден для production: экосистема растёт, документация стабилизируется.
#release_digest
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤2😁2🥰1
Когда нужен простой и предсказуемый центр по обеим осям — Grid справляется быстрее и чище, чем Flex.
• модальные окна
• лоадеры и спиннеры
• empty states
• hero-блоки
• карточки с иконками и коротким текстом
Любой статичный компонент, где центр — ключевая точка внимания.
place-items — это шорткат для align-items + justify-items.
Можно настраивать оси раздельно:
.container {
display: grid;
place-items: start center; /* вертикаль | горизонталь */
}
Flex выигрывает в динамических сценариях:
• несколько элементов в строке
• space-between / space-around
• адаптивный wrap
• навигация, списки, карточки в ряду
Если нужно распределить несколько элементов, а не центрировать один — выбирайте Flex.
🌐 Поддержка: Chrome 59+, Firefox 45+, Safari 11+, Edge 79+
#hotfix #css
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
В неё входят решения для работы с событиями браузера, состояниями, сетевыми запросами, таймерами и другими типовыми задачами. Всё реализовано аккуратно, понятно и готово к продакшну.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#stack #react
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🥰4❤2
Большинство разработчиков знают только git add . и git reset, но есть команда, которая позволяет работать чище и безопаснее — git restore --staged.
Она снимает изменения только из индекса (staged), не трогая рабочую директорию. То есть код остаётся в файлах, но не попадёт в коммит.
Когда это используют:
Добавили лишние файлы?
Вернуть индекс в чистое состояние проще простого:
git restore --staged .
Когда в PR важно отделить:
– правки логики
– форматирование
– обновления зависимостей
– рефакторинг
Если что-то случайно попало — легко убрать из staged:
git restore --staged src/utils/helpers.js
Интерактивно добавляли куски кода и выбрали не тот?
Команда помогает быстро исправить ошибку — без потери изменений в файле.
Нужно собрать идеальный коммит.
Важно иметь чистый staged — restore отлично помогает контролировать этот процесс.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#readme #git
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🥰3❤🔥1
Anthropic приобрела команду Oven — разработчиков JavaScript-платформы Bun.
Зачем это Anthropic:
Bun уже используется в Claude Code и Claude Agent SDK. Покупка закрепляет его как технологическую основу продуктов компании.
Что изменится для разработчиков
По заявлению команды — ничего критичного:
• проект остаётся open-source;
• разработка продолжится на GitHub;
• команда сохраняется;
• roadmap не меняется.
Фактически это усиление стабильности проекта и гарантия его долгосрочной поддержки.
#release_digest
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🥰2
«Я фронтендер, зачем мне матрицы?»
Пока AI-инструменты пишут код за нас, ценность разработчика смещается. Теперь круто не просто сверстать интерфейс, а понимать, как работает ML-модель, которую вы подключаете по API.
Математика — это универсальный язык, который не устаревает, в отличие от JS-фреймворков.
Мы обновили курс по математике для AI. Это ваш шанс выйти за рамки браузера.
Что будем делать (на Python, но логика важнее):
🔹 Разбирать линейную алгебру для работы с данными;
🔹 Строить линейную регрессию с нуля;
🔹 Создавать простые рекомендательные системы через SVD-разложение.
Живые вебинары уже начались, но вы успеваете догнать группу.
Регистрация открыта до 9 декабря:
https://clc.to/LojFzw
Пока AI-инструменты пишут код за нас, ценность разработчика смещается. Теперь круто не просто сверстать интерфейс, а понимать, как работает ML-модель, которую вы подключаете по API.
Математика — это универсальный язык, который не устаревает, в отличие от JS-фреймворков.
Мы обновили курс по математике для AI. Это ваш шанс выйти за рамки браузера.
Что будем делать (на Python, но логика важнее):
🔹 Разбирать линейную алгебру для работы с данными;
🔹 Строить линейную регрессию с нуля;
🔹 Создавать простые рекомендательные системы через SVD-разложение.
Живые вебинары уже начались, но вы успеваете догнать группу.
Регистрация открыта до 9 декабря:
https://clc.to/LojFzw
🥰4👍2🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
Восемь способов выбрать нужный элемент без лишних классов. От базовых :first-child и :last-child до продвинутых формул с :nth-child(3n+1). Один селектор вместо десятка классов.
#readme #css
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🥰3🔥1
Всё началось невинно. Нужен debounce для поиска — поставил Lodash. Нужно форматировать даты — Moment.js. Иконки? React Icons, конечно.
Через три месяца разработки делаю
npm run build и вижу:⚠️ 2.8 MB main.js
Решил разобраться. Установил webpack-bundle-analyzer и офигел от того, что увидел.
Оказалось, я тащил в проект кучу лишнего:
Lodash (70 KB)
Импортировал всю библиотеку ради двух функций. Остальные 200+ методов просто висят мёртвым грузом.
Moment.js (70 KB)
Мне нужен был толькоformat('DD.MM.YYYY'), а получил все локали мира, парсеры timezone и calendar-системы.
React Icons
По проекту набралось 50+ импортов разных иконок. Bundle незаметно разросся.
Картинки в bundle
Webpack превращал изображения в base64 и пихал прямо в JavaScript. Hero-картинка на 200 KB стала частью main.js.
Начал с простого — заменил импорты на точечные:
// Было: тащит 70 KB
import _ from 'lodash'
// Стало: всего 1-2 KB
import debounce from 'lodash/debounce'
Дальше пошёл по библиотекам и нашёл более лёгкие альтернативы:
Moment.js (70 KB) → date-fns (11 KB)
Axios (13 KB) → fetch API (нативно)
Для роутинга включил code splitting. Теперь страницы грузятся только когда пользователь на них переходит:
const Dashboard = lazy(() => import('./Dashboard'))
const Settings = lazy(() => import('./Settings'))
<Suspense fallback={<Loader />}>
<Dashboard />
</Suspense>
С картинками разобрался так: большие файлы переложил в
/public, конвертнул в WebP (экономия 30-50%), добавил loading="lazy".И последнее — настроил size-limit в CI/CD. Теперь если кто-то попытается влить PR с раздутым bundle, пайплайн упадёт:
"size-limit": [{
"path": "build/static/js/*.js",
"limit": "500 KB"
}]
Было:
• Bundle: 2.8 MB
• Загрузка на 3G: 8.5 секунд
• Lighthouse: 45/100
Стало:
• Main bundle: 380 KB
• Остальное в lazy chunks по 50-150 KB
• Загрузка на 3G: 1.2 секунды
• Lighthouse: 92/100
Сайт стал грузиться в 7 раз быстрее. Пользователи перестали жаловаться. Менеджер доволен.
Главная ошибка была в подходе. Я думал: «npm install — и готово, пакеты же для этого и есть!»
Но каждый килобайт в bundle — это реальное время загрузки. Особенно для людей не на оптоволокне.
У меня на MacBook сайт грузился моментально. А у пользователя с iPhone 8 в метро на 3G — 10 секунд чёрного экрана. Это разные миры.
Теперь перед каждым
npm install спрашиваю себя: мне правда нужна вся библиотека? Или хватит одной функции? Может, это вообще можно сделать нативно?И раз в спринт запускаю
npm run build && npm run analyze. Лучше увидеть проблему сейчас, чем в жалобах пользователей потом.#code_battle
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🥱3🥰2
Что обычно раздувает bundle в твоих проектах ❓
Anonymous Poll
38%
Тяжёлые библиотеки (Moment.js, Lodash целиком)
20%
UI-киты (Material-UI, Ant Design)
14%
Картинки и медиа (неоптимизированные изображения, видео, шрифты)
24%
Избыточные зависимости (неиспользуемый код, дубликаты пакетов, старые версии)
4%
State management и утилиты (Redux + middleware, форм-библиотеки, анимации)
🥰2
Каждый раз одно и то же: нужна модалка → гуглите библиотеку → тащите зависимости → настраиваете accessibility → фиксите баги с фокусом → плачете над z-index.
А что если браузер уже умеет всё это нативно?
Галерея с модалкой на чистом <dialog>: ноль библиотек, ноль кастомного JS для accessibility.
<dialog>
<form method="dialog">
<!-- Браузер сам управляет фокусом, Esc, backdrop -->
</form>
</dialog>
Из коробки:
#read_watch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1