Привет, Хабр! Меня зовут Андрей Бирюков. Я — независимый эксперт в области ИТ и ИБ, преподаю в учебных центрах и пишу статьи и книги.При разработке часто бывает так, что мы вроде бы всё делаем, как говорится, «по учебнику», а результат как‑то не очень. Например, мы разбили приложение на ленивые модули, каждый маршрут грузится отдельно, настроили production‑сборку. После этого открываем Chrome DevTools на вкладке Network и видим: main.js — 1.8 МБ. Явно не то, что мы ожидали. И это только начало.…
Вайб-кодинг уронил порог входа в разработку до плинтуса. Lovable, Bolt, v0 и им подобные позволяют за вечер собрать лендинг для своей мастерской, студии или небольшого бизнеса без единой строчки кода, написанной руками. Lovable вообще был первой нейронкой, с которой я познакомился для создания фронта: удобная штука для быстрой сборки концепта, когда в голове уже есть картинка будущего сайта.Но дальше начинается типичная история. Сайт есть, тексты есть, задеплоено на хостинг в пару кликов. А кон…
Привет, Хабр! «JavaScript однопоточный, но асинхронный» — фраза, которую слышал каждый и которая при этом ровным счётом ничего не объясняет. Как один поток умудряется одновременно ждать ответ сервера, отсчитывать таймер и обрабатывать клики? Почему setTimeout(fn, 0) срабатывает не сразу? Почему промис обгоняет таймер с нулевой задержкой, хотя оба вроде бы асинхронные? Почему тяжёлый цикл вешает всю страницу, а сетевой запрос — нет?Хорошая новость: всё это закрывается одной моделью, и она куда п…
Вот именно такой вопрос был задан в первом же комментарии к статье "DI-контейнер на чистом JavaScript без TypeScript и reflect-metadata" уважаемого @alexander_kubarski. Я когда-то и сам на Хабре отвечал на этот вопрос ("Зачем нужно внедрение зависимостей в JS"), и уважаемый @Wroud тоже ("Dependency Injection в JavaScript: зачем он вам нужен"), но непонимание места и значения DI у JS-разработчиков всё равно присутствует. Попробую ответить на этот вопрос ещё раз:Внедрение …
С 14 марта по 19 июля я писал в паре с Claude Code одно приложение: 517 коммитов, 228 из них релизные, 61 891 строка JS/CSS/HTML, 508 headless-тестов.Сразу оговорюсь, потому что это объясняет половину дальнейшего текста: на работе я имею дело с базами данных и SQL. Фронтенд — не моя область. У меня нет насмотренности, которая позволяет опытному верстальщику глянуть на экран и сказать «тут поехал z-index». Всё, что описано ниже, — попытка заменить эту насмотренность формальными проверками.Статья…
Привет! В этой статье я - Антон Резников, Fullstack разработчик и Lead проекта из evilUnion, расскажу, как мы отказались от знакомого всем Next JS, не пожалели об этом и запустили один из самых крупных наших проектов на очень перспективном фреймворке - Astro JS.В этой статье мы посмотрим, что из себя представляет Astro, чем он выделяется среди других метафреймворков, изучим его особенности, а далее на реальном примере пройдем весь путь построения мультиязычного сайта на 500+ тыс. страниц. Поеха…
Привет, Хабр! Меня зовут Дмитрий Попов, я Android‑разработчик в ПСБ. В какой‑то момент мне захотелось разобраться — что такое корутина и откуда они вообще взялись. Погрузившись в различные статьи и видео, я узнал много нового, рассказал коллегам внутри команды, а теперь решил рассказать и вам. Все, что важно знать о корутинах, по моему скромному мнению, — в этой статье!Глава 1. Что такое корутина?И начнем с определения.На сегодняшний день корутины являются неотъемлемой частью современной разраб…
Вот тест, который проходит CI в большинстве проектов, что я видел:test('форма отправляется', async ({ page }) => { await page.goto('/feedback'); await page.getByLabel('Email').fill('a@b.c'); await page.locator('#submit').click({ force: true }); await page.waitForTimeout(3000); }); Три греха в пяти строках: клик в обход проверок видимости, слепая пауза вместо ожидания состояния и ни одной проверки результата — тест «проходит», даже если форма ме…
Выбирая тему для работы в университете, я хотел, чтобы она казалась не только хорошей в плане исследования, но и являлась интересной для выполнения. А интересно мне на тот момент было поэкспериментировать с задачей N тел. В итоге у меня получилось PWA‑приложение с физическим движком на Rust и скомпилированным в WebAssembly, визуализацией через Three.js, и также с сохранением результатов экспериментов через Supabase.Полноэкранный режимОбычный вид интерфейса (слева настройки, справа метрики, в це…