Category : javascript

javascript
Устарел ли next‑intl? И как реально оптимизировать такую архитектуру

Когда Next.js перешел с Pages Router на App Router и убрал встроенную поддержку i18n‑роутинга, библиотека next-intl стала стандартом по умолчанию для большинства команд. Ян Аманн проделал отличную работу по ее поддержке, и долгое время это был самый надежный выбор для мультиязычных проектов.is next‑intl outdatedЯ давно занимаюсь профилированием производительности интернационализированных приложений на Next.js. За последние годы вся React‑экосистема заметно сместилась в сторону серверных компоне…

  • пятница, 4 сентября 2026 г. в 00:00:09
javascript
Centrifugal. Fluid UI для создания standalone веб‑приложений

Всем привет! Меня зовут Евгений, я фронтенд‑инженер с большой экспертизой в разработке современных веб‑приложений. Сегодня хочу рассказать про свой очередной open‑source проект для построения веб‑приложений на основе Angular.За последние годы я провел не мало успешных экспериментов с высокопроизводительными веб‑интерфейсами, что дало мне четкое понимание структуры и архитектуру для проекта, о котором пойдет дальше речь.Итак, встречайте Centrifugal. Посмотрите официальный сайт проекта, там очень…

  • пятница, 4 сентября 2026 г. в 00:00:08
javascript
V8 startup snapshot: как правильно запустить JS-код на сервере

Представьте типичную ситуацию. У вас есть сервер на каком-то языке (сейчас какой именно для нас не важно, но допустим, это Rust). И в нём по каким-то причинам нужно исполнить JavaScript-код. Например, фронтенд написан на React, и вы хотите рендерить HTML на сервере (SSR). Или есть бизнес-логика, которая проще пишется на JS. Или библиотека, которая существует только в npm, и переписывать её на Rust нет ни сил, ни желания. Таких примеров можно привести множество: markdown, dompurify, highlight.js…

  • пятница, 4 сентября 2026 г. в 00:00:06
javascript
HTTP 200 на несуществующий адрес: пять способов, которыми Telegram обманул мои проверки

ПостановкаЕсть список публичных адресов Telegram. По каждому надо ответить на два вопроса: существует ли он и что это за сущность. Дальше у каналов прочитать публичное превью и классифицировать содержимое.Никакого API: MTProto для такой задачи избыточен, а веб-превью Telegram отдаёт всё нужное обычным GET. Казалось бы, сорок строк на fetch и разбор.Ловушка 1. Несуществующий адрес отвечает 200Первое предположение: раз имя свободно, будет 404. Не будет.GET https://t.me/zzqqxx_not_a_real_channel_9…

  • пятница, 4 сентября 2026 г. в 00:00:05
javascript
Как DevSpace ускорил проверку микрофронтендов

Я фронтенд-разработчик и в основном работаю с Angular. Проекты, над которыми я работаю, находятся в монорепозитории, развёрнуты в Kubernetes, и часть из них использует микрофронтендную архитектуру: основное приложение (хост) загружает отдельные микрофронтенды.Суть проблемыПри разработке всегда требуется проверка выполненной работы. Для изолированной проверки визуала и бизнес-логики микрофронтенд можно запустить локально как обычное приложение, а вызовы АПИ замокать. Но этого недостаточно для ин…

  • пятница, 4 сентября 2026 г. в 00:00:04
javascript
Тест проходил за миллисекунды. На настоящем файле тот же код думал минуту

Тест проходил за миллисекунды. На настоящем файле тот же код думал минутуЭто знает каждый, кто писал на JavaScript:"привет".length // 6 "👋".length // 2 "🇺🇿".length // 4 length считает не символы, а кодовые единицы UTF-16. Эмодзи занимает две, флаг — четыре. Обрезать такую строку через slice(0, 20) значит однажды разрубить символ пополам и показать пользователю ромб с вопросительным знаком.Дальше все делают одно и то же: пишут честную функцию, которая ходит…

  • четверг, 3 сентября 2026 г. в 00:00:11
javascript
Вы скопировали команду с сайта. В буфер попало не то, что вы выделили

Ставил утилиту по инструкции с сайта проекта: блок с командой, кнопка «скопировать», вставка в терминал. Перед Enter посмотрел на строку — вставилось не то, что было в блоке.Проблема в том, что сайт полностью контролирует, что окажется в буфере обмена. Показать он может одно, положить — другое. И у страницы есть несколько способов сделать это так, что при вставке вы ничего не заметите.Способ первый: подмена при копированииБраузер даёт странице событие copy, и обработчик может записать в буфер ч…

  • четверг, 3 сентября 2026 г. в 00:00:10
javascript
Когда все тесты зелёные, а баги едут в прод

Статья подготовлена в рамках курса «Автоматизатор тестирования на JavaScript». Привет, Хабр!Меня зовут Андрей Бирюков. Я — независимый эксперт в области ИТ и ИБ, преподаю в учебных центрах и пишу статьи и книги.Вы когда‑нибудь получали от ИИ тесты, которые «идеально проходят», а через неделю ловили баг в том самом месте, которое должно быть покрыто? Это не случайность — это симптом тавтологического тестирования.Для того, чтобы понять суть проблемы, давайте представим себе функцию расчёта налога…

  • среда, 2 сентября 2026 г. в 00:00:14
javascript
Как устроено состояние в React.js

Что поисковики и ИИ предлагают учить перед собеседованиями? Чаще всего — что-то в духе списка вопросов с гитхаба.github.com/sudheerj/reactjs-interview-questionsИ как это учить? Тупо нажимать на каждый ответ и заучивать разницу в синтаксисе?А на собесе потом:— Расскажите про состояние на фронте.— useState нужен для маленького состояния, useContext — для чуть больших приложений. Для совсем больших берём Redux. Иногда можно и Jotai.— А в чём разница?— Для useState не нужен <Provider>, для Re…

  • среда, 2 сентября 2026 г. в 00:00:12